如何加快ibm jms消息的消耗时间

时间:2016-02-08 04:34:25

标签: java jms ibm-mq

我的应用程序正在作为ibm客户端使用ibm MQ服务器发送的消息。但有时他们会发送大量的消息(例如:50000)。但是我们的客户端应用程序无法快速“吃掉”消息。

我试过的是什么:

  1. 使用缓存连接工厂,但没有太多帮助。

    org.springframework.jms.connection.CachingConnectionFactory

  2. 由于我们的业务需求,我无法为侦听器打开多个线程以加快消耗速度(当前设置为1)。

  3. 先谢谢!

    编辑:

    对于每个消息,处理时间如下:(例如:0:00:00。 079 )但等待启动进程下一条消息需要很长时间(例如:0:00:00。 534

2 个答案:

答案 0 :(得分:0)

考虑消息的事务和持久性要求。

MQ中有许多选项可以在此处启用以加快交付速度。

MQ针对持久性/事务性或非持久性/非事务性工作负载进行了优化。不要混用它们,例如在非事务性会话中发送持久性消息。

如果您使用非持久性/非事务性消息传递,请查看READ_AHEAD选项以将消息流式传输到客户端。

另外确保选择器不在使用中。

答案 1 :(得分:0)

如果客户端实现是可协商的,请查看发送组合各个消息的聚合消息,特别是如果业务逻辑可以适应在一起处理它们之前(例如)将某些内容保存到数据库中。

您不能拥有多个侦听器线程的唯一合法“业务”原因是事件/工作流排序以及同时处理两个相关消息而非顺序处理两个相关消息的可能性。但是,也许可以重新设计客户端,以便发件人使用某种类型的JMS属性隔离消息,然后让每个侦听器按各种属性进行过滤。只要所有相关事件/消息都具有相同的属性,您就可以拥有多个侦听器。

不理想,但如果您使侦听器有状态,以便您知道何时回滚事件B,因为相关事件A当前正在处理,那可能会有效。很难用更多的开销处理。更好的是,找出一种无序处理消息并最终获得正确答案的方法。

最终,对于大量的消息,你真的需要弄清楚如何获得n个监听器,否则你可能永远不会赶上,更糟糕的是,继续增加你的积压。