第 19 章 流控制


流程控制可用于限制客户端和服务器之间的消息传递数据流,从而使消息传递参与者不会感到不堪重负。您可以从消费方和制作者一侧管理数据流。

19.1. 消费者流控制

JBoss EAP 消息传递包括的配置,用于定义预先为使用者获取的数据量,以及控制使用者能够使用消息的速度。

基于窗口的流控制

JBoss EAP 消息预先填充到每位消费者的缓冲区中。缓冲区的大小由 connection- factory 的 consumer-window- size 属性决定。以下示例配置显示了一个明确设置了 consumer- window-size 属性的 connection- factory

<connection-factory name="MyConnFactory" ... consumer-window-size="1048576" />
Copy to Clipboard Toggle word wrap

使用管理 CLI,读取和写入给定 connection -factory 的 consumer-window- size 属性的值。以下示例演示了如何使用 InVmConnectionFactory 连接工厂完成此操作,对于驻留在同一虚拟机(例如本地 MessageDrivenBean )的消费者而言,这是默认设置。

  • 从管理 CLI 阅读 InVmConnectionFactoryconsumer-window-size 属性
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:read-attribute(name=consumer-window-size)
{
    "outcome" => "success",
    "result" => 1048576
}
Copy to Clipboard Toggle word wrap
  • 从管理 CLI 编写 consumer-window-size 属性
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:write-attribute(name=consumer-window-size,value=1048576)
{"outcome" => "success"}
Copy to Clipboard Toggle word wrap

consumer-window-size 的值必须是整数。下表中指出一些值具有特殊含义。

Expand
表 19.1. consumer-window-size 的值
描述

n

用于将缓冲区大小设置为 n 字节的整数值。默认值为 1048576,这在大部分情况下都是正常的。如果默认值不够,基准测试将帮助您找到窗口大小的最佳值。

0

关闭缓冲区。这有助于适应较慢的消费者,并能跨多个消费者确定分布情况。

-1

创建未绑定缓冲区。这有助于非常快速的消费者在收到消息时尽快调取和处理消息。

警告

如果使用者无法在接收消息时尽快处理消息,则将 consumer-window-size 设置为 -1 可溢出客户端内存。

如果您使用核心 API,则使用者窗口大小可以使用其 setConsumerWindowSize() 方法从 ServerLocator 设置。

如果您使用 JMS,客户端可以使用实例化 ConnectionFactorysetConsumerWindowSize() 方法指定使用者窗口大小。

速率限制流控制

JBoss EAP 消息传递可以规范每秒使用的消息速率,这种流控制方法称为节流。使用适当 connection-factory 的 consumer-max- rate 属性,确保使用者不会以比指定的速度更快地使用消息。

<connection-factory name="MyConnFactory" ... consumer-max-rate="10" />
Copy to Clipboard Toggle word wrap

默认值为 -1,它会 禁用速率限制流控制。

管理 CLI 是读取和写入 consumer-max-rate 属性的建议方法。以下示例演示了如何使用 InVmConnectionFactory 连接工厂完成此操作,这对于驻留在同一虚拟机(例如本地 MessageDrivenBean )的消费者而言是默认设置。

  • 使用管理 CLI 读取 consumer-max-rate 属性
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:read-attribute(name=consumer-max-rate)
{
    "outcome" => "success",
    "result" => -1
}
Copy to Clipboard Toggle word wrap
  • 使用管理 CLI 编写 consumer-max-rate 属性:
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:write-attribute(name=consumer-max-rate,value=100)
{"outcome" => "success"}
Copy to Clipboard Toggle word wrap

如果使用 JMS,可使用实例化 ConnectionFactory 的 setConsumerMaxRate(int consumerMaxRate)方法设置最大速率大小。

如果您使用 Core API,可使用 ServerLocator.setConsumerMaxRate(int consumerMaxRate) 方法设置速率。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat