客户端实现代码如下:
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) 。
其处理流程如下:
当客户端启动时,创建一个匿名的回调队列。
客户端为RPC 请求设置2个属性: ReplyTo用来告知RPC 服务端回复请求时的目的队列,即回调队列; Correlationld 用来标记一个请求。
请求被发送到RpcQueue队列中。
RPC 服务端监听RpcQueue队列中的请求,当请求到来时,服务端会处理并且把带有结果的消息发送给客户端。接收的队列就是ReplyTo设定的回调队列。
客户端监昕回调队列,当有消息时,检查Correlationld 属性,如果与请求匹配,那就是结果了。
结束语本篇文章简单介绍了RabbitMQ在我们项目开发中常用的几种特性。这些特性可以帮助我们更好的将Rabbit用于我们不同的业务场景中。这些特性与示例,可以自己在程序中运行一下,然后通过查看Rabbit提供的web管理界面来验证其正确性(关于web管理界面不多介绍,相信大家稍微研究研究就能明白)。当然,关于Rabbit的使用,仍有许多地方在本文中没有提及,如:RabbitMQ的特色——确认机制、持久化......将在下一篇文章中再详细介绍。