java 实现spring+RabbitMQ RPC 集成
1、使用开发工具Eclipse 创建RPC客户端项目。组织结构如下图:

2、接口声明:RpcSpringTest .javapackagecom.cn.trap.test;publicinterfaceRpcSpringTest{publicvoidsayHi(Stringname);}
3、客户端配置文件:applicationContext.xml<?垓矗梅吒xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:task="http://www.springframework.org/schema/task"xmlns:rabbit="http://www.springframework.org/schema/rabbit"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/integration/iphttp://www.springframework.org/schema/integration/ip/spring-integration-ip-2.0.xsdhttp://www.springframework.org/schema/integrationhttp://www.springframework.org/schema/integration/spring-integration.xsdhttp://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.0.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit-1.3.xsd"><!--连接服务配置--><rabbit:connection-factoryid="connectionFactory"addresses="${rabbitmq.server.address}"username="${rabbitmq.username}"password="${rabbitmq.password}"/><!--rabbitmqadminusedtomanageexchanges,queuesandbindings--><rabbit:adminconnection-factory="connectionFactory"/> <!--RPC客户端配置--><!--发送请求的template--><rabbit:templateid="rpcTemplate"connection-factory="connectionFactory"queue="queue.rpc.dp"exchange="dp-mq-exchange"reply-timeout="30000"/><!--RPC service--><beanclass="org.springframework.amqp.remoting.client.AmqpProxyFactoryBean"p:serviceInterface="com.gloryscience.inms.trap.test.RpcSpringTest"p:routingKey="queue.rpc.dp"><propertyname="amqpTemplate"ref="rpcTemplate"/></bean></beans>
4、客户端启动类测试类:packagecom.cn.trap.main;importorg.springframework.co荏鱿胫协ntext.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importcom.cn.trap.test.RpcSpringTest;publicclassApplication{privatestaticvolatileApplicationContextctx;publicstaticvoidmain(String[]args){ctx=newClassPathXmlApplicationContext("applicationContext.xml"); System.out.println("服务已启动---"); RpcSpringTestservice=ctx.getBean(RpcSpringTest.class);service.sayHi("name");}}
5、使用开发工具创建RPC服务端项目,项目截图如下:

6、服务端RPC接口声明和实现类:RpcSpringTest.javapackagecom.cn.trap.test.rpc;publicinterfaceRpcSpringTest{publicvoidsayHi(Stringname);}RpcSpringTestImpl.javapackagecom.cn.trap.test.rpc;publicclassRpcSpringTestImplimplementsRpcSpringTest{@OverridepublicvoidsayHi(Stringname){System.out.println("请求收到---"+name);}}
7、服务端项目spring配置:applicationConte垓矗梅吒xt.xml<?xmlversion="1.0"encodi荏鱿胫协ng="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:task="http://www.springframework.org/schema/task"xmlns:rabbit="http://www.springframework.org/schema/rabbit"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/integration/iphttp://www.springframework.org/schema/integration/ip/spring-integration-ip-2.0.xsdhttp://www.springframework.org/schema/integrationhttp://www.springframework.org/schema/integration/spring-integration.xsdhttp://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.0.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit-1.3.xsd"><!--connection--><rabbit:connection-factoryid="rabbitConnectionFactory"addresses="${rabbitmq.server.address}"username="${rabbitmq.username}"password="${rabbitmq.password}"/><!--rabbitmqadminusedtomanageexchanges,queuesandbindings.--><rabbit:adminconnection-factory="rabbitConnectionFactory"/><rabbit:direct-exchangename="dp-mq-exchange"><rabbit:bindings><rabbit:bindingqueue="queue.rpc.dp"key="queue.rpc.dp"></rabbit:binding></rabbit:bindings></rabbit:direct-exchange><rabbit:queuename="queue.rpc.dp"></rabbit:queue><!--返回结果的template--><rabbit:templateid="amqpTemplateInternetProxy"connection-factory="rabbitConnectionFactory"></rabbit:template><!--服务监听--><rabbit:listener-containeracknowledge="none"max-concurrency="128"prefetch="10"><rabbit:listenerref="service"queue-names="queue.rpc.dp"/></rabbit:listener-container><!--服务实现--><beanid="serviceImpl"class="com.gloryscience.inms.trap.test.rpc.RpcSpringTestImpl"></bean><!--服务发布--><beanid="service"class="org.springframework.amqp.remoting.service.AmqpInvokerServiceExporter"><propertyname="serviceInterface"value="com.gloryscience.inms.trap.test.rpc.RpcSpringTest"/><propertyname="service"ref="serviceImpl"/><propertyname="amqpTemplate"ref="amqpTemplateInternetProxy"/></bean></beans>
8、服务端服务启动类:publicclassApplication{privatestaticvolatileApplicationContextctx;publicstaticvoidmain(String[]args){ctx=newClassPathXmlApplicationContext("applicationContext.xml"); }}