使用 JMS 2.0 通过 IBM MQ 使用交付延迟

Use JMS 2.0 to use delivery delay with IBM MQ

我将 IBM MQ 与 Spring Boot 一起使用,我正在尝试使用 setDeliveryDelay(time) 方法延迟消息。 此功能仅在 JMS 2.0 中受支持,我遇到了问题,因为我是 运行 JMS 1.1,我不知道如何升级到 2.0

我正在使用这个依赖项

implementation(group: 'com.ibm.mq', name: 'mq-jms-spring-boot-starter', version: '2.6.2')

并创建这个 bean:

@Bean("mqTemplate")
public JmsTemplate jmsClient(ConnectionFactory connectionFactory) throws JMSException {
    System.out.println(connectionFactory.createConnection().getMetaData().toString());
    JmsTemplate temp = new JmsTemplate(connectionFactory);
    return temp;
}

然后我就简单的设置了延迟,发送消息:

jmsTemplate.setDeliveryDelay(101010);
jmsTemplate.convertAndSend(queue, message);

启动时我可以看到:

|   com.ibm.msg.client.jms.internal.JmsConnectionMetaDataImpl@71f29d91  :-  
|   |   XMSC_JMS_MAJOR_VERSION     :-  1
|   |   XMSC_JMS_MINOR_VERSION     :-  1
|   |   XMSC_JMS_VERSION           :-  1.1
|   |   XMSC_MAJOR_VERSION         :-  6
|   |   XMSC_MINOR_VERSION         :-  0
|   |   XMSC_OBJECT_IDENTITY       :-  1911725457
|   |   XMSC_PROVIDER_NAME         :-  IBM MQ
|   |   XMSC_VERSION               :-  6.0
|   |   XMSC_WMQ_COMMAND_LEVEL     :-  910
|   |   XMSC_WMQ_PROVIDER_VERSION  :-  6.0.0.0

如您所见,XMSC_JMS_VERSION1.1,当我尝试发送到队列时出现以下错误:

JMSCC5008: Use of the JMS2.0 Function 'Delayed Delivery' is not supported with this instance of this connection

这是有道理的,因为我没有使用 JMS 2.0,但是我可以将 JMS 版本从 1.1 更改为 2.0 吗?

只是继续对话,但我想做一些格式化...

我更改了我的 Maven 依赖项:

    <dependency>
        <groupId>com.ibm.mq</groupId>
        <artifactId>com.ibm.mq.allclient</artifactId>
        <version>9.1.0.6</version>
    </dependency>

至:

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

这仍然导致:

com.ibm.msg.client.jms.internal.JmsConnectionMetaDataImpl@70988f36  :-
XMSC_IS_Z_SERIES           :-  false
XMSC_JMS_MAJOR_VERSION     :-  2
XMSC_JMS_MINOR_VERSION     :-  0
XMSC_JMS_VERSION           :-  2.0
XMSC_MAJOR_VERSION         :-  8
XMSC_MINOR_VERSION         :-  0
XMSC_OBJECT_IDENTITY       :-  1889046326
XMSC_PROVIDER_NAME         :-  IBM MQ JMS Provider
XMSC_VERSION               :-  8.0.0.0
XMSC_WMQ_COMMAND_LEVEL     :-  910
XMSC_WMQ_PROVIDER_VERSION  :-  8.0.0.0

具有短信属性:

JMSMessage class: jms_text
JMSType:          null
JMSDeliveryMode:  1
JMSDeliveryDelay: 0
JMSDeliveryTime:  0
JMSExpiration:    0

我不知道 XMSC_VERSION 如何设置为 6.0。我没有在客户端代码或 mqclient.ini.

之类的任何内容中看到选项

希望有所帮助。

确保您连接的 SVRCONNSHARECNV 值为 1 或更高,如果它设置为 0 客户端将处理队列管理器作为 v6 队列管理器连接,它不支持 JMS 2.0 功能,包括延迟交付、共享订阅。它还不支持 IBM MQ 自动重新连接逻辑和双向心跳消息。