Как понять причину отсутствия сообщений от IBM MQ на стороне клиента? - PullRequest
0 голосов
/ 16 июня 2020

У меня очень странная проблема - иногда (~ 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

1 Ответ

0 голосов
/ 17 июня 2020

Может быть, это классическая c проблема, когда вы забыли инициализировать, какие сообщения вам нужны, например

  • Получить сообщение ... возвращает сообщение 99

  • Получить сообщение 99 ... не найдено, потому что вы его уже обработали.

убедитесь, что вы очистили структуры / use_new при получении сообщений

...