如何实现消息队列解决方案

sca*_*cci 6 c# queue wcf msmq-wcf ibm-mq

我有一个场景,大约需要将10条不同的消息排队,然后出列/处理.一个用户需要所有10个消息,而另一个用户只需要10个消息中的8个.我试图了解设置此类架构的最佳方法是什么.您是否为每种消息类型创建一个队列,以便订阅者可以只订阅相关队列,还是将它们全部转储到同一队列并忽略与该订阅者无关的消息?我想确保解决方案灵活/可扩展等.

处理:

  1. 10个不同的xml消息将排入IBM WebSphere MQ服务器.
  2. 我们将使用.Net(很可能是WCF,因为WebSphere MQ 7.1已添加到WCF支持中)
  3. 我们将消息出列并将它们加载到另一个后端数据库(很可能是SQL Server).
  4. 解决方案需要很好地扩展,因为我们将处理大量的消息,这可能会增长(可能是40-50,000 /小时).至少对我们来说很大.

一如既往地非常欣赏这些信息.

--S

T.R*_*Rob 1

好的,根据评论,这里有一个可扩展的建议,不需要对应用程序进行太多更改。

在生产者方面,我将消息选择标准复制到消息属性,然后将消息发布到主题。应用程序所需的唯一更改是消息属性。如果由于某种原因您不想使用本机功能发布它,您可以为主题定义别名。该应用程序认为它正在发送消息,但它们实际上是出版物。

在消费者方面,你有几个选择。一种是为每个应用程序创建管理订阅并在订阅中使用选择器。然后,根据选择标准,消息将被输送到每个消费者的专用队列。这些应用程序认为它们只是在消费消息。

或者,应用程序可以简单地订阅该主题。这使您可以选择动态订阅,当应用程序断开连接时不接收消息(如果您实际上想要这样做)或持久订阅,其功能相当于管理订阅。

该解决方案可以轻松扩展到您引用的数量。另一种选择是生产者不使用属性。在这里,消费者应用程序使用所有消息,打开每个消息的消息负载,并决定是处理还是忽略该消息。在此解决方案中,生产者仍然发布到某个主题。任何涉及直接排队的解决方案都会迫使生产者知道所有目的地。添加另一个消费者,更改生产者。此外,每个目的地都有一个 PUT。

最糟糕的情况是生产者放置多条消息,而消费者必须读取每一条消息来决定是否将其忽略。该选项可能会出现扩展问题,具体取决于选择标准字段在有效负载中的深度。非常长的 XPath 表达式 = 性能很差,并且无法调整 WMQ 来弥补它,因为此时延迟全部在应用程序中。

最好的情况是,生产者设置消息属性并发布。消费者在订阅中选择财产,或者管理订阅可以为他们做到这一点。就可伸缩性而言,该解决方案使用应用程序订阅还是管理订阅都没有任何区别。