У меня очень странная проблема - иногда (~ 8% всех сообщений) наш микросервис, который отправляет и принимает сообщения от IBM MQ, не получает сообщение из очереди, но это сообщение существует в очереди, service просто ждет 50 сек c (это наш тайм-аут) и все. Ничего об исключениях в журнале ...
Главный вопрос не о причине проблемы, а о том, почему клиент IBM MQ (com.ibm.mq.allclient версии 9.1.1.0) не выдает исключение?
Обновление Подробнее: У нас есть клиент, который пытается получить сообщение из очереди в течение 50 секунд. Приведенный ниже код очень прост:
private fun receiveMessage(messageId: String, properties: ApplicationProperties): String {
val routeId = route.id
val responseQueue = properties.client.responseQueue
val response = jmsTemplates[routeId]?.receiveSelectedAndConvert(responseQueue, "JMSCorrelationID='$messageId'")
return response?.let {
RequestContext.getCurrentContext().responseStatusCode = 200
it.toString()
} ?: throw ZuulRuntimeException(ZuulException("Forwarding error", 500, "No response message has been received for : "
+ "routeId=" + routeId
+ "; messageId=" + messageId
+ "; responseQueue=" + responseQueue))
}
К сожалению, у меня нет прямого доступа к очереди, но я могу получить некоторые файлы журналов, и, как я вижу, сообщения появлялись в очереди ответов в течение 8-9 секунд. Похоже, все в порядке, но я не знаю, почему клиент ibm не мог забрать сообщение из очереди в течение 50 секунд. Я увеличил время ожидания и увидел, что эти приостановленные клиентские запросы jsm забирают сообщения из очереди ответов на 57-61 секунду. И для меня неясны две вещи: 1) Какова причина задержки 2) И почему реализация клиента ibm jms не генерирует никаких исключений, только пересылает null как ответ.
О версии com.ibm.mq .allclient: я использовал версии: 9.1.0, 9.1.1, 9.1.5