http://blog.csdn.net/zhu_tianwei/article/details/40920985

spring-rabbitmq中实现远程接口调用,主要在com.rabbitmq.spring.remoting下几个类:
发布服务端(Server):RabbitInvokerServiceExporter.java
接口调用客户端(Client):RabbitInvokerProxyFactoryBean.java,RabbitInvokerClientInterceptor.java,
RabbitRpcClient.java(对RpcClient的简单封装,添加了发送消息时的选项:

mandatory--是否强制发送,immediate--是否立即发送,timeoutMs--超时时间)

实例如下创建自动删除非持久队列):

1.测试服务接口TestService.Java

  1. package cn.slimsmart.rabbitmq.spring.rabbitmq.demo.rpc;
  2. /**
  3. * RPC服务接口
  4. * @author ztw-pc
  5. *
  6. */
  7. public interface TestService {
  8. String say(String msg);
  9. }

2.测试服务接口实现TestServiceImpl.java

  1. package cn.slimsmart.rabbitmq.spring.rabbitmq.demo.rpc;
  2. public class TestServiceImpl implements TestService {
  3. public String say(String msg) {
  4. return "hello "+msg;
  5. }
  6. }

3..资源配置application.properties

  1. #============== rabbitmq config ====================
  2. rabbit.hosts=192.168.36.102
  3. rabbit.username=admin
  4. rabbit.password=admin
  5. rabbit.virtualHost=/
  6. rabbit.exchange=spring-queue-async
  7. rabbit.queue=spring-queue-async
  8. rabbit.routingKey=spring-queue-async

4.服务端配置applicationContext-rabbitmq-rpc-server.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
  8. <context:property-placeholder location="classpath:application.properties"/>
  9. <bean id="rabbitConnectionFactory" class="com.rabbitmq.spring.connection.RabbitConnectionFactory">
  10. <property name="connectionFactory">
  11. <bean class="com.rabbitmq.client.ConnectionFactory">
  12. <property name="username" value="${rabbit.username}"/>
  13. <property name="password" value="${rabbit.password}"/>
  14. <property name="virtualHost" value="${rabbit.virtualHost}"/>
  15. </bean>
  16. </property>
  17. <property name="hosts" value="${rabbit.hosts}"/>
  18. </bean>
  19. <bean id="rabbitChannelFactory" class="com.rabbitmq.spring.channel.RabbitChannelFactory">
  20. <property name="connectionFactory" ref="rabbitConnectionFactory"/>
  21. </bean>
  22. <bean id="testServiceImpl" class="cn.slimsmart.rabbitmq.spring.rabbitmq.demo.rpc.TestServiceImpl"/>
  23. <bean id="testServiceExport" class="com.rabbitmq.spring.remoting.RabbitInvokerServiceExporter">
  24. <property name="channelFactory" ref="rabbitChannelFactory"/>
  25. <property name="serviceInterface" value="cn.slimsmart.rabbitmq.spring.rabbitmq.demo.rpc.TestService"/>
  26. <property name="service" ref="testServiceImpl"/>
  27. <property name="exchange" value="${rabbit.exchange}"/>
  28. <!-- 必须大写  -->
  29. <property name="exchangeType" value="TOPIC"/>
  30. <property name="routingKey" value="${rabbit.routingKey}"/>
  31. <property name="queueName" value="${rabbit.queue}"/>
  32. <property name="poolsize" value="5"/>
  33. </bean>
  34. </beans>

5.客服端配置applicationContext-rabbitmq-rpc-client.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
  8. <context:property-placeholder location="classpath:application.properties"/>
  9. <bean id="rabbitConnectionFactory" class="com.rabbitmq.spring.connection.RabbitConnectionFactory">
  10. <property name="connectionFactory">
  11. <bean class="com.rabbitmq.client.ConnectionFactory">
  12. <property name="username" value="${rabbit.username}"/>
  13. <property name="password" value="${rabbit.password}"/>
  14. <property name="virtualHost" value="${rabbit.virtualHost}"/>
  15. </bean>
  16. </property>
  17. <property name="hosts" value="${rabbit.hosts}"/>
  18. </bean>
  19. <bean id="rabbitChannelFactory" class="com.rabbitmq.spring.channel.RabbitChannelFactory">
  20. <property name="connectionFactory" ref="rabbitConnectionFactory"/>
  21. </bean>
  22. <bean id="testService" class="com.rabbitmq.spring.remoting.RabbitInvokerProxyFactoryBean">
  23. <property name="channelFactory" ref="rabbitChannelFactory"/>
  24. <property name="serviceInterface" value="cn.slimsmart.rabbitmq.spring.rabbitmq.demo.rpc.TestService"/>
  25. <property name="exchange" value="${rabbit.exchange}"/>
  26. <!-- 必须大写  -->
  27. <property name="exchangeType" value="TOPIC"/>
  28. <property name="routingKey" value="${rabbit.routingKey}"/>
  29. <!--optional-->
  30. <property name="mandatory" value="true"/>
  31. <property name="immediate" value="false"/>
  32. <property name="timeoutMs" value="3000"/>
  33. <property name="poolSize" value="10"/>
  34. </bean>
  35. </beans>

6.启动服务端代码Server.java

  1. package cn.slimsmart.rabbitmq.spring.rabbitmq.demo.rpc;
  2. import org.springframework.context.support.ClassPathXmlApplicationContext;
  3. public class Server {
  4. public static void main(String[] args) {
  5. new ClassPathXmlApplicationContext("applicationContext-rabbitmq-rpc-server.xml");
  6. }
  7. }

