MassTransit:多个消费者,单独的队列/端点,未传递的消息

时间:2017-02-27 21:32:30

标签: rabbitmq masstransit

我已设置2个服务来接收相同的消息,例如ConsumerA : IConsumer<IMessageA>ConsumerB : IConsumer<IMessageA>。每个服务都设置一个唯一的端点,例如queue_aqueue_b并注册其消费者。我在RabbitMQ中看到了一个类型为扇出并且绑定到queue_aqueue_b的IMessageA的交换。到现在为止还挺好。

  • 我运行这两个服务并发布消息,但只有服务A才能获得它。
  • 我停止服务A并在RabbitMQ中手动向B发布消息(服务A是一个发布IMessageA以响应使用IRequestClient<IMessageA, IMessageAResponse>的POST的Web服务,我为什么需要手动发布)现在服务B获取消息并按预期消耗它。

要明确的是,在服务A停止的情况下,RabbitMQ会将消息路由到queue_a queue_b。如果服务A正在运行,则消息会转到queue_b,尽管现有交换绑定显示queue_b已绑定到IMessageA交换并且绝对应该得到它们。或者至少在我能够通过管理Web UI检查RabbitMQ时,没有证据表明曾向queue_b发送消息(即queue_b_errorqueue_b_skipped中没有消息,后者甚至不存在)。

我已将IReceiveObserver添加到服务A和B,但没有任何内容触发ReceiveFaultConsumeFault

服务A中的消费者基本上在做:

var result = await MethodThatReturnsIMessageAResponse(messageA);
context.Respond(result);

为什么服务A会干扰向服务B发送消息?我在哪里开始寻找?

1 个答案:

答案 0 :(得分:0)

问题在于我是&#34;发布&#34;消息使用:

webView:didFinishNavigation:

需要特定的enpoint(例如队列名称)。相反,我需要使用contentSize

c.Resolve<IBus>().CreateRequestClient<IToDoMessage, IToDoMessageResponse>(new Uri(QueueAddress + QueueName),TimeSpan.FromSeconds(5));

使用总线发布,并通过交换,而不是特定的队列。 GitHub sample project显示前者......

并没有帮助