【问题标题】:NServiceBus: Requirement for a Process to Publish to more than 1 QueueNServiceBus:一个进程发布到多个队列的要求
【发布时间】:2011-08-11 17:37:46
【问题描述】:

我们有一个进程已经使用 NServiceBus 将消息发布到我们系统中运行的其他进程。我想向这个进程添加额外的功能,这将要求它向其他进程发布消息,但我希望能够使用新类型的消息写入另一个队列。最好不要在同一个队列中混合消息,因为它们具有不同的优先级。我所看到的一切都表明 NServiceBus 仅支持每个进程一个队列。这是正确的吗?

如果是这样,那么任何人都可以提出一个好的解决方法吗?我能想到的唯一方法是将新队列容纳在单独的“NServiceBus Hub”进程中,然后使用 WCF 集成功能将新消息进程间从我的进程中继到集线器以插入新队列。

谢谢。

【问题讨论】:

    标签: nservicebus


    【解决方案1】:

    您对在单个队列中混合高优先级和低优先级消息的担忧是正确的。

    这需要在发送方和接收方都解决。

    发件人不会在本地写入它自己的单个队列。相反,当它向收件人发送消息时,发件人会写入特定于该收件人的临时本地队列。

    所以你有两个潜在的问题:

    1. 接收器处理来自同一队列的高优先级和低优先级消息。
    2. 发件人同时发送高优先级和低优先级消息。

    如果是这种情况,您可以执行以下一项或两项操作:

    1. 将接收服务分为两种服务,一种用于高优先级处理,另一种用于低优先级处理。
    2. 您可能还希望将高优先级处理分离到它自己的 NServiceBus 发布者服务中。

    这将按优先级为您提供多个端点,它们之间有清晰的分隔。

    【讨论】:

    • 休,感谢您的回复。我试图理解你的建议。对我来说问题不在于接收者(订阅者),因为无论如何这些都是单独的服务。问题在于发送者(发布者)应用程序,它同时生成高优先级和低优先级消息(不能分开)。我可以将发布者队列放在单独的服务中,但是如何在应用程序和发布者服务之间进行通信? WCF?
    • 所以您遇到的问题不是排队,而是您将高优先级和低优先级消息传递到同一个服务中。如果您的订阅者没有订阅这两种消息类型,您唯一的问题是您的发布者将用完 CPU 周期来发布低优先级的内容。发布只是评估订阅并通过 MSMQ 发送。 MSMQ 将确保为每个订阅者创建一个单独的本地队列来传输消息。因此,如果您想优先处理消息,则必须将发布者分成多个服务。
    猜你喜欢
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多