【问题标题】:Switching from Msmq to RabbitMQ on MassTransit 2.10在 MassTransit 2.10 上从 Msmq 切换到 RabbitMQ
【发布时间】:2020-02-19 17:22:43
【问题描述】:

我正在将旧应用程序从 Msmq 移动到 RabbitMQ。该应用程序使用 MassTransit 2.10,我需要一个函数来返回特定消息类型的队列中的消息数。

在当前的实现中,有这行代码返回消息类型:

var messages = MsmqEndpointManagement.New(endpoint.Address).MessageTypes();

是否可以在使用 RabbitMQ 时将这条指令替换为类似的指令?

【问题讨论】:

    标签: rabbitmq message-queue masstransit


    【解决方案1】:

    迁移到 RabbitMQ 时,队列的管理方式有所不同。由于它是一个代理(与 MSMQ 相比,这是一个不同的),它被设计为具有单独的管理 API 和控制台。还有其他库可用于获取消息计数,但没有一个库可以为您获取消息类型(因为它需要读取每条消息才能找到类型 - 这就是上面的 MSMQ 方法正在做的事情,顺便说一句)。

    我建议查看 HareDu 以从应用程序/API 管理您的代理。

    【讨论】:

      【解决方案2】:

      使用 HareDu 2 Broker 和 Autofac API,您可以执行以下操作:

      var result = _container.Resolve<IBrokerObjectFactory>()
                      .Object<Queue>()
                      .GetAll()
                      .Select(x => x.Data)
                      .Select(x => new
                      {
                          QueueName = x.Name, x.TotalMessages
                      });
      

      【讨论】:

        【解决方案3】:

        我已经通过 EasyNetQ 使用以下函数解决了这个问题:

           public static int GetMessageCount(string queueName)
           {
               IQueue queue;
               IBus bus = getBusFromName(queueName);
        
               if (queues.TryGetValue(queueName, out queue))
                   return (int)bus.Advanced.MessageCount(queue);
        
               return 0;
           }
        

        getBusFromName() 是一个从字典中检索队列的 IBus 实例的函数,我在字典中存储了软件使用的所有队列。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-26
          • 2011-05-20
          • 2023-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-23
          • 1970-01-01
          相关资源
          最近更新 更多