我已设置2个服务来接收相同的消息,例如ConsumerA : IConsumer<IMessageA>
和ConsumerB : IConsumer<IMessageA>
。每个服务都设置一个唯一的端点,例如queue_a
和queue_b
并注册其消费者。我在RabbitMQ中看到了一个类型为扇出并且绑定到queue_a
和queue_b
的IMessageA的交换。到现在为止还挺好。
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_error
或queue_b_skipped
中没有消息,后者甚至不存在)。
我已将IReceiveObserver
添加到服务A和B,但没有任何内容触发ReceiveFault
或ConsumeFault
。
服务A中的消费者基本上在做:
var result = await MethodThatReturnsIMessageAResponse(messageA);
context.Respond(result);
为什么服务A会干扰向服务B发送消息?我在哪里开始寻找?
答案 0 :(得分:0)
问题在于我是&#34;发布&#34;消息使用:
webView:didFinishNavigation:
需要特定的enpoint(例如队列名称)。相反,我需要使用contentSize
:
c.Resolve<IBus>().CreateRequestClient<IToDoMessage, IToDoMessageResponse>(new Uri(QueueAddress + QueueName),TimeSpan.FromSeconds(5));
使用总线发布,并通过交换,而不是特定的队列。 GitHub sample project显示前者......
并没有帮助