问题描述
在使用 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
选项。