7.客户端调用代码Client.java

  1. package cn.slimsmart.rabbitmq.spring.rabbitmq.demo.rpc;
  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. public class Client {
  5. public static void main(String[] args) {
  6. ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-rabbitmq-rpc-client.xml");
  7. TestService testService = (TestService) context.getBean("testService");
  8. System.out.println(testService.say(" Tom"));
  9. }
  10. }

先启动服务端,再运行客户端调用。

运行结果:hello  Tom

实例代码:http://download.csdn.net/detail/tianwei7518/8135637

RabbitMQ学习之基于spring-rabbitmq的RPC远程调用的更多相关文章

  1. 基于http协议实现RPC远程调用

    今天简单说一下基本Http协议来实现RPC框架~ 基于Http协议实现RPC框架: 优点: 1.简单.实用.开发方便 缺点: 1.性能不是很稳定,在海量数据时,完全顶不住,容易宕机 2.因为不是走的注 ...

  2. 【RabbitMQ学习之二】RabbitMQ四种交换机模式应用

    环境 win7 rabbitmq-server-3.7.17 Erlang 22.1 一.概念1.队列队列用于临时存储消息和转发消息.队列类型有两种,即时队列和延时队列. 即时队列:队列中的消息会被立 ...

  3. RabbitMQ学习笔记五:RabbitMQ之优先级消息队列

    RabbitMQ优先级队列注意点: 1.只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效 2.RabbitMQ3.5以后才支持优先级队列 代码在博客:RabbitMQ学习笔记三:Java ...

  4. 从0到1:全面理解RPC远程调用

    上一篇关于 WSGI 的硬核长文,不知道有多少同学,能够从头看到尾的,不管你们有没有看得很过瘾,反正我是写得很爽,总有一种将一样知识吃透了的错觉. 今天我又给自己挖坑了,打算将 rpc 远程调用的知识 ...

  5. 測试JSON RPC远程调用(JSONclient)

    #include <string> #include <iostream> #include <curl/curl.h> /* 标题:JSonclient Auth ...

  6. 使用Socket&反射&Java流操作进行方法的远程调用(模拟RPC远程调用)

    写在前面 阅读本文首先得具备基本的Socket.反射.Java流操作的基本API使用知识:否则本文你可能看不懂... 服务端的端口监听 进行远程调用,那就必须得有客户端和服务端.服务端负责提供服务,客 ...

  7. Openstack Nova 源码分析 — RPC 远程调用过程

    目录 目录 Nova Project Services Project 的程序入口 setuppy Nova中RPC远程过程调用 nova-compute RPC API的实现 novacompute ...

  8. RabbitMQ学习之基于spring-rabbitmq的消息异步发送

    spring-rabbitmq的源码到http://github.com/momania/spring-rabbitmq下载,并可以下载实例代码.由于我使用的rabbitmq版本是3.0.4,部分代码 ...

  9. RabbitMQ学习系列一安装RabbitMQ服务

    RabbitMQ学习系列一:windows下安装RabbitMQ服务 http://www.80iter.com/blog/1437026462550244 Rabbit MQ 是建立在强大的Erla ...

随机推荐

  1. HTTP 状态码之:301、302 重定向

    转自:http://www.cnblogs.com/5207/p/5908354.html 概念 301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用 ...

  2. 一步一步实现基于GPU的pathtracer(二):求交算法

    不管是哪种全局光照算法,最根本的都要落实到光线与物体的求交.主要分为光线与参数曲面和非参数曲面的求交,典型的参数曲面有球.盒.圆柱等基本体及基本体的组合体,以及一些更为复杂的参数曲面.非参数曲面就是所 ...

  3. ELK之Logstash配置文件详解

    Logstash 是一个开源的数据收集引擎,它具有备实时数据传输能力.它可以统一过滤来自不同源的数据,并按照开发者的制定的规范输出到目的地.它以插件的形式来组织功能,通过配置文件来描述需要插件做什么, ...

  4. MS SQL 迁移数据库文件

    MS SQL 数据库迁移文件,这里说的不是将数据库迁移到另外一台服务器,只是在服务器不同磁盘目录内做迁移.移动数据库文件的情况大致有下面一些: 1: 事先没有规划好,数据库文件或日志文件增长过快,导致 ...

  5. (转载)Html解析工具Jsoup

    jsoup 简介Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从 HTM ...

  6. java反射意义

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...

  7. 使用 F# 列表

    使用 F# 列表 在 C# 中使用 F# 的列表,是全然可能的,可是,我建议不要用,由于,仅仅要再做一点,就会使事情在 C# 看来更加自然.比如,把列表转换成数组非常easy.用List.toArra ...

  8. Linux下的五种I/O模型

    堵塞I/O(blocking I/O) 非堵塞I/O (nonblocking I/O) I/O复用(select 和poll) (I/O multiplexing) 信号驱动I/O (signal ...

  9. 150723培训心得(queue)

    queue(STL中函数,就是指队列) #include <iostream> #include <queue> using namespace std;        //这 ...

  10. js面试题--js的继承

    js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明白的继承机制.而是通过模仿实现的.依据js语言的本身的特性,js实现继承有下面通用的几种方式 1.使用对象冒充实现继承(该种实 ...