Spring集成中如何组装MQ消息的片段

问题描述

在使用 Spring Integration JMS Jms.messageDrivenChannelAdapter 时如何处理/组装 MQ 消息的段。 ?我确实找到了一些关于使用 MQ API 时如何做的参考。

https://medium.com/@marcus_j/consuming-segmented-ibm-mq-messages-in-java-cbdee4a9ad85

findViewById();

根据我的理解,我将必须传递适当的 MQGetMessageOptions ,以便能够要求队列管理器重新组合消息(如果消息已被分段)。找不到有关在使用 spring JMS 时如何传递这些选项的任何参考。

解决方法

遗憾的是,IBM MQ 在 JMS 中不支持 Message segmentation

IBM® MQ for z/OS® 或使用 IBM MQ JMS 类的应用程序不支持此功能。

,

Spring Integration 不为 IBM MQ API 提供通道适配器实现。 一方面,IBM MQ 上有一个 JMS 桥接 API:https://developer.ibm.com/components/ibm-mq/tutorials/mq-develop-mq-jms/

另一方面(正如您已经注意到的),Spring Integration 为 JMS 提供了通道适配器:https://docs.spring.io/spring-integration/docs/current/reference/html/jms.html#jms

因此,我会先尝试使用官方 IBM JMS 客户端,然后在他们的 JMS 客户端中寻求 IBM 支持以提供去分段选项。

Spring Integration 确实无能为力。

尽管您始终可以编写自己的 MessageProducerSupport 来执行特定于 IBM MQ 的逻辑。您需要实现一个 doStart() 并在您完成组装 IBM MQ 消息等后从那里调用 sendMessage()

,

虽然您确实无法使用开箱即用代码在 gmo@JmsListener 上应用 JmsTemplate 选项,但如果您已包含MQ JMS Spring Boot Starter 作为依赖 -


        <dependency>
            <groupId>com.ibm.mq</groupId>
            <artifactId>mq-jms-spring-boot-starter</artifactId>
            <version>2.4.1</version>
        </dependency> 

然后您就可以访问您在示例中使用的所有 MQ 类。因此,您可以制作自己的对象和方法,并在您的 Spring 应用程序中使用它们。虽然它们不会像 JMS Spring 那样,并且连接不会由 Spring 管理。

难点在于 get message options 应用在 get 上,而不是连接上。要覆盖在连接上设置的选项,您可以创建自己的自定义连接工厂 bean,但不能用于 gmo 选项。