1. Dubbo介绍
代码示例:Github
1.1 RPC
Remote Procedure Call:远程过程调用
1.2 Dubbo架构
Subscribe 订阅;签署;赞成
Monitor 监听器;监控器
1.3 Dubbo在Zookeeper中注册信息的结构
2. Dubbo使用
2.1 创建Common工程
group id:com.joker.dubbo
artifact id:dubbo-common
package:jar
创建实体类
com.joker.dubbo.entity.Employee.java
1 | package com.joker.dubbo.entity; |
创建远程调用的接口
package com.joker.dubbo.service.EmployeeRemoteService.java
1 | package com.joker.dubbo.service; |
2.2 创建Provider工程
group id:com.joker.dubbo
artifact id:dubbo-provider
package:war
依赖于:Common工程,使用其中的实体类和接口
依赖信息
pom.xml
1 | <dependencies> |
配置log4j日志文件
log4j.properties
1 | log4j.rootLogger=DEBUG,myConsole |
配置web.xml
web.xml
1 |
|
Spring配置文件中Dubbo的配置
spring-dubbo.xml
1 |
|
创建远程调用接口的实现类
com.joker.dubbo.service.impl.EmployeeRemoteServiceImpl.java
1 | package com.joker.dubbo.service.impl; |
注册简单测试
运行web项目,启动tomcat服务器,尝试连接Zookeeper,此时要确保服务器Zookeeper已启动
启动成功可以看到控制台日志打印心跳检查信息:
1 | [2019-10-18 02:19:51,355] Artifact dubbo-provider:war exploded: Artifact is deployed successfully |
此时到服务器端启动Zookeeper客户端:
1 | /opt/zookeeper3.4.9/bin/zkCli.sh |
通过ls /dubbo/com.joker.dubbo.service.EmployeeRemoteService/providers
我们看到下面注册的provider,通过Url解码得到内容:
1 | dubbo://192.168.252.1:20880/com.joker.dubbo.service.EmployeeRemoteService?anyhost=true&application=dubbo-provider&dubbo=2.5.5&generic=false&interface=com.joker.dubbo.service.EmployeeRemoteService&methods=getEmployeeByConditionRemote&pid=6364&revision=1.0-SNAPSHOT&side=provider×tamp=1571379571726 |
至此,证明Provider配置成功!
2.3 创建Consumer工程
group id:com.joker.dubbo
artifact id:dubbo-consumer
package:war
依赖信息
pom.xml
1 | <dependencies> |
配置log4j日志配置文件
log4j.properties
1 | log4j.rootLogger=DEBUG,myConsole |
配置web.xml
web.xml
1 |
|
配置SpringMVC
spring-mvc.xml
1 |
|
创建Handler类映射远程接口请求
com.joker.dubbo.handler.EmployeeHandler.java
1 | package com.joker.dubbo.handler; |
创建返回成功页面
success.jsp
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
注册简单测试
运行consumer的web项目,启动一个新的tomcat服务器,并设置不同的端口号;
同provider,启动完成后可以看到控制台日志打印心跳检查信息:
1 | [DEBUG] 2019-10-18 16:21:14,947(31499) --> [RMI TCP Connection(192.168.252.128:2181)] org.apache.zookeeper.ClientCnxn$SendThread.readResponse(ClientCnxn.java:758): Got ping response for sessionid: 0x16ddd844d9a000b after 3ms |
此时到Zookeeper服务端查看服务注册信息:
1 | [zk: localhost:2181(CONNECTED) 21] ls /dubbo/com.joker.dubbo.service.EmployeeRemoteService |
这是可以看到Zookeeper注册中心不仅有providers,还有了新注册的consumers;
这时执行命令:ls /dubbo/com.joker.dubbo.service.EmployeeRemoteService/consumers
可以看到我们注册的consumer信息
1 | 3A%2F%2F192.168.252.1%2Fcom.joker.dubbo.service.EmployeeRemoteService%3Fapplication%3Ddubbo-consumer%26category%3Dconsumers%26check%3Dfalse%26dubbo%3D2.5.5%26interface%3Dcom.joker.dubbo.service.EmployeeRemoteService%26methods%3DgetEmployeeByConditionRemote%26pid%3D13468%26revision%3D1.0-SNAPSHOT%26side%3Dconsumer%26timestamp%3D1571386846115] |
通过URL解码可以看到:
1 | consumer://192.168.252.1/com.joker.dubbo.service.EmployeeRemoteService?application=dubbo-consumer&category=consumers&check=false&dubbo=2.5.5&interface=com.joker.dubbo.service.EmployeeRemoteService&methods=getEmployeeByConditionRemote&pid=13468&revision=1.0-SNAPSHOT&side=consumer×tamp=1571386846115 |
这里显示的是调用接口的消费者信息。
这时打开浏览器输出http://localhost:8081/consumer/get/emp/list
注意:本项目中配置consumer的tomcat端口号为8081
可以看到成功页面返回!
同时看到tomcat运行控制台打印信息:
consumer端:
1 | Employee{empId=111, empName='empName111', salary=111.11} |
provider端
1 | ***provider***:Employee{empId=666, empName='empName666', salary=666.66} |
证明远程方法调用成功,consumer调用了远程方法,并传递给provider一个Employee对象。
provider成功接收,并执行getEmployeeByConditionRemote()方法,返回一个Employee的List。
至此,consumer配置成功!
Dubbo+Zookeeper实现远程调用成功!
代码示例:Github