【发布时间】:2010-12-23 17:33:58
【问题描述】:
我正在使用 NServiceBus,我需要知道有多少客户端订阅了特定的消息类型(最好是订阅者的名称)。我说的是 pub\sub 场景。
是否可以在 NServiceBus 中获取这些信息?
谢谢
【问题讨论】:
-
您是出于监控目的还是出于业务需求需要此功能?
标签: nservicebus publish-subscribe
我正在使用 NServiceBus,我需要知道有多少客户端订阅了特定的消息类型(最好是订阅者的名称)。我说的是 pub\sub 场景。
是否可以在 NServiceBus 中获取这些信息?
谢谢
【问题讨论】:
标签: nservicebus publish-subscribe
您可以直接将其从订阅存储中提取出来。对数据库的查询或队列上的 .GetAllMessages() 将为您提供计数和订阅者地址。如果您希望在代码中执行此操作,您可以为订阅消息编写一个处理程序并以这种方式计算它们。
【讨论】:
我已经成功使用了 ISubscriptionStorage。
public class SubscribersForMessageHandler :
IHandleMessages<SubscribersForMessageRequest>
{
public ISubscriptionStorage Storage { get; set; }
public IBus Bus { get; set; }
public void Handle(SubscribersForMessageRequest message)
{
Bus.Reply<SubscribersForMessageResponse>(m=>
{
m.SagaId = message.SagaId;
m.MessageType = message.MessageType;
m.SubscriberEndpoints = GetSubscribersForMessage(message.MessageType);
});
}
private List<string> GetSubscribersForMessage(string type)
{
return Storage.GetSubscribersForMessage(
new List<string> { type }).ToList();
}
}
【讨论】: