Java 如何加快ibm jms消息的使用时间

Java 如何加快ibm jms消息的使用时间,java,jms,ibm-mq,Java,Jms,Ibm Mq,我的应用程序作为ibm客户机使用ibm MQ服务器发送的消息。但有时他们会发送大量信息(例如:50000条)。但是我们的客户端应用程序不能如此快速地“吃掉”消息 我所尝试的: 使用缓存连接工厂,但帮助不大 org.springframework.jms.connection.CachingConnectionFactory 由于我们的业务需求,我无法为侦听器打开多个线程以加快使用速度(当前设置为1) 提前感谢 编辑: 对于每个消息,处理时间如下:(例如:0:00:00。079),但等待开始处理下

我的应用程序作为ibm客户机使用ibm MQ服务器发送的消息。但有时他们会发送大量信息(例如:50000条)。但是我们的客户端应用程序不能如此快速地“吃掉”消息

我所尝试的:

  • 使用缓存连接工厂,但帮助不大

    org.springframework.jms.connection.CachingConnectionFactory

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

  • 提前感谢

    编辑:


    对于每个消息,处理时间如下:(例如:0:00:00。079),但等待开始处理下一条消息将花费很长时间(例如:0:00:00。534

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

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

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

    如果您使用的是非持久性/非事务性消息传递,那么请查看预读选项,将消息流式传递到客户端


    另外,请确保选择器未被使用

    如果客户机实现是可协商的,请考虑发送组合单个消息的聚合消息,尤其是在(例如)将某些内容保存到数据库之前,如果业务逻辑能够适应将这些消息一起处理的话

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

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


    最后,对于大量的消息,您确实需要弄清楚如何获取n个侦听器,否则您可能永远赶不上,更糟糕的是,您的积压工作会继续增加。

    我建议您有一个线程,它会尽可能快地消耗消息,并将这些消息传递到线程池来处理它们。我还建议您启用批处理。除非您的消息很大,否则您应该能够每秒处理来自任何一台像样的JMS服务器的大约10000条消息。