一、话题
主题是一种发布/分发机制,每个订阅(订阅者)将发送一次消息。
主题订阅类似于接收发送到主题的消息副本的虚拟队列。从订阅接收消息的方式与从队列接收消息的方式相同......
订阅支持本节前面描述的关于队列的相同模式:竞争消费者、时间解耦、负载均衡和负载平衡。
来源:MSDN 文章
您需要在竞争消费者(服务实例)之间重用主题订阅来实现您的场景。
Publisher #1 ═══╗ ╔═══ Subscription 1 ═══╦═══ Service 1-instance 1
║ ║ ╚═══ Service 1-instance 2
╠═══ Topic ═══╣
║ ║ ╔═══ Service 2-instance 1
Publisher #2 ═══╝ ╚═══ Subscription 2 ═══╩═══ Service 2-instance 2
A. 创建主题订阅
string connectionString = "<Secret>"
var namespaceManager =
NamespaceManager.CreateFromConnectionString(connectionString);
if (!namespaceManager.SubscriptionExists("TestTopic", "Inventory"))
{
namespaceManager.CreateSubscription("TestTopic", "Inventory");
}
B. 收听现有订阅
MessagingFactory factory = MessagingFactory.Create(uri, tokenProvider);
MessageReceiver receiver = factory.CreateMessageReceiver("TestTopic/subscriptions/Inventory");
2. 队列
使用多个Queues
也可以适合您的特定场景。每个Queue
拥有多个竞争消费者(实例)的消费者只会将消息传递给第一个请求并成功处理它的客户端。
然后设计变为:
Publisher #1 ═══╗ ╔═══ Service 1 Queue ═══╦═══ Subscriber #1 (Service 1)
║ ║ ╚═══ Subscriber #2 (Service 1)
╠═══ASB═══╣
║ ║ ╔═══ Subscriber #3 (Service 2)
Publisher #2 ═══╝ ╚═══ Service 2 Queue ═══╩═══ Subscriber #4 (Service 2)