A-A+
zbus实现RPC
之前有一篇文章介绍了如何使用ActiveMQ实现RPC,其实使用zbus实现RPC大同小异,因为它们对于业务代码都是无侵入式的,所以区别只在于引用的Jar包和配置文件的不同。
1. 公共包
公共的实体类:
- public class User implements Serializable {
- private String id;
- private String userName;
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- }
接口服务:
- public interface ITestService {
- public String getTestString();
- public User getFirstUser();
- public User getUser(String id);
- }
2. 服务端
Maven配置文件:
- <!--zubs start-->
- <dependency>
- <groupId>org.zbus</groupId>
- <artifactId>zbus</artifactId>
- <version>7.2.0</version>
- </dependency>
- <!--zubs end-->
Spring配置文件:
- <!-- 向 Spring 容器注册注解 -->
- <context:component-scan base-package="com.xnck.test.zbus.rpcserver"/>
- <!-- 暴露的的接口实现示例 -->
- <bean id="testRpcService" class="com.xnck.test.zbus.rpcserver.rpcservice.impl.TestRpcService"></bean>
- <bean id="serviceProcessor" class="org.zbus.rpc.RpcProcessor">
- <constructor-arg>
- <list>
- <!-- 放入你需要的暴露的的接口 -->
- <ref bean="testRpcService"/>
- </list>
- </constructor-arg>
- </bean>
- <bean id="broker" class="org.zbus.broker.SingleBroker">
- <constructor-arg>
- <bean class="org.zbus.broker.BrokerConfig">
- <property name="brokerAddress" value="127.0.0.1:15555" />
- <property name="maxTotal" value="20"/>
- <!-- 这里可以增加连接池参数配置,不配置使用默认值(参考commons-pool2) -->
- </bean>
- </constructor-arg>
- </bean>
- <!-- 默认调用了start方法,由Spring容器直接带起来注册到zbus总线上 -->
- <bean id="myrpcService" class="org.zbus.rpc.mq.Service" init-method="start">
- <constructor-arg>
- <bean class="org.zbus.rpc.mq.ServiceConfig">
- <!-- 支持多总线注册 -->
- <constructor-arg>
- <list>
- <ref bean="broker"/>
- </list>
- </constructor-arg>
- <property name="mq" value="testRpc"/>
- <property name="consumerCount" value="1"/>
- <property name="messageProcessor" ref="serviceProcessor"/>
- <property name="registerToken" value="123456"/>
- <property name="accessToken" value="111111"/>
- <property name="verbose" value="true" />
- </bean>
- </constructor-arg>
- </bean>
实现接口服务:
- public class TestRpcService implements ITestRpcService{
- @Autowired
- public ITestService testService;
- public String test() {
- String msg = testService.getTestString();
- return msg;
- }
- public User firstUser(){
- User user = testService.getFirstUser();
- return user;
- }
- public User getUser(String id){
- User user = testService.getUser(id);
- return user;
- }
- }
启动服务端:
- public static void main(String[] args) {
- ApplicationContext context = new ClassPathXmlApplicationContext("file:" + PathUtil.getRootPath() + "spring-common.xml");
- }
3. 客户端
Maven配置文件:
- <!--zubs start-->
- <dependency>
- <groupId>org.zbus</groupId>
- <artifactId>zbus</artifactId>
- <version>7.2.0</version>
- </dependency>
- <!--zubs end-->
Spring配置文件:
- <!--rpc start-->
- <bean id="broker" class="org.zbus.broker.SingleBroker">
- <constructor-arg>
- <bean class="org.zbus.broker.BrokerConfig">
- <property name="brokerAddress" value="127.0.0.1:15555" />
- </bean>
- </constructor-arg>
- </bean>
- <bean id="myrpc" class="org.zbus.rpc.RpcFactory">
- <constructor-arg>
- <bean class="org.zbus.rpc.mq.MqInvoker">
- <constructor-arg ref="broker"/>
- <constructor-arg value="testRpc"/>
- <constructor-arg value="111111"/>
- </bean>
- </constructor-arg>
- </bean>
- <bean id="testRpcService" factory-bean="myrpc" factory-method="getService">
- <constructor-arg type="java.lang.Class" value="com.xnck.test.zbus.rpcclient.rpcservice.ITestRpcService"/>
- </bean>
- <!--rpc end-->
调用RPC服务:
- @Service
- public class TestService implements ITestService{
- @Resource(name = "testRpcService")
- public ITestRpcService testRpcService;
- public String getTest() {
- String msg = testRpcService.test();
- return msg;
- }
- public User getUser(String id){
- User user = testRpcService.getUser(id);
- return user;
- }
- }