Weblogic JMS高吞吐量生产者/消费者

时间:2013-04-23 02:24:08

标签: java jms weblogic java-ee-5 producer

我正在开发一个项目,我们有一个高吞吐量的jms消息生产(顺便说一下,也是消费者)。  一些测试让我相信我没有正确使用JMS消息生产。  首先让我解释一下这个场景:  我们有一个包含13个队列的Weblogic集群(2个节点)。消息在UDP侦听器(Netty)上接收,并在第一个队列上创建一个ByteMessage,依此类推。  通过一些分析,我发现第一步并不需要很长时间才能执行,而且它的消费者和消息都不会长时间停留在队列中。  它们是非持久的,交付时间为0(零)。  一个改进是缓存de connectionFactory,ConnectionQueue,Queue和QueueSession并永远使用它们。但这不可能是正确的。我的意思是,我们不应该打开那些资源,永远不要关闭它们,对吗?什么应该真正缓存,什么时候应该释放连接和会话?我应该为每个要发送的消息创建会话还是可以重用它?  我的意思是,考虑到正确的资源处理,在队列(每秒300左右)上生成大量jms消息的最佳方法是什么?  我被困在这里,我找到的所有消息都告诉我,当工作完成时它总是关闭,但它从未完成(它总会收到大量的消息)。

提前问候。

编辑:我忘了说MDB有默认的16个消费者大小,理论上考虑到单个消息的处理时间,应该足以消耗所有消息而不“存储”它们。

1 个答案:

答案 0 :(得分:2)

您需要缓存JMS对象。

如果您使用的是Java EE服务器,那么它应该为您执行此操作。我相信这是可配置的。

https://community.jboss.org/wiki/ShouldICacheJMSConnectionsAndJMSSessions

  

连接,会话,消费者和生产者等JMS对象   旨在重复使用。在大多数实现中,连接和会话   是非常重量级的设置和消费者通常需要一个   网络往返设置。制片人通常更轻巧,   虽然创建它通常会有一些开销。

Spring还提供了连接和会话缓存包装器。

调整WebLogic JMS http://docs.oracle.com/cd/E28280_01/web.1111/e13814/jmstuning.htm