【问题标题】:EasyNetQ - receiving from existing queueEasyNetQ - 从现有队列接收
【发布时间】:2015-07-31 13:04:06
【问题描述】:

我正在研究使用 EasyNetQ 与 RabbitMQ 交互,想知道它是否可以支持以下情况:

  1. 使用一些任意参数在外部声明队列(例如 x-message-ttl)
  2. 使用 EasyNetQ 的客户端代码从该队列发送和接收消息。

我发现的可能性是:

  • 简单的 IBus API 要求队列具有默认参数
  • 高级 IAdvancedBus API 允许指定声明队列的参数,但不能指定所有参数(例如无法设置 x-max-length)

问题是我可以只使用现有队列和自定义参数而不需要指定它们吗?

【问题讨论】:

    标签: c# .net rabbitmq easynetq


    【解决方案1】:

    如果队列已经存在并且您知道它的名称,您不能使用IAdvancedBus.Consume<T> 方法(不用担心IAdvancedBus.QueueDeclare)吗?

    例如:

    var queueName = "TheNameOfYourExistingQueue";
    var existingQueue = new EasyNetQ.Topology.Queue(queueName, false);
    
    // bus should be an instance of IAdvancedBus
    bus.Consume<TypeOfYourMessage>(existingQueue, 
       (msg, info) => 
          {
             // Implement your handling logic here
          });
    

    请注意,EasyNetQ 可能无法将消息自动反序列化为 TypeOfYourMessage 的实例。如果是这种情况,解决它的一种方法是绕过 EasyNetQ 的消息序列化程序,以便您可以直接访问消息的字节数组。如果您想走这条路,请使用以下重载 Consume

    void Consume(IQueue queue, Func<Byte[], MessageProperties, MessageReceivedInfo, Task> onMessage);
    

    【讨论】:

      猜你喜欢
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 2012-11-16
      • 2016-09-18
      • 2020-03-11
      • 2018-06-11
      相关资源
      最近更新 更多