spring JmsTemplate没有发送超时

sqserrrh  于 2022-11-21  发布在  Spring
关注(0)|答案(3)|浏览(183)

我使用SpringJMS应用程序IBM MQ jar配置一起工作
它在队列信息正确的情况下工作得很好,但是当我给予错误的队列信息时
它挂在了

LOG.info("SENDING MESSAGE");
jmsTemplate.send(this.getDestination(), messageCreator );  //here

我有我的日志说发送消息,我正在处理org.springframework.jmsexception,但它没有抛出.....我认为它在这一点上挂起。
我找不到jmsemplate的发送超时的任何属性,只有接收超时的属性在那里...
下面是jmsemplate配置,位于**app-context.xml(Spring)**中

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate102">
        <property name="connectionFactory">
            <ref bean="jmsQueueConnectionFactory" />
        </property>
        <property name="destinationResolver">
            <ref bean="jmsDestinationResolver" />
        </property>
        <property name="pubSubDomain">
            <value>false</value>
        </property>
        <property name="receiveTimeout">
            <value>20000</value>

        </property>

ibm mq配置-

<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
        <property name="hostName">
            <value>${queue_hostname}</value>
        </property>
        <property name="port">
            <value>${queue_port}</value>
        </property>
        <property name="queueManager">
            <value>${queue_manager}</value>
        </property>
        <property name="channel">
            <value>${queue_channel}</value>
        </property>
        <property name="transportType">
            <value>1</value>
        </property>
    </bean>

我已将其设置为自动确认

this.jmsTemplate.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);

因此,请告诉我如何在发送消息时设置超时以抛出jmsexception

qyswt5oh

qyswt5oh1#

这都是无稽之谈。
如果您尝试将消息放入无效队列,MQ会立即抛出一个异常,原因代码为2085(未知对象)。不需要超时。显然,您使用的框架有一个bug,它无法捕获抛出的异常!!!
尝试只使用JMS和MQ进行相同的测试,您将看到不同之处。

cngwdvgl

cngwdvgl2#

@anshulkatta为什么不在使用JmsDestinationAccessor中的方法设置目标之前对其进行验证。请使用resolveDestinationName方法进行验证。因此,您的应用程序将验证目标,否则它将引发JMSException,您可以捕获并记录相应的验证消息。check http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jms/support/destination/JmsDestinationAccessor.html

a64a0gku

a64a0gku3#

查看Hystrix库。在它的帮助下,您可以管理连接的超时。将超时设置到HystrixCommandProperties.setter中,并将其传递给HystrixCommand类。

HystrixCommandProperties.Setter commandPropertiesDefaults = HystrixCommandProperties.Setter()
            .withExecutionTimeoutInMilliseconds(timeout);

然后从HystrixCommand类运行execute()方法。

相关问题