使用 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_VERSION
是 1.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
.
之类的任何内容中看到选项
希望有所帮助。
确保您连接的 SVRCONN
的 SHARECNV
值为 1
或更高,如果它设置为 0
客户端将处理队列管理器作为 v6 队列管理器连接,它不支持 JMS 2.0 功能,包括延迟交付、共享订阅。它还不支持 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_VERSION
是 1.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
.
希望有所帮助。
确保您连接的 SVRCONN
的 SHARECNV
值为 1
或更高,如果它设置为 0
客户端将处理队列管理器作为 v6 队列管理器连接,它不支持 JMS 2.0 功能,包括延迟交付、共享订阅。它还不支持 IBM MQ 自动重新连接逻辑和双向心跳消息。