第 8 章 流控制


通过限制流量之间的数据流,流控制可防止生产者和消费者变得过度密度。AMQ 核心协议 JMS 允许您为消费者和生产者配置流控制。

消费者流控制

消费者流控制控制代理和客户端之间的数据流,因为客户端会消耗来自代理的消息。在向消费者提供前,AMQ Core Protocol JMS 缓冲消息。如果没有缓冲区,客户端会首先需要从代理请求每个消息,然后才能消耗它。这种类型的"往返"通信非常昂贵。当消费者无法快速处理消息,且缓冲区开始与传入的消息溢出时,对客户端上的数据流进行监管非常重要。

生成者流控制

与消费者的基于窗口的流控制类似,客户端可将从制作者发送到代理的数据数量限制为防止代理被过度使用太多数据。对于生成者,窗口大小决定了任何一次可以处于 flight 的字节数。

8.1. 设置消费者窗口大小

客户端侧缓冲区中保存的最大消息大小由其 窗口大小 决定。AMQ Core Protocol JMS 的窗口的默认大小为 1 MiB,或 1024 * 1024 字节。对于大多数用例,默认值是正常的。对于其他情况,查找窗口大小的最佳值可能需要对您的系统进行基准测试。如果需要更改默认值,AMQ Core Protocol JMS 允许您设置缓冲区窗口大小。

以下示例演示了如何在使用 AMQ Core Protocol JMS 时设置消费者窗口大小参数。每个示例将消费者窗口大小设置为 300,000 字节。

流程

  • 如果客户端使用 JNDI 来实例化其连接工厂,请将 consumerWindowSize 参数作为连接字符串 URL 的一部分。将 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

© 2025 Red Hat