gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:05:33 26 4
gpt4 key购买 nike

我正在开发一个项目,我们有高吞吐量的 jms 消息生产(顺便说一下,还有消费者)。

一些测试让我相信我没有以最佳状态正确处理 JMS 消息生产。

首先让我解释一下场景:我们有一个带有 13 个队列的 Weblogic 集群(2 个节点)。消息在 UDP 监听器 (Netty) 上接收,并创建一个位于第一个队列上的 ByteMessage,依此类推。

通过一些分析,我发现第一步的执行时间并不长,消费者也不需要很长时间,但消息仍然在队列中停留很长一段时间。

它们是非持久性的,交付时间为 0(零)。

一个改进是缓存connectionFactory、ConnectionQueue、Queue和QueueSession,并永远使用它们。但这不可能是正确的。我的意思是,我们不应该打开这些资源并且永远不要关闭它们,对吗?真正应该缓存什么以及何时应该释放连接和 session ?我应该为每条要发送的消息创建一个 session 还是可以重用它?

我的意思是,考虑到正确的资源处理,在队列上生成大量 jms 消息(每秒 300 条左右)的最佳方法是什么?

我被困在这里,我发现的所有来源都告诉我在工作完成后始终关闭,但它从未完成(它总是会收到大量消息)。

MDB 默认有 16 个消费者大小,理论上考虑到单个消息所需的处理时间,应该足以消耗所有消息而无需“存储”它们。

最佳答案

您需要缓存 JMS 对象。

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

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

JMS objects like connection, session, consumer and producer were designed to be re-used. In most implementations connection and session are pretty heavyweight to setup and consumer usually requires a network round trip to set up. Producer is often more lightweight, although there is often some overhead in creating it.

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

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

关于java - Weblogic JMS高吞吐量生产者/消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16159858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com