Apache camel XA事务中MQ的JMS发布/订阅(使用驼峰)性能问题

Apache camel XA事务中MQ的JMS发布/订阅(使用驼峰)性能问题,apache-camel,jms,ibm-mq,publish-subscribe,xa,Apache Camel,Jms,Ibm Mq,Publish Subscribe,Xa,我们有一个java应用程序进行JMS订阅,它使用Camel作为JMS提供程序 应用程序正在使用XA订阅主题。它使用队列中的1条消息,然后关闭XA事务(每条消息都是XA事务的一部分)。然后,应用程序将自身重新连接到主题,以便为每条消息重新启动相同的过程 当没有消息要处理时,客户机等待45秒(这是XA事务超时),然后关闭请求和XA事务并开始新的迭代 我已经分析了这个过程实际上是如何使用tcpdump完成的,下面是我的发现: MQ Client --[XA_START]--> MQ Se

我们有一个java应用程序进行JMS订阅,它使用Camel作为JMS提供程序

应用程序正在使用XA订阅主题。它使用队列中的1条消息,然后关闭XA事务(每条消息都是XA事务的一部分)。然后,应用程序将自身重新连接到主题,以便为每条消息重新启动相同的过程

当没有消息要处理时,客户机等待45秒(这是XA事务超时),然后关闭请求和XA事务并开始新的迭代

我已经分析了这个过程实际上是如何使用tcpdump完成的,下面是我的发现:

    MQ Client --[XA_START]--> MQ Server
    MQ Client <--[XA_START_REPLY]-- MQ Server

    MQ Client --[SPI (SUBSCRIBE)]--> MQ Server
    MQ Client <--[SPI REPLY]-- MQ Server

    MQ Client --[REQUEST_MSGS]--> MQ Server
    MQ Client --[REQUEST_MSGS]--> MQ Server
    MQ Client <--[NOTIFICATION]-- MQ Server

    MQ Client --[MQCLOSE]--> MQ Server
    MQ Client <--[MQCLOSE_REPLY]-- MQ Server

    MQ Client --[XA_END]--> MQ Server
    MQ Client <--[XA_END_REPLY]-- MQ Server

    MQ Client --[XA_COMMIT]--> MQ Server
    MQ Client <--[XA_COMMIT_REPLY]-- MQ Server
MQ客户端--[XA_START]-->MQ服务器
MQ客户机MQ服务器
MQ客户机MQ服务器
MQ客户端--[REQUEST_MSGS]-->MQ服务器
MQ客户机MQ服务器
MQ客户机MQ服务器
MQ客户机MQ服务器

MQ客户机如果您正在做相同的事情,但从队列中读取数据,那么它的性能是否更好?服务器上正在运行哪个版本的IBM MQ?您在camel中使用的IBM MQ jar文件的版本是什么?@JoshMc是的,使用队列而不是pub/sub将执行得更好,因为MQ不必在每次迭代中执行I/O。但是,这是一个发布/订阅应用程序,不能重新设计为使用队列。MQ服务器和客户端都在v7.5.0.7上运行。MQ v7,5在2018年4月失去支持。你用新的东西测试过吗?v8.0将于2020年4月停止支持,因此不推荐使用,v9.0尚未发布,但我猜是2021年4月,因此我建议使用寿命最长的9.1.0.3。如果您的应用程序不更改订阅(例如:始终保持订阅相同的主题字符串),则您可以通过管理方式将队列订阅到这些主题字符串,并让应用程序直接从队列中读取,这也意味着发布端看不到任何区别。@JoshMc迁移到更新版本的MQ目前不是一个选项,我真的不确定它是否能解决这里的任何问题。。。?我认为您提到的另一个选项是不可行的,因为我们有时会动态弹出新的订阅者,也会出现新的订阅者。鉴于您在关闭订阅者之前只使用了一条消息,MQ客户端协议的REQUEST_MSGS部分对您没有什么好处。建议关闭预读。您能否在您的问题中添加一些关于XA需求的信息?除了MQ,您的其他资源是什么?