Я использую приложение на основе Spring для подключения к серверу IBM MQ для отправки и получения сообщений JMS. Я установил тайм -аут, используя функцию SetReceivedTimeout в JMStemplate, и я ожидаю, что какое -то JMSexception будет выброшено после нарушения настроенного тайм -аута, но приложение продолжает ждать, пока ответ не будет получен в очереди ответа. Я пробовал диапазоны от 100 миллисекунд до 10000 миллисекунд, но он не соблюдает мой настроенный тайм-аут, расчет окончательного времени в коде ниже всегда больше, чем настройка значения Pretivetimeout. Я следую за пружинным документом, чтобы установить значение тайм-аута:-< /p>
public void setReceiveTimeout(long receiveTimeout)
< /code>
Установите время ожидания для использования для приема вызовов (в миллисекундах). По умолчанию
jmsdestinationaccsors.receive_timeout_indefinite_wait, который
указывает на блокирующий прием без тайм -аута. Клиент использует приведенный ниже код и подтвердите, что значение правильно установлено (при установке на 500 миллисекунд):-< /p>
System.setProperty("com.ibm.msg.client.commonservices.trace.status","ON");
mqjavaclient_4909.tc:
00000002 @c1d1ad5 c.i.m.c.j.wmq.internal.WMQGMO(MQGMO)----+----+-d getWaitInterval() getter [500(0x1f4)]
IBM MQ Version:
com.ibm.mq
mq-jms-spring-boot-starter
3.2.4
jmstemplate определение бобов:
@Bean
public JmsTemplate jmsTemplate() throws JMSException {
var mqQueueConnectionFactory = mqQueueConnectionFactory();
var userCredentialsConnectionFactoryAdapter =
getUserCredentialsConnectionFactoryAdapter(mqQueueConnectionFactory);
var jmsTemplate = new JmsTemplate(userCredentialsConnectionFactoryAdapter);
jmsTemplate.setReceiveTimeout(Long.parseLong(receiveTimeout));
return jmsTemplate;
}
Использование:
System.out.println(start);
var message = (TextMessage) jmsTemplate.sendAndReceive(destinationMq, session -> {
TextMessage textMessage = session.createTextMessage(mqRequest.request());
textMessage.setJMSCorrelationID(mqRequest.correlationId());
textMessage.setJMSReplyTo(getMQ(mqRequest.replyToQueue()));
return textMessage;
});
System.out.println(System.currentTimeMillis() - start);
Подробнее здесь: https://stackoverflow.com/questions/794 ... eout-value