分布式系统消息中间件——RabbitMQ的使用进阶篇 (4)

客户端实现代码如下:

ConnectionFactory factory = new ConnectionFactory(); factory.UserName = "admin"; factory.Password = "admin"; factory.HostName = "192.168.121.205"; IConnection conn = factory.CreateConnection(); IModel channel = conn.CreateModel(); SimpleRpcClient client = new SimpleRpcClient(channel, "RpcQueue"); var message = Encoding.UTF8.GetBytes("TestMsg8"); var result = client.Call(message); //do somethings...

以上是Rabbit客户端自己帮我们封装好的Rpc客户端与服务端的逻辑。当然我们也可以自己实现,主要是借助于BasicProperties的两个参数。

ReplyTo: 通常用来设置一个回调队列。

CorrelationId : 用来关联请求(request) 和其调用RPC 之后的回复(response) 。

其处理流程如下:

RabbitMQ Rpc

当客户端启动时,创建一个匿名的回调队列。

客户端为RPC 请求设置2个属性: ReplyTo用来告知RPC 服务端回复请求时的目的队列,即回调队列; Correlationld 用来标记一个请求。

请求被发送到RpcQueue队列中。

RPC 服务端监听RpcQueue队列中的请求,当请求到来时,服务端会处理并且把带有结果的消息发送给客户端。接收的队列就是ReplyTo设定的回调队列。

客户端监昕回调队列,当有消息时,检查Correlationld 属性,如果与请求匹配,那就是结果了。

结束语

    本篇文章简单介绍了RabbitMQ在我们项目开发中常用的几种特性。这些特性可以帮助我们更好的将Rabbit用于我们不同的业务场景中。这些特性与示例,可以自己在程序中运行一下,然后通过查看Rabbit提供的web管理界面来验证其正确性(关于web管理界面不多介绍,相信大家稍微研究研究就能明白)。当然,关于Rabbit的使用,仍有许多地方在本文中没有提及,如:RabbitMQ的特色——确认机制、持久化......将在下一篇文章中再详细介绍。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjxjy.html