【问题标题】:Weblogic JMS high throughput producer/consumerWeblogic JMS 高吞吐量生产者/消费者
【发布时间】:2013-04-16 02:34:44
【问题描述】:

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

提前问候。

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

【问题讨论】:

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


    【解决方案1】:

    您需要缓存 JMS 对象。

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

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

    连接、会话、消费者和生产者等 JMS 对象是 设计为可重复使用。在大多数实现中,连接和会话 设置起来非常重量级,消费者通常需要一个 网络往返设置。 Producer 往往更轻量级, 尽管创建它通常会有一些开销。

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

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

    【讨论】:

    • 我很想简单地注入这些对象。但它是一个遗留系统,客户端禁止使用 DI。我不知道为什么。因此可以使用 EJB 和 MDB,但我需要查找所有内容才能使事情正常进行。我还应该缓存我引用的所有对象类型吗?谢谢!
    • 我仍在做一些测试,但您的资源似乎对我帮助很大!
    • 我写了一个答案,它似乎在某个地方消失了。从JNDI获取对象与DI基本相同。 Java EE 服务器(和 WebLogic Server)在合适的情况下为 JNDI 中的 JMS 对象提供对象缓存。正如您所提到的,文档中有很多关于微调基础架构的有用信息。很高兴它有帮助!
    猜你喜欢
    • 2020-10-13
    • 2012-07-05
    • 2019-06-14
    • 1970-01-01
    • 2012-05-18
    • 2018-03-07
    • 2015-04-09
    • 2017-07-13
    • 2022-01-22
    相关资源
    最近更新 更多