Dubbo简单介绍&入门例子

曾经终败给现在 2022-05-08 15:04 357阅读 0赞

1、Dubbo&Dubbox

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

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

70

2、 Dubbo简介

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

3、Dubbo的用途

  1. 1、透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需要简单的配置(Spring方式配置),没有任何API侵入。
  2. 2、软负载均衡以及容错机制,可以在内网替代F5等硬件负载均衡器,降低成本,减少单点。
  3. 3、服务自动注册与发现,不再需要写死服务提供方的地址,使用注册中心基于接口名来查询服务提供者,并且能够平滑地增加和删除服务提供者提供的服务。
  4. 4Dubbo采用全Spring配置方式,透明化地接入应用,对应用没有任何API侵入,只需要用Spring加载Dubbo的配置即可(Dubbo基于SpringSchema扩展进行加载的)。

4、Dubbo入门例子

  1. 我这里使用的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)代码结构如下:

70 1

(2)UserService定义两个方法:

  1. package hyf.dubbo.service;
  2. import java.util.List;
  3. import hyf.dubbo.entity.User;
  4. public interface UserService {
  5. /**
  6. *
  7. * @Desc 根据名称sayHello
  8. * @author Howinfun
  9. * @date 2018年10月12日
  10. * @param name
  11. */
  12. public void sayHello(String name);
  13. /**
  14. *
  15. * @Desc 获取User列表
  16. * @author Howinfun
  17. * @date 2018年10月12日
  18. * @return
  19. */
  20. public List<User> getUserList();
  21. }

(3)实体类User:

  1. package hyf.dubbo.entity;
  2. import java.io.Serializable;
  3. //一定要序列化,不然会报错
  4. public class User implements Serializable{
  5. private String name;
  6. private int age;
  7. public User() {
  8. super();
  9. }
  10. public User(String name, int age) {
  11. super();
  12. this.name = name;
  13. this.age = age;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public int getAge() {
  22. return age;
  23. }
  24. public void setAge(int age) {
  25. this.age = age;
  26. }
  27. @Override
  28. public String toString() {
  29. return "User [name=" + name + ", age=" + age + "]";
  30. }
  31. }

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

(1)代码结构如下:

70 2

(2)pom.xml

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

70 3

b、引入dubbo依赖

70 4

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

70 5

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

70 6

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

70 7

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

  1. package hyf.dubbo.serviceImpl;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import hyf.dubbo.entity.User;
  5. import hyf.dubbo.service.UserService;
  6. public class UserServiceImpl implements UserService{
  7. public void sayHello(String name) {
  8. System.out.println("欢迎"+name+"来到Dubbo世界~");
  9. }
  10. public List<User> getUserList() {
  11. return Arrays.asList(new User("hyf",24),new User("fy",23));
  12. }
  13. }

(5)测试类代码:

  1. package testSample;
  2. import java.io.IOException;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. import com.alibaba.dubbo.container.Main;
  5. public class TestSample {
  6. public static void main(String[] args) throws IOException {
  7. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "sample-provider.xml" });
  8. context.start();
  9. System.in.read(); //将主线程阻塞在这里
  10. }
  11. }

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

(1)代码结构如下:

70 8

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

  1. a、首先引入接口服务工程依赖
  2. b、引入dubbo依赖
  3. c、引入zookeeper的客户端zkClientdubbo会自动使用zkclient去和zookeeper进行连接:
  4. d、当然了,我们dubbo是结合spring的,记得还要引入spring的依赖

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

70 9

(4)测试类代码:

  1. package testSample;
  2. import org.springframework.context.support.ClassPathXmlApplicationContext;
  3. import hyf.dubbo.entity.User;
  4. import hyf.dubbo.service.UserService;
  5. public class TestSample {
  6. public static void main(String[] args) {
  7. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:sample-consumer.xml");
  8. UserService userService = (UserService) context.getBean("userService");
  9. userService.sayHello("hyf");
  10. userService.getUserList().stream().forEach((User user)->{
  11. System.out.println(user);
  12. });
  13. }
  14. }

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

70 10

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

70 11

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

70 12

70 13

发表评论

表情:
评论列表 (有 0 条评论,357人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Dubbo框架入门介绍

      背景    随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不

    相关 Dubbo 入门介绍

    一、什么是Dubbo Dubbo 是阿里巴巴公司一个开源的高性能服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案,使得应用可通过

    相关 dubbo笔记——入门介绍

    一、基本介绍 1、背景说明         随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已经无法应对,分布式服务架构以及流动计算架构势在必行,急需一