Rebus 订阅者-发布者系统。仅由单个订阅者处理消息

Rebus subscriber-publisher system. Process message only by single subscriber

我的系统有一个发布者和多个订阅者。但是有些消息应该只由单个订阅者处理。在我的例子中,发布者发送有关更改数据库中数据的消息,所有订阅者都可以访问同一个数据库,但我不需要他们都更改相同的数据。 这如何使用 rebus 来完成?

PS。忘了说了。我不能只用一个订阅者订阅消息,因为订阅者可以一直online/offline。

But some messages should be processed only by single subscriber

那么你不应该为那个特定的消息类型使用 bus.Publish - 有一种机制可以将消息发送到 一个你应该使用的特定收件人 - 你这样做通过

  1. 将消息类型映射到端点
  2. "sending" 消息而不是 "publishing" 它

你这样做 (1) 是这样的:

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

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

你这样做(2)是这样的:

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

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

我希望这对你有用:)