您的位置:首页 > 编程语言 > Java开发

rabbitmq RPC java实现

2016-08-26 11:20 369 查看
使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rabbitmq