第 8 章 流控制


流控制可通过限制他们之间的数据流来防止生产者和消费者变得负担过重。AMQ 核心协议 JMS 允许您为消费者和生产者配置流控制。

消费者流控制

消费者流控制控制代理和客户端之间的数据流,因为客户端会消耗来自代理的消息。在将消息传送给消费者之前,AMQ 核心协议 JMS 默认会缓冲消息。如果没有缓冲区,客户端首先需要从代理请求每个消息,然后才能使用。这种类型的"往返"通信成本很高。客户端上的数据流很重要,因为内存不足的问题会导致用户无法足够快速地处理消息,缓冲区也开始与传入消息溢出。

制作者流控制

与基于消费者窗口的流控制类似,客户端可以限制从生产者发送到代理的数据量,以防止代理被过多的数据所覆盖。对于制作者,窗口大小决定了任意时间可以处于机状态的字节数。

8.1. 设置使用者窗口大小

客户端缓冲区中保存的最大信息大小取决于其 窗口大小。AMQ 核心协议 JMS 的默认窗口大小为 1 MiB,或 1024 * 1024 字节。默认为大多数用例。对于其他情况,找到窗口大小的最佳值可能需要对您的系统进行基准测试。如果您需要更改默认值,AMQ 核心协议 JMS 允许您设置缓冲区窗口大小。

以下示例演示了如何使用 AMQ 核心协议 JMS 设置使用者窗口大小参数。每个示例将使用者窗口大小设置为 300,000 字节。

流程

  • 如果客户端使用 JNDI 来实例化其连接工厂,在连接字符串 URL 中包括 consumerWindowSize 参数。将 URL 存储在 JNDI 上下文环境中。以下示例使用 jndi.properties 文件存储 URL。

    java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
    connectionFactory.myConnectionFactory=tcp://localhost:61616?consumerWindowSize=300000
    Copy to Clipboard Toggle word wrap
  • 如果客户端不使用 JNDI 来实例化其连接工厂,请将值传递给 ActiveMQConnectionFactory.setConsumerWindowSize()

    ConnectionFactory cf =  ActiveMQJMSClient.createConnectionFactory(...)
    cf.setConsumerWindowSize(300000);
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat