【问题标题】: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 实例的函数,我在字典中存储了软件使用的所有队列。