【问题标题】:Rebus subscriber-publisher system. Process message only by single subscriberRebus 订阅者-发布者系统。仅由单个订阅者处理消息
【发布时间】:2016-08-11 11:12:43
【问题描述】:

我有一个发布者多个订阅者的系统。但有些消息只能由单个订阅者处理。在我的情况下,发布者发送有关更改数据库中数据的消息,所有订阅者都可以访问同一个数据库,但我不需要他们都更改相同的数据。 如何使用 rebus 实现这一点?

附言。忘了提。我不能只订阅一个订阅者的消息,因为订阅者可以一直在线/离线。

【问题讨论】:

    标签: message-queue publish-subscribe rebus


    【解决方案1】:

    但有些消息只能由单个订阅者处理

    那么您不应该将bus.Publish 用于该特定消息类型 -​​ 有一种机制可以将消息发送给一个特定的收件人,您应该使用该机制 - 您可以通过

    1. 将消息类型映射到端点
    2. “发送”消息而不是“发布”消息

    你这样做 (1) 像这样:

    Configure.With(...)
        .(...)
        .Routing(r => {
            r.TypeBased()
                .Map<YourMessage>("the_recipient");
        })
        .Start();
    

    因此告诉 Rebus 从队列the_recipient 获取消息的人是YourMessage 类型消息的所有者,并且应该被视为该类型隐式路由消息的自然接收者。

    你这样做 (2) 像这样:

    await bus.Send(new YourMessage(...));
    

    然后 Rebus 会将消息发送给消息的自然所有者。

    我希望这对你有用:)

    【讨论】:

    • 每个“订阅者”都可以使用the_recipient队列名称吗?
    • 我假设您的订阅者不同,并且您希望每个订阅者都收到已发布消息的副本。这意味着每个订阅者必须有自己的输入队列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2016-12-14
    • 1970-01-01
    相关资源
    最近更新 更多