Spring JMS Websphere MQ 打开输入计数问题
Spring JMS Websphere MQ open input count issue
我正在使用 Spring 3.2.8 与 JDK 6 和 Websphere MQ 7.5.0.5。在我的应用程序中,我正在通过 ThreadPool 使用 jmsTemplate 进行一些 jms 调用。首先,当我点击 jms 调用时,我遇到了 "Current queue depth" 计数增加的情况。我跟踪了我通过 ThreadPool 启动的所有对象,并中断或取消了所有 threads/future 个对象。所以这个"Current queue depth"计数受控。
现在的问题是 "Open input count" 值几乎增加到我发送的请求数。当我停止服务器时,此计数变为 0。
在所有这种情况下,我都能发送请求并获得响应,直到计数达到 80,而我的线程池大小为 30。在达到请求计数达到 80 后,我不断收到未来对象拒绝的错误消息,并且无法接收响应.事实上,剩余的呼叫会收到空响应。
请推荐。
First I faced condition that "Current queue depth" count increases as
I hit jms calls. I tracked all objects I am initiating via ThreadPool
and interrupt or cancel all threads/future objects.
我不知道你在说什么,但你不应该 using/monitoring 应用程序中的 'current queue depth' 值。糟糕,糟糕的设计。只有 MQ 监控工具应该使用它。
Now problem is "Open input count" value increases nearly to the number
of requests I am sending. When I stops my server this count becomes 0.
糟糕的编程。你一遍又一遍地 'opening a queue then putting a message'。你放一些代码来关闭队列怎么样,或者更好的是,重新使用打开的队列!!!!!!!
我在我的应用程序中使用队列,并且应用了相关 ID 的过滤器。我阅读了更多内容,发现当我们调用 jmsTemplate.receiveSelected (queue, filter)
时,这会对性能产生严重影响。一旦我删除了这个过滤器,线程连接问题就解决了。但是现在过滤对我来说仍然是个问题。
现在我将以不同的方式应用过滤器,但应用程序有一些限制但不使用 receiveSelected
而现在我使用 jmsTemplate.receive
.
9 月 14 日更新
所有 - 我发现这是一个解决方案,喜欢 post 在这里。
我的一位同事帮助解决了这个问题,帮助很大。我们在调试后观察到如果 cacheConsumer 为真则基于
的组合
queue + message-selector + session
消费者由 Spring 缓存。甚至调用 close()
方法也没有做任何事情;基本上是空方法并导致线程为 hanged/stuck.
将 cacheConsumer 设置为 false 后,我将代码还原为原始代码,即 jmsTemplate.receiveSelected (destination, messageSelector)
,现在当我达到 100 个请求时,在多次测试迭代期间,线程数仅增加了 5 到 10 个。
所以 - 这个属性需要小心使用。
希望这对您有所帮助!!
我正在使用 Spring 3.2.8 与 JDK 6 和 Websphere MQ 7.5.0.5。在我的应用程序中,我正在通过 ThreadPool 使用 jmsTemplate 进行一些 jms 调用。首先,当我点击 jms 调用时,我遇到了 "Current queue depth" 计数增加的情况。我跟踪了我通过 ThreadPool 启动的所有对象,并中断或取消了所有 threads/future 个对象。所以这个"Current queue depth"计数受控。
现在的问题是 "Open input count" 值几乎增加到我发送的请求数。当我停止服务器时,此计数变为 0。
在所有这种情况下,我都能发送请求并获得响应,直到计数达到 80,而我的线程池大小为 30。在达到请求计数达到 80 后,我不断收到未来对象拒绝的错误消息,并且无法接收响应.事实上,剩余的呼叫会收到空响应。
请推荐。
First I faced condition that "Current queue depth" count increases as I hit jms calls. I tracked all objects I am initiating via ThreadPool and interrupt or cancel all threads/future objects.
我不知道你在说什么,但你不应该 using/monitoring 应用程序中的 'current queue depth' 值。糟糕,糟糕的设计。只有 MQ 监控工具应该使用它。
Now problem is "Open input count" value increases nearly to the number of requests I am sending. When I stops my server this count becomes 0.
糟糕的编程。你一遍又一遍地 'opening a queue then putting a message'。你放一些代码来关闭队列怎么样,或者更好的是,重新使用打开的队列!!!!!!!
我在我的应用程序中使用队列,并且应用了相关 ID 的过滤器。我阅读了更多内容,发现当我们调用 jmsTemplate.receiveSelected (queue, filter)
时,这会对性能产生严重影响。一旦我删除了这个过滤器,线程连接问题就解决了。但是现在过滤对我来说仍然是个问题。
现在我将以不同的方式应用过滤器,但应用程序有一些限制但不使用 receiveSelected
而现在我使用 jmsTemplate.receive
.
9 月 14 日更新
所有 - 我发现这是一个解决方案,喜欢 post 在这里。
我的一位同事帮助解决了这个问题,帮助很大。我们在调试后观察到如果 cacheConsumer 为真则基于
的组合queue + message-selector + session
消费者由 Spring 缓存。甚至调用 close()
方法也没有做任何事情;基本上是空方法并导致线程为 hanged/stuck.
将 cacheConsumer 设置为 false 后,我将代码还原为原始代码,即 jmsTemplate.receiveSelected (destination, messageSelector)
,现在当我达到 100 个请求时,在多次测试迭代期间,线程数仅增加了 5 到 10 个。
所以 - 这个属性需要小心使用。
希望这对您有所帮助!!