一个计算机技术爱好者与学习者

0%

Dubbo入门篇

1. Dubbo简介

Dubbo是阿里巴巴公司开源的一个高性能的分布式服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。

RPC(Remote Procedure Call)——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

参考文档:

2. 服务调用流程

1、服务容器负责启动,加载,运行服务提供者。
2、服务提供者在启动时,向注册中心注册自己提供的服务。
3、服务消费者在启动时,向注册中心订阅自己所需的服务。
4、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

3. Dubbo注册中心

Dubbo提供的注册中心有如下几种类型可供选择:

  • Multicast注册中心
  • Zookeeper注册中心
  • Redis注册中心
  • Simple注册中心

本文中,我们选择使用Zookeeper作为注册中心,Zookeeper安装配置方法参考文档《Zookeeper入门篇》

4. dubbo-admin

dubbo的使用,其实只需要有注册中心、提供者、消费者这三个就可以使用了,但是并不能看到有哪些消费者和提供者,为了更好的调试,发现问题,解决问题,因此引入dubbo-admin。通过dubbo-admin可以对消费者和提供者进行管理。

1、源码下载

1
git clone https://github.com/alibaba/dubbo.git

这份源码,不止包含dubbo-admin,还有很多其他代码,比如dubbo-demo、dubbo-config等。

2、编译dubbo-admin
进入dubbo-admin目录,打开命令行,执行:

1
mvn package -Dmaven.skip.test=true

即可在当前目录下生成target文件夹,文件夹中的war包就是我们需要的文件。

3、部署dubbo-admin
把war包放到tomcat的webapps目录下,重命名为dubbo-admin.war。

4、启动tomcat
进入tomcat的bin目录,然后双击startup.bat。

5、测试访问
tomcat会自动解压war包,这时访问 http://localhost:8080/dubbo-admin ,即可看到部署后的效果。

6、用户名密码
页面提示输入用户名密码,默认用户名密码都是root。
用户名密码配置路径:tomcat/webapps/dubbo-admin/WEB-INF/dubbo.properties

5. dubbo-demo

在上面下载的源码中,包含dubbo-demo。

1、打开dubbo文件夹,构建源码,生成IDEA支持的项目文件

1
2
mvn clean install -Dmaven.test.skip
mvn idea:idea

编译时,报错:
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project dubbo-demo-provider: Compilation failure -> [Help 1]

改maven配置,失败。更换maven版本,失败。怒删C:\Users\voidking\.m2\repository中的所有文件,成功。

2、IDEA打开生成的dubbo-parent.ipr文件,就可以看到整个dubbo的工程了。

3、运行Provider.java
报错:
Error:Maven Resources Compiler: Maven project configuration required for module ‘hessian-lite’ isn’t available. Compilation of Maven projects is supported only if external build is started from an IDE.

打开窗口右侧Maven Project,点击加号选择dubbo根目录下的pom.xml,再次运行Provider.java。

如果没有报错,则说明Provider.java运行成功,它会保持在运行状态。

4、运行Consumer.java
运行成功的话,可以看到Consumer控制台打印出 Hello world, response form provider: 169.254.36.242:20880,同时,Provider控制台打印出Hello world, request from consumer: /169.254.36.242:54924

5、打开dubbo-admin,却看不到提供者。这是因为我们在运行Provider的时候,并没有指定Zookeeper作为注册中心。

6、修改dubbo-demo-provider.xml和dubbo-demo-consumer.xml中的registry。

1
2
3
<!-- 使用multicast广播注册中心暴露服务地址 -->
<!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
<dubbo:registry address="zookeeper://localhost:2181"/>

7、重新运行Provider.java,即可看到提供者。
重新运行Consumer.java,却看不到消费者,这是因为消费者消费后把socket关闭了。修改Consumer.java,添加System.in.read();并且抛出异常,重新运行即可在dubbo-admin中看到消费者。

6. 小结

至此,dubbo的最简单demo运行成功。
dubbo支持多种协议,通过协议,可以实现不同语言间的相互调用。接下来,需要研究python调用dubbo服务。待续。。。

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-dubbo-start/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~