Dubbo简单介绍&入门例子

1、Dubbo&Dubbox

        Dubbo是一个开源的分布式服务框架,被我国国内很多互联网公司认可并广泛使用,即使放到国际视野来看也是一个非常全面的SOA(面向服务架构)基础框架,因此成功Apache的开源项目。而Dubbox是当当网根据自身的需求,在Dubbo的基础上实现了一些新的功能,并将其命名为Dubbox(即Dubbo eXtensions)。

下面是Dubbo的RESTful风格的远程调用的应用蓝图。

Dubbo简单介绍&入门例子_第1张图片

2、 Dubbo简介

       Dubbo致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单点来说,Dubbo其实就是一个服务框架,如果没有分布式的话,其实不是必须的。只有在分布式的时候,才有分布式服务框架这样的要求,其实本质功能和WebService是非常相似的,就是远程调用服务而已。但是我们不再需要记住WebService中想当麻烦的WSDL了。我们只用以服务者和消费者的方式在Dubbo上注册即可,并且Dubbo的功能远不止远程调用服务这么简单。

3、Dubbo的用途

      1、透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需要简单的配置(Spring方式配置),没有任何API侵入。

      2、软负载均衡以及容错机制,可以在内网替代F5等硬件负载均衡器,降低成本,减少单点。

      3、服务自动注册与发现,不再需要写死服务提供方的地址,使用注册中心基于接口名来查询服务提供者,并且能够平滑地增加和删除服务提供者提供的服务。

      4、Dubbo采用全Spring配置方式,透明化地接入应用,对应用没有任何API侵入,只需要用Spring加载Dubbo的配置即可(Dubbo基于Spring的Schema扩展进行加载的)。

4、Dubbo入门例子

      我这里使用的Dubbo版本是2.5.3,所以请大家注意好。最新版本和入门例子可到官网上学习:http://dubbo.io

1、因为我们的注册中心使用Zookeeper的,所以先准备好环境。三台机子192.168.1.111、112、113。此处的Zookeeper的Linux环境准备可自行百度,很多。

2、例子的场景很简单,一个服务提供两个方法,一个sayHell,一个getUserlist。将会创建三个maven项目。其中一个为接口服务,一个为服务提供者,一个为服务消费者,两个都需要依赖于接口服务。

3、创建接口服务的maven工程,默认打包方式为jar包,名字为:User-Service

编写实体类User和服务接口UserService。注意实体类要实现Serializable,不然会报通信错误。

(1)代码结构如下:

Dubbo简单介绍&入门例子_第2张图片

 

 

(2)UserService定义两个方法:

 

package hyf.dubbo.service;

import java.util.List;
import hyf.dubbo.entity.User;

public interface UserService {
	/**
	 * 
	 * @Desc 根据名称sayHello
	 * @author Howinfun
	 * @date 2018年10月12日
	 * @param name
	 */
	public void sayHello(String name);
	/**
	 * 
	 * @Desc 获取User列表
	 * @author Howinfun
	 * @date 2018年10月12日
	 * @return
	 */
	public List getUserList();
}

(3)实体类User:

package hyf.dubbo.entity;

import java.io.Serializable;
//一定要序列化,不然会报错
public class User implements Serializable{
	private String name;
	private int age;
	
	public User() {
		super();
	}
	public User(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [name=" + name + ", age=" + age + "]";
	}
}

4、创建服务提供者的Maven项目,打包方式为war,以后的例子继续在这上面做。名字为:Dubbo-provider.

(1)代码结构如下:

Dubbo简单介绍&入门例子_第3张图片

(2)pom.xml

a、首先引入接口服务工程依赖

Dubbo简单介绍&入门例子_第4张图片

 b、引入dubbo依赖

Dubbo简单介绍&入门例子_第5张图片

 c、引入zookeeper的客户端zkClient,dubbo会自动使用zkclient去和zookeeper进行连接:

Dubbo简单介绍&入门例子_第6张图片

d、当然了,我们dubbo是结合spring的,记得还要引入spring的依赖

Dubbo简单介绍&入门例子_第7张图片

(3)spring的配置文件sample-provider.xml:

Dubbo简单介绍&入门例子_第8张图片

 

(4)编写实现UserService接口的代码:

package hyf.dubbo.serviceImpl;

import java.util.Arrays;
import java.util.List;

import hyf.dubbo.entity.User;
import hyf.dubbo.service.UserService;

public class UserServiceImpl implements UserService{

	public void sayHello(String name) {
		System.out.println("欢迎"+name+"来到Dubbo世界~");
	}

	public List getUserList() {
		return Arrays.asList(new User("hyf",24),new User("fy",23));
	}

}

(5)测试类代码:

package testSample;
import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.alibaba.dubbo.container.Main;

public class TestSample {
	public static void main(String[] args) throws IOException {
		ClassPathXmlApplicationContext context  =  new ClassPathXmlApplicationContext(new String[] { "sample-provider.xml" });
		context.start();
		System.in.read(); //将主线程阻塞在这里

	}
}

5、创建服务提供者的Maven项目,打包方式为war,以后的例子继续在这上面做。名字为:Dubbo-consumer

(1)代码结构如下:

Dubbo简单介绍&入门例子_第9张图片

(2)pom.xml引入依赖(和上面引入的依赖一样即可)

      a、首先引入接口服务工程依赖

      b、引入dubbo依赖

      c、引入zookeeper的客户端zkClient,dubbo会自动使用zkclient去和zookeeper进行连接:

      d、当然了,我们dubbo是结合spring的,记得还要引入spring的依赖

(3)spring的配置文件sample-consumer.xml:

Dubbo简单介绍&入门例子_第10张图片

(4)测试类代码:

package testSample;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import hyf.dubbo.entity.User;
import hyf.dubbo.service.UserService;

public class TestSample {
	public static void main(String[] args) {
		ClassPathXmlApplicationContext context  =  new ClassPathXmlApplicationContext("classpath:sample-consumer.xml");
		UserService userService = (UserService) context.getBean("userService");
		userService.sayHello("hyf");
		userService.getUserList().stream().forEach((User user)->{
			System.out.println(user);
		});
	}
}

6、启动provider,当后台打印下图的内容,证明服务注册成功了:

Dubbo简单介绍&入门例子_第11张图片

这时候我们可以看一下zookeeper的节点是否发生变化:

Dubbo简单介绍&入门例子_第12张图片

7、启动consumer并看是否能调用服务:

Dubbo简单介绍&入门例子_第13张图片

 

 

 

 

你可能感兴趣的:(Dubbo)