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
- 有一种机制可以将消息发送到 一个你应该使用的特定收件人 - 你这样做通过
- 将消息类型映射到端点
- "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 会将消息发送给消息的自然所有者。
我希望这对你有用:)
我的系统有一个发布者和多个订阅者。但是有些消息应该只由单个订阅者处理。在我的例子中,发布者发送有关更改数据库中数据的消息,所有订阅者都可以访问同一个数据库,但我不需要他们都更改相同的数据。 这如何使用 rebus 来完成?
PS。忘了说了。我不能只用一个订阅者订阅消息,因为订阅者可以一直online/offline。
But some messages should be processed only by single subscriber
那么你不应该为那个特定的消息类型使用 bus.Publish
- 有一种机制可以将消息发送到 一个你应该使用的特定收件人 - 你这样做通过
- 将消息类型映射到端点
- "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 会将消息发送给消息的自然所有者。
我希望这对你有用:)