我有一组要从服务总线主题订阅消息的类。所有这些类都希望只接收某些消息类型,例如:
public class MySubscriber : IBusSubscriber, IConsume<ItemCreated>, IConsume<ItemUpdated> {
public void Consume(ItemCreated message) { /* processing */ }
public void Consume(ItemUpdated message) { /* processing */ }
}
对于每个订阅者类,我使用一组规则创建订阅以过滤消息。对于MySubscriber,它将是名为MySubscriber的订阅和内部有SqlFilters的两个规则:
"MessageType = 'ItemCreated'"
"MessageType = 'ItemUpdated'"
我在发布时将MessageType作为消息属性填充,并且它正常工作。但是,如果此类规则的数量增长(例如报告订阅者中的一个需要大约130个规则),则变得非常缓慢。即使没有大量消息,也只有一个这样的报告订阅者每秒只收到大约1条消息。
可以加速吗?或者可能有另一种方法来实现它,避免创建这么多的过滤器?
答案 0 :(得分:0)
Azure Service Bus将是一个更好的选择。 如果您使用的是 Standard 消息传递层,请考虑按照以下方法之一创建主题,以提高性能
1)快速主题,可实现高吞吐量和减少延迟的情况
TopicDescription td = new TopicDescription(TopicName);
td.EnableExpress = true;
namespaceManager.CreateTopic(td);
2)分区主题比常规队列和主题具有更高的吞吐量,并且可用性更高
TopicDescription td = new TopicDescription(TopicName);
td.EnablePartitioning = true;
namespaceManager.CreateTopic(td);
但是,服务总线消息传递的 Premium 层可满足关键任务应用程序在规模,性能和可用性方面的常见客户需求。对于生产方案,建议使用“高级”层。