RabbitMQ:直接回复?

时间:2016-06-28 22:11:43

标签: c# .net rabbitmq

有没有一个很好的例子(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”队列做些什么,但不清楚哪一方面以及它们与它有什么关系。

1 个答案:

答案 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
  • 工作人员接收消息,工作,通过&#34;&#34;发布回复。交换,使用amq.rabbitmq.reply-to作为路由密钥

应该是关于它的