我正在尝试使用 RabbitMQ (EasyNetQ) 将两个应用程序连接在一起。我正在使用发送/接收模式。因此应用程序(A)将向应用程序(B)发送命令,应用程序(B)将在处理后发送结果。
但只有 50% 的消息始终传递到应用程序 (B)。这是我的 RabbitMQ 面板图。正如您所看到的,只有具有已交付图表(浅蓝色)的消息可以在应用程序(B)中处理,其他的只是被消耗。
我是否应该更改消息或应用程序连接上的任何配置以确保所有消息均被传送?
我在没有任何消费者的情况下测试我的发送者,并且所有消息都在我的 RabbitMQ 中接收,但当我运行我的消费者时,我的所有消息都从队列中删除,而我的消费者服务中没有任何进程,这可能很有用。
更新:
于是,我又找到了线索。在
EasyNetQ_Default_Error_Queue
内,每条失败的消息都有一个错误:
未找到消息类型 TestCommand 的处理程序 在 EasyNetQ.Consumer.HandlerCollection.GetHandler
看起来我的处理程序将被删除
最后我发现了问题所在。因此,它同时在单个类型上注册请求处理程序和接收器函数。喜欢:
bus.RPC.ResponseAsync<TCommand, TResult>(someHandler);
bus.SendReceive.ReceiveAsync(queueName, registration =>
{
registration.Add<TCommand>(async (message, token) =>
{
await handler(message, token);
});
});