MassTransit注册了相同消息类型的多个消费者

时间:2017-01-20 16:08:25

标签: c# azure masstransit

当您发布消息而不是发送时,我有一个小问题了解MassTransit和Azure正在发生的事情。

基本上我有一个DownloadWebpage的Action和一个WebPageDownloaded的事件。在下载网页的消费者中,我发布了一个WebPageDownloaded事件,我希望该事件的多个订阅者能够使用该通知。

但我无法使用相同的队列名称为该事件注册多个消费者。例如,以下代码在尝试注册WebpageDownloaded事件的第二个使用者时将给出异常。

configurator.ReceiveEndpoint("downloadwebpage", e => e.Consumer<DownloadPageConsumer>());
configurator.ReceiveEndpoint(host, "webpagedownloaded", e => e.Consumer<WebPageDownloadedConsumer>());
configurator.ReceiveEndpoint(host, "webpagedownloaded", e => e.Consumer<WebPageDownloadedConsumer02>());

但是,当我没有指定接收队列名称时,以下内容将起作用。

configurator.ReceiveEndpoint("downloadwebpage", e => e.Consumer<DownloadPageConsumer>());
configurator.ReceiveEndpoint(host, e => e.Consumer<WebPageDownloadedConsumer>());
configurator.ReceiveEndpoint(host, e => e.Consumer<WebPageDownloadedConsumer02>());

然而,消息似乎不会在运行之间持续存在。

更新我发现当公交车停止时,事件消息会移动到死信队列。例如。我启动服务并发送消息,消费时发布消息。事件监听器选择了这一点并且一切正常。 然后我停止服务,我没有注册活动消费者,我发送消息并发布活动。事件正在等待处理(我可以看到它们看起来像Azure中的临时队列)但是一旦我停止总线,它们立即移动到死信队列。我曾经有过这样的服务,他们会在那里坚持服务以便将来接收它们,并在生存时间之后超时,然后转移到一个死信队列。

任何人都知道我哪里出错了,我知道我只是缺少一定程度的理解,但却无法找到我不知道的东西。

1 个答案:

答案 0 :(得分:0)

我在接收端点上找到了我需要的东西,并且还使用了主题样式消息的订阅。