有没有一个很好的例子(C#)如何在RabbitMQ中进行直接回复?我想要做的是让X Producers发布一条消息(“我为某人做了一些工作”)我希望X消费者中的一个拿起它,完成工作并发回响应。不是基本的Ack,而是一些数据,计算的结果。当然,回应必须回到正确的制作人。
制片:
#+name: foo
#+begin_src cpp -n :includes <iostream> :exports both
std::cout << "Hello there";
#+end_src
Output:
#+RESULTS: foo
: Hello there
消费者:
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "hello",
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);
string message = "Hello World!";
var body = Encoding.UTF8.GetBytes(message);
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
channel.BasicPublish(exchange: "",
routingKey: "hello",
basicProperties: properties,
body: body);
Console.WriteLine(" [x] Sent {0}", message);
}
}
关于如何设置双方的最小文档并不是很清楚。我知道有人必须对“amq.rabbitmq.reply-to”队列做些什么,但不清楚哪一方面以及它们与它有什么关系。
答案 0 :(得分:4)
您是否在rabbitmq网站上看过这些教程? http://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html
您可以像上面的RPC示例一样设置代码,只有一些细微差别(在您引用的文档中注明:https://www.rabbitmq.com/direct-reply-to.html)。
从原始邮件制作者发布邮件时,请设置&#34; replyTo&#34;到amq.rabbitmq.reply-to
原始邮件生成者也是消息使用者,从amq.rabbitmq.reply-to
队列
当处理原始请求的代码完成处理时,您将通过默认(空,无名,&#34;&#34;)交换从该工作人员发布消息,路由密钥也是设置为amq.rabbitmq.reply-to
所以:
amq.rabbitmq.reply-to
queue amq.rabbitmq.reply-to
属性为replyTo
amq.rabbitmq.reply-to
作为路由密钥应该是关于它的