假设我有一条ClientRequestMessage
消息,其中包含对特定Client
的请求。 Web应用程序将生成这些请求,并且需要将它们发送到正确的Client
进行处理。我可以考虑一些选择。
ClientId
)以确定它们是否关心它。这对我来说在很多层面上都是错误的。所以我的问题是,什么是最好的(最有效的?最容易管理的?)方式来设置它?我很确定我需要使用经销商,但不是积极的,所以我想问。
奖励问题:答案 0 :(得分:0)
您可以使用MessageEndpointMappings配置部分告诉NSB将消息放在何处。您可以将特定消息类型或整个程序集映射到队列。如果您不想创建特定的消息类型并映射它们,那么我会推荐发布方法。从队列中删除消息的开销非常小。
如果您的“客户端”有许多NSB实例来接收消息,那么您将需要使用分发服务器。查看distributed Pub/Sub documentation。
答案 1 :(得分:0)
如果您真正想要的是一个解决方案,它允许您只有一条消息,您可以根据clientId在消息上放置特定的过滤器,并且仅在与消息相关时将消息路由到客户端,那么我会使用PServiceBus(pservicebus.codeplex.com)。它将使您更容易为每个客户端定义一组订阅,其中所有客户的消息都被clientId过滤到特定队列或您可用的传输。下面的示例显示了UserName属性过滤ChatTopic,并且订阅者仅在发布消息时在指定的传输上接收消息UserName属性不是TJ。您也可以使用复杂的过滤器,例如GreaterThan(“MyComplexProperty.Blah.ID”,5)
Subscriber.New("MyUserName").Durable(false)
.SubscribeTo(Topic.Select<ChatTopic>().NotEqual("UserName", "TJ"))
.AddTransport("Tcp",
Transport.New<TcpTransport>(
transport => {
transport.Format = TransportFormat.Json;
transport.IPAddress = "127.0.0.1";
transport.Port = port;
}), "ChatTopic")
.Save();