A-A+

zbus实现RPC

2017年04月18日 技术 暂无评论 阅读 4,604 次

之前有一篇文章介绍了如何使用ActiveMQ实现RPC,其实使用zbus实现RPC大同小异,因为它们对于业务代码都是无侵入式的,所以区别只在于引用的Jar包和配置文件的不同。

1. 公共包

公共的实体类:

  1. public class User  implements Serializable {
  2.     private String id;
  3.     private String userName;
  4.     public String getUserName() {
  5.         return userName;
  6.     }
  7.     public void setUserName(String userName) {
  8.         this.userName = userName;
  9.     }
  10.     public String getId() {
  11.         return id;
  12.     }
  13.     public void setId(String id) {
  14.         this.id = id;
  15.     }
  16. }

接口服务:

  1. public interface ITestService {
  2.     public String getTestString();
  3.     public User getFirstUser();
  4.     public User getUser(String id);
  5. }

2. 服务端

Maven配置文件:

  1. <!--zubs start-->
  2. <dependency>
  3.     <groupId>org.zbus</groupId>
  4.     <artifactId>zbus</artifactId>
  5.     <version>7.2.0</version>
  6. </dependency>
  7. <!--zubs end-->

Spring配置文件:

  1. <!-- 向 Spring 容器注册注解 -->
  2. <context:component-scan base-package="com.xnck.test.zbus.rpcserver"/>
  3. <!-- 暴露的的接口实现示例 -->
  4. <bean id="testRpcService" class="com.xnck.test.zbus.rpcserver.rpcservice.impl.TestRpcService"></bean>
  5. <bean id="serviceProcessor" class="org.zbus.rpc.RpcProcessor">
  6.     <constructor-arg>
  7.         <list>
  8.             <!-- 放入你需要的暴露的的接口 -->
  9.             <ref bean="testRpcService"/>
  10.         </list>
  11.     </constructor-arg>
  12. </bean>
  13. <bean id="broker" class="org.zbus.broker.SingleBroker">
  14.     <constructor-arg>
  15.         <bean class="org.zbus.broker.BrokerConfig">
  16.             <property name="brokerAddress" value="127.0.0.1:15555" />
  17.             <property name="maxTotal" value="20"/>
  18.             <!-- 这里可以增加连接池参数配置,不配置使用默认值(参考commons-pool2) -->
  19.         </bean>
  20.     </constructor-arg>
  21. </bean>
  22. <!-- 默认调用了start方法,由Spring容器直接带起来注册到zbus总线上 -->
  23. <bean id="myrpcService" class="org.zbus.rpc.mq.Service"  init-method="start">
  24.     <constructor-arg>
  25.         <bean class="org.zbus.rpc.mq.ServiceConfig">
  26.             <!-- 支持多总线注册 -->
  27.             <constructor-arg>
  28.                 <list>
  29.                     <ref bean="broker"/>
  30.                 </list>
  31.             </constructor-arg>
  32.             <property name="mq" value="testRpc"/>
  33.             <property name="consumerCount" value="1"/>
  34.             <property name="messageProcessor" ref="serviceProcessor"/>
  35.             <property name="registerToken" value="123456"/>
  36.             <property name="accessToken" value="111111"/>
  37.             <property name="verbose" value="true" />
  38.         </bean>
  39.     </constructor-arg>
  40. </bean>

实现接口服务:

  1. public class TestRpcService implements ITestRpcService{
  2.     @Autowired
  3.     public ITestService testService;
  4.     public String test() {
  5.         String msg = testService.getTestString();
  6.         return msg;
  7.     }
  8.     public User firstUser(){
  9.         User user = testService.getFirstUser();
  10.         return user;
  11.     }
  12.     public User getUser(String id){
  13.         User user = testService.getUser(id);
  14.         return user;
  15.     }
  16. }

启动服务端:

  1. public static void main(String[] args) {
  2.         ApplicationContext context = new ClassPathXmlApplicationContext("file:" + PathUtil.getRootPath() + "spring-common.xml");
  3.     }

3. 客户端

Maven配置文件:

  1. <!--zubs start-->
  2. <dependency>
  3.   <groupId>org.zbus</groupId>
  4.   <artifactId>zbus</artifactId>
  5.   <version>7.2.0</version>
  6. </dependency>
  7. <!--zubs end-->

Spring配置文件:

  1. <!--rpc start-->
  2. <bean id="broker" class="org.zbus.broker.SingleBroker">
  3.     <constructor-arg>
  4.         <bean class="org.zbus.broker.BrokerConfig">
  5.             <property name="brokerAddress" value="127.0.0.1:15555" />
  6.         </bean>
  7.     </constructor-arg>
  8. </bean>
  9. <bean id="myrpc" class="org.zbus.rpc.RpcFactory">
  10.     <constructor-arg>
  11.         <bean class="org.zbus.rpc.mq.MqInvoker">
  12.             <constructor-arg ref="broker"/>
  13.             <constructor-arg value="testRpc"/>
  14.             <constructor-arg value="111111"/>
  15.         </bean>
  16.     </constructor-arg>
  17. </bean>
  18. <bean id="testRpcService" factory-bean="myrpc" factory-method="getService">
  19.     <constructor-arg type="java.lang.Class" value="com.xnck.test.zbus.rpcclient.rpcservice.ITestRpcService"/>
  20. </bean>
  21. <!--rpc end-->

调用RPC服务:

  1. @Service
  2. public class TestService implements ITestService{
  3.     @Resource(name = "testRpcService")
  4.     public ITestRpcService testRpcService;
  5.     public String getTest() {
  6.         String msg = testRpcService.test();
  7.         return msg;
  8.     }
  9.     public User getUser(String id){
  10.         User user = testRpcService.getUser(id);
  11.         return user;
  12.     }
  13. }
标签:

给我留言

Copyright © 字痕随行 保留所有权利.   Theme  Ality 京ICP备14039894号

用户登录

分享到: