如何理解客户端没有来自IBM MQ的消息的原因?

问题描述 投票:0回答:1

我有一个非常奇怪的问题-有时(约占所有消息的8%)我们的微服务从IBM MQ发送和接收消息,但没有从队列中接收消息,但是此消息存在于队列中,服务只是等待50秒(这是我们的超时时间),仅此而已。日志中没有异常...

主要问题不是问题的原因,而是有关IBM MQ客户端(com.ibm.mq.allclient版本9.1.1.0)为何不引发异常的这一问题?

更新更多细节:我们有客户端尝试在50秒内从队列中获取消息。下面的代码非常简单:

private fun receiveMessage(messageId: String, route: SoapGatewayProperties.TimbRouteProperties): String {
    val routeId = route.id
    val responseQueue = route.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

java jms ibm-mq spring-jms
1个回答
0
投票

例如,这是您忘记初始化所需消息的经典问题吗?

  • 获取消息...返回消息99

  • 找不到消息99 ...,因为您已经对其进行了处理。

确保在获取消息时清除/ use_new结构

© www.soinside.com 2019 - 2024. All rights reserved.