- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 JmsTemplate 从同一客户端连接到两个 IBM MQ 服务器。
我已经配置了 JmsTemplate 的 reconnectOnException 以及 IBM MQ 连接工厂的 setClientReconnectOptions。
Spring bean 定义:
<bean id="firstMQCachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="firstMQConnectionFactory" />
<property name="sessionCacheSize" value="20" />
<property name="reconnectOnException" value="true"/>
</bean>
<bean id="secondMQCachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="secondMQConnectionFactory" />
<property name="sessionCacheSize" value="20" />
<property name="reconnectOnException" value="true"/>
</bean>
设置 IBM MQ 重新连接选项:
firstMQConnectionFactory.setClientReconnectOptions(WMQConstancs.WMQ_CLIENT_RECONNECT;
firstMQConnectionFactory.setClientReconnectTimeout(5);
secondMQConnectionFactory.setClientReconnectOptions(WMQConstancs.WMQ_CLIENT_RECONNECT;
secondMQConnectionFactory.setClientReconnectTimeout(5);
这就是我发送消息的方式:
public boolean sendMsg(final String content) throws JmsException{
boolean success = false;
LOGGER.info("sendMsg: Start ") ;
try {
jmsTemplate.send(new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
TextMessage textMessage = session.createTextMessage(content);
textMessage.setStringProperty(WMQConstants.JMS_IBM_CHARACTER_SET, "UTF8");
textMessage.setIntProperty(WMQConstants.JMS_IBM_ENCODING,
WMQConstants.WMQ_ENCODING_NATIVE);
textMessage.setJMSDeliveryMode(DeliveryMode.PERSISTENT);
return textMessage;
}
});
LOGGER.info("sendMsg: Message sent to MQ successfully");
success = true;
} catch (JmsException je) {
LOGGER.error("sendMsg: JmsException " + je.getMessage());
throw je;
} catch (Exception exc) {
LOGGER.error("sendMsg: Exception message: " + exc.getMessage());
throw exc;
}
return success;
}
当系统负载较低时没有使用任何连接时,Spring 会检测到与第一个系统的断开连接。
18 Nov 2017 20:41:03,924 WARN CachingConnectionFactory:322 - Encountered a JMSException - resetting the underlying JMS Connection
com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ1107: A problem with this connection has occurred.
Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2009' ('MQRC_CONNECTION_BROKEN').
18 Nov 2017 20:41:03,940 DEBUG CachingConnectionFactory:486 - Closing cached Session: com.ibm.mq.jms.MQQueueSession@4cbb56ac
18 Nov 2017 20:41:04,006 DEBUG CachingConnectionFactory:447 - Closing shared JMS Connection: com.ibm.mq.jms.MQQueueConnection@48d23557
18 Nov 2017 20:41:04,008 DEBUG CachingConnectionFactory:463 - Could not close shared JMS Connection
com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0019: Failed to disconnect from queue manager 'QM1' using connection mode '1' and host name 'system1.company.com(62305)'.
Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2009' ('MQRC_CONNECTION_BROKEN').
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2009;AMQ9208: Error on receive from host 'system1.company.com/10.0.0.1:62305 (system1.company.com)'. [1=-1,2=ffffffff,3=system1.company.com/10.0.0.1:62305 (system1.company.com),4=TCP]
这会以某种方式影响 JmsTemplate 与第二个系统的连接,并且在使用时我会收到一个没有消息的异常。
18 Nov 2017 23:43:40,247 DEBUG JmsTemplate:482 - Executing callback on JMS Session: Cached JMS Session: com.ibm.mq.jms.MQQueueSession@5a4a62d0
18 Nov 2017 23:43:40,248 DEBUG JmsTemplate:595 - Sending created message:
18 Nov 2017 23:43:40,251 ERROR MessageSender:86 - sendMsg: Exception message: null
堆栈跟踪
java.lang.NullPointerException
at com.ibm.mq.jmqi.remote.impl.RemoteSession.checkIfDisconnected(RemoteSession.java:249)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiPutMessageWithProps(RemoteFAP.java:9045)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiPut(RemoteFAP.java:8115)
at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiPut(InterceptedJmqiImpl.java:624)
at com.ibm.mq.ese.jmqi.ESEJMQI.jmqiPut(ESEJMQI.java:635)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer$SpiIdentifiedProducerShadow.sendInternal(WMQMessageProducer.java:864)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer$ProducerShadow.send(WMQMessageProducer.java:548)
at com.ibm.msg.client.wmq.internal.WMQMessageProducer.send(WMQMessageProducer.java:1393)
at com.ibm.msg.client.jms.internal.JmsMessageProducerImpl.sendMessage(JmsMessageProducerImpl.java:851)
at com.ibm.msg.client.jms.internal.JmsMessageProducerImpl.synchronousSendInternal(JmsMessageProducerImpl.java:2051)
at com.ibm.msg.client.jms.internal.JmsMessageProducerImpl.sendInternal(JmsMessageProducerImpl.java:1989)
at com.ibm.msg.client.jms.internal.JmsMessageProducerImpl.send(JmsMessageProducerImpl.java:1569)
at com.ibm.mq.jms.MQMessageProducer.send(MQMessageProducer.java:321)
at org.springframework.jms.connection.CachedMessageProducer.send(CachedMessageProducer.java:181)
at sun.reflect.GeneratedMethodAccessor120.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.jms.connection.CachedMessageProducer$Jms2MessageProducerInvocationHandler.invoke(CachedMessageProducer.java:293)
at com.sun.proxy.$Proxy59.send(Unknown Source)
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:626)
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:597)
at org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:562)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:484)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:559)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:550)
最佳答案
我们可以通过更改网络连接来创建错误。
当 IBM MQ 客户端的重新连接打开并且网络发生更改时,它会自动刷新后台连接。 Spring JMS 并不总是能够意识到这种刷新,并使我进入这样的状态:一个 CachingConnectionFactory 中的连接将被刷新,但其他 CachingConnectionFactory 中的连接不会被刷新。
我通过不设置 setClientReconnectOptions 来关闭 IBM MQ 客户端重新连接,并让 spring 处理所有连接更改和问题。这修复了上述错误。
关于java - JmsTemplate 与 IBM MQ 队列的 CachingConnectionFactory 连接恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47840880/
我已经尝试运行简单的 spring jmstemplate 示例。这里是发件人的源代码, import javax.jms.Destination; import javax.jms.JMSExcep
我正在使用 Spring Boot 2.1.6 构建 REST API 应用程序。我想在我的应用程序中使用 JMS 消息传递和 Active MQ 包 (org.apache.activemq)。我有
我一直在寻找一些文档/示例来检查动态创建的主题是否存在,如果存在,如何获取该主题的订阅者计数。 我使用以下代码向主题发送消息 - jmsTemplate.send(destination, new M
到目前为止,我只能在 jms 连接工厂中找到并发设置: 是否可以配置单个队列的消费者数量?即类似: 谢谢!~ 最佳答案 不要使用命名空间,而是使用抽象父级 DefaultMessageLi
我有 JMS 应用程序 和 IBM MQ jars 配置,使用 spring 它在正确的队列信息下运行良好,但是当我提供错误的队列信息时 卡在 LOG.info("SENDING MESSAGE");
我正在尝试将消息头插入 amq。 JMSTemplate 中没有特定方法用于在 amq 中设置 header。当我这样设置时,它将保存在 StringProperty 而不是标题。保存到标题如何传递数
我想从 jmsTemplate.sendAndReceive 获取同步响应: Message responseMessage = producer.produceAndReceive(gzip
我想为连接到 ActiveMQ 代理的多个生产者共享 JMSTemplate 的单个实例。示例配置: 我可以使用上面的配置吗? 正如这里提到的:http://docs.sp
我正在使用 Spring boot,我想动态创建多个 JMS 模板,因为我想连接到不同的 JMS 实例。我知道使用注释的标准方法,将 ConnectionFactory 链接到 JMSTemplate
我的服务方法如下所示,我试图模拟 JmsTemplate 以便它可以在单元测试期间发送消息,但它不执行 jmsTemplate.send(...),它直接转到下一行,怎么可能我使用单元测试执行我的服务
我们当前使用 JmsTemplate 的 send(Destination, messageCreator) 方法将消息发送到 webMethods 队列。然而,有时 send 方法需要很长时间才能返
我编写了一个在 Glassfish 中的 Web 服务中运行的 JMS 应用程序(也将其部署在 JBoss 中),我注意到在我通过 MessageListener MDP 处理多条消息后,JMS 服务
我正在使用 Spring API 的 JmsTemplate 和 MappingJackson2MessageConverter(版本:spring-jms-4.3.4.RELEASE.jar)来发布
我刚刚重构了一些发布到 JMS 主题的代码以使用 Spring 的 JmsTemplate 类,现在我收到一个异常,指出我未通过身份验证。 之前我创建了工厂,建立了连接,然后是 session 等,如
需要模拟 JmsTemplate 以在我的应用程序中进行集成测试。 在我的 appcontext.xml 中
我需要在特定时间后删除一条消息,所以我启用了 explicitQosEnabled 并设置了生存时间。 但我注意到消息已被删除,但它花费的时间比指定的时间(一分钟)长,所以以前有人遇到过这个问题吗?
我相信我搞砸了配置,但我不知道在哪里以及如何修复它。 Here你可以找到代码。 org.springframework.jms.UncategorizedJmsException: Uncategor
我正在探索 jmsTemplate 实现并遇到一个问题。可以手动将 JMSMessageId 应用于消息,但回调会返回不同的 MessageId。 示例代码: log.debug("Sending r
在 asyncSend 设置为 true 的情况下发送持久消息是否有最佳实践或指南。 我们没有配置事务管理器 我们有 ~40k-50k 消息,这些消息是使用配置有 的 jmsTemplate 发送的
我有发送到 IBM MQ 队列的 JMS 消息,如果远程客户端(我无法控制远程客户端)在给定的时间(比如 1 分钟)内没有使用消息,消息应该过期(我有过期部分工作,“MQ 删除消息”在 JMSTemp
我是一名优秀的程序员,十分优秀!