我连接到两个IBMMQ服务器从同一个客户端使用JmsTemboard。
我已经配置了JmsTemplate的reConnectOnExcishop以及IBMMQ连接工厂的setClientReacentOptions。
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中的连接会被刷新,而另一个连接不会被刷新的状态。
我通过不设置setClientReconnectOptions关闭了IBM MQ客户端重新连接,并让spring处理所有连接更改和问题。这修复了上述错误。
我正在尝试从Spring Boot服务向IBM MQ队列发送消息。我可以从安装在笔记本电脑上的IBM MQ发送/接收消息。 但是,当我替换配置以连接到IBM MQ云时,这不起作用 配置如下: 得到以下错误 注: > 我可以远程进入主机 我尝试了以下用户名 使用APIKey 我的IBM用户名
我是ElasticSearch的新手,我遵循这里的说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html 每当我运行“docker compose up”时,Kibana总是说“无法恢复连接”,但如果我运行curlhttp://localhost:9200,我会得到回复: 下面是我的docker
这是我的问题。 我正在使用试用版的。我已经创建了一个队列管理器,一个带有的通道。我已经提供了用户来访问。我正在尝试将消息放入队列。但是在获取队列连接时,我遇到了异常。 com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013:为具有连接模式“客户端”和主机名“(1500)”的QueueManager“MYQM”提供的安全身份验证
我无法连接到具有SEDA队列的骆驼路线。在服务器端,我有以下配置: 我正在尝试从这样的独立客户端访问此路由: 但我的制作人无法连接到seda队列。无法按我的路线排队。无法在我的bean属性中添加camelContext。我正在获取“bean类的属性'camelContext'无效”。如果我将正文发送到SEDA队列,则消息将发送到那里,但不会发送到路由的下一个元素
我正在开发我的第一个Azure实现,我已经设置了我的Azure帐户,并且我使用NuGet为我的应用程序安装了正确的DLL和配置。当我将我的WCF客户端设置为指向服务总线队列并运行该方法时,会出现以下异常: 微软。ServiceBus.服务器错误 我的endpoint配置是: 我的行为是: 这个错误消息非常通用,我不确定我应该首先查看哪个位置
问题内容: 我在使用ActiveMQ和Spring时遇到问题。我像这样设置它们: 正在使用故障转移传输: 我遇到的问题是,如果一个盒子掉了,我们应该开始在另一个盒子上发送消息,但是它似乎仍在使用旧的连接(每次发送都超时)。如果我重新启动该程序,它将再次连接并且一切正常。 我的理解是应该自行修复(重新连接到新盒子),并且每次都应请求新连接,因此应该可以。我想知道这是否可能做得不好(是否在缓存与旧服务