rabbitmq RPC java实现

来源:互联网 发布:网络销售的技巧 编辑:程序博客网 时间:2024/04/29 08:46
使用RabbitMQ来构建一个RPC系统:包含一个客户端和一个RPC服务器。


操作过程
首先定义一个队列名称,如:rpc_queue,服务器声明时队列,客户端发送消息时发送到这个队列,服务器就可以接收到消息。
当服务器接收到消息,处理完成后要把处理结果告知客户端,这个就需要有一个“回调队列”,客户端需要在发送请求的时候同时发送一个回调队列(callback queue)的地址(队列名称),服务器把处理结果发送到“回调队列”客户端就可以收到消息。
当“回调队列”接收到一个响应的时候它无法辨别出这个响应是属于哪个请求的。correlation_id 就是为了解决这个问题而来的。我们给每个请求设置一个独一无二的值。稍后,当我们从回调队列中接收到一个消息的时候,我们就可以查看这条属性从而将响应和请求匹配起来。如果我们接手到的消息的correlation_id是未知的,那就直接销毁掉它,因为它不属于我们的任何一条请求。


消息属性
AMQP协议给消息预定义了一系列的14个属性。大多数属性很少会用到,除了以下几个:
delivery_mode(投递模式):将消息标记为持久的(值为2)或暂存的(除了2之外的其他任何值)。
content_type(内容类型):用来描述编码的mime-type。例如在实际使用中常常使用application/json来描述JOSN编码类型。
reply_to(回复目标):通常用来命名回调队列。
correlation_id(关联标识):用来将RPC的响应和请求关联起来。




RPC如此工作
1、当客户端启动的时候,它创建一个匿名独享的回调队列。
2、在RPC请求中,客户端发送带有两个属性的消息:一个是设置回调队列的 reply_to 属性,另一个是设置唯一值的 correlation_id 属性。将请求发送到一个 rpc_queue 队列中。
3、RPC工作者(又名:服务器)等待请求发送到这个队列中来。当请求出现的时候,它执行他的工作并且将带有执行结果的消息发送给reply_to字段指定的队列。
4、客户端等待回调队列里的数据。当有消息出现的时候,它会检查correlation_id属性。如果此属性的值与请求匹配,将它返回给应用。

rabbitmq 官网:http://www.rabbitmq.com/tutorials/tutorial-six-java.html

rabbimq中文:http://rabbitmq.mr-ping.com/tutorials_with_python/[6]RPC.html

code: http://download.csdn.net/detail/convict_eva/9613560
0 0
原创粉丝点击