使用地址设置,您可以提供一组设置,这些设置将应用于与match
属性中的字符串匹配的任何地址。在以下示例中,设置仅应用于地址order.foo
,但也可以使用通配符来应用设置。
例如,如果您使用match
字符串queue.#
,则设置将应用于所有以queue.
开头的地址。
地址设置是分层的。因此,如果多个address-setting
匹配,则将按其特异性的顺序应用设置,更特异性的匹配优先。与任何单词分隔符(默认情况下为#
)的匹配被认为比没有它的匹配更不特异性。与单个单词分隔符(默认情况下为*
)的匹配被认为比与确切队列名称的匹配更不特异性。通过这种方式,可以对设置进行“分层”,从而不需要重复配置详细信息。
地址设置匹配也可以是“字面”,可用于按字面意义匹配通配符,有关更多详细信息,请参阅字面匹配。
特定设置的含义在整个用户手册中都有详细解释,但这里简要说明并链接到相应的章节(如果可用)。
以下是一个可能在broker.xml
文件中找到的address-setting
条目示例。
<address-settings>
<address-setting match="order.foo">
<dead-letter-address>DLA</dead-letter-address>
<auto-create-dead-letter-resources>false</auto-create-dead-letter-resources>
<dead-letter-queue-prefix></dead-letter-queue-prefix>
<dead-letter-queue-suffix></dead-letter-queue-suffix>
<expiry-address>ExpiryQueue</expiry-address>
<auto-create-expiry-resources>false</auto-create-expiry-resources>
<expiry-queue-prefix></expiry-queue-prefix>
<expiry-queue-suffix></expiry-queue-suffix>
<expiry-delay>123</expiry-delay>
<redelivery-delay>5000</redelivery-delay>
<redelivery-delay-multiplier>1.0</redelivery-delay-multiplier>
<redelivery-collision-avoidance-factor>0.0</redelivery-collision-avoidance-factor>
<max-redelivery-delay>10000</max-redelivery-delay>
<max-delivery-attempts>3</max-delivery-attempts>
<max-size-bytes>-1</max-size-bytes>
<max-size-messages>-1</max-size-messages>
<max-size-bytes-reject-threshold>-1</max-size-bytes-reject-threshold>
<page-size-bytes>10MB</page-size-bytes>
<address-full-policy>PAGE</address-full-policy>
<message-counter-history-day-limit></message-counter-history-day-limit>
<last-value-queue>false</last-value-queue> <!-- deprecated! see default-last-value-queue -->
<default-last-value-queue>false</default-last-value-queue>
<default-non-destructive>false</default-non-destructive>
<default-exclusive-queue>false</default-exclusive-queue>
<default-consumers-before-dispatch>0</default-consumers-before-dispatch>
<default-delay-before-dispatch>-1</default-delay-before-dispatch>
<redistribution-delay>-1</redistribution-delay>
<send-to-dla-on-no-route>false</send-to-dla-on-no-route>
<slow-consumer-threshold>-1</slow-consumer-threshold>
<slow-consumer-threshold-measurement-unit>MESSAGES_PER_SECOND</slow-consumer-threshold-measurement-unit>
<slow-consumer-policy>NOTIFY</slow-consumer-policy>
<slow-consumer-check-period>5</slow-consumer-check-period>
<auto-create-queues>true</auto-create-queues>
<auto-delete-queues>true</auto-delete-queues>
<auto-delete-created-queues>false</auto-delete-created-queues>
<auto-delete-queues-delay>0</auto-delete-queues-delay>
<auto-delete-queues-message-count>0</auto-delete-queues-message-count>
<auto-delete-queues-skip-usage-check>false</auto-delete-queues-skip-usage-check>
<config-delete-queues>OFF</config-delete-queues>
<config-delete-diverts>OFF</config-delete-diverts>
<auto-create-addresses>true</auto-create-addresses>
<auto-delete-addresses>true</auto-delete-addresses>
<auto-delete-addresses-delay>0</auto-delete-addresses-delay>
<auto-delete-addresses-skip-usage-check>false</auto-delete-addresses-skip-usage-check>
<config-delete-addresses>OFF</config-delete-addresses>
<management-browse-page-size>200</management-browse-page-size>
<management-message-attribute-size-limit>256</management-message-attribute-size-limit>
<default-purge-on-no-consumers>false</default-purge-on-no-consumers>
<default-max-consumers>-1</default-max-consumers>
<default-queue-routing-type>MULTICAST</default-queue-routing-type>
<default-address-routing-type>MULTICAST</default-address-routing-type>
<default-consumer-window-size>1048576</default-consumer-window-size>
<default-ring-size>-1</default-ring-size>
<retroactive-message-count>0</retroactive-message-count>
<enable-metrics>true</enable-metrics>
<enable-ingress-timestamp>false</enable-ingress-timestamp>
<id-cache-size>20000</id-cache-size>
<initial-queue-buffer-size>8192</initial-queue-buffer-size>
</address-setting>
</address-settings>
- dead-letter-address
-
是当消息超过
max-delivery-attempts
时发送消息的地址。如果没有在此处定义地址,则此类消息将被简单地丢弃。有关未送达的消息的更多信息,请参阅。 - auto-create-dead-letter-resources
-
是否在消息无法送达时,代理会自动创建定义的
dead-letter-address
和相应的死信队列。有关未送达的消息的更多信息,请参阅章节。 - dead-letter-queue-prefix
-
自动创建的死信队列使用的前缀。默认为空。有关未送达的消息的更多信息,请参阅章节。
- dead-letter-queue-suffix
-
自动创建的死信队列使用的后缀。默认为空。有关未送达的消息的更多信息,请参阅章节。
- expiry-address
-
发送已过期消息的位置。如果没有在此处定义地址,则此类消息将被简单地丢弃。有关消息过期的更多信息,请参阅。
- auto-create-expiry-resources
-
确定代理是否在消息过期时自动创建定义的
expiry-address
和相应的过期队列。有关未送达的消息的更多信息,请参阅章节。 - expiry-queue-prefix
-
自动创建的过期队列使用的前缀。默认为空。有关消息过期的更多信息,请参阅章节。
- expiry-queue-suffix
-
自动创建的过期队列使用的后缀。默认为空。有关消息过期的更多信息,请参阅章节。
- expiry-delay
-
将用于使用默认过期时间(即 0)的消息的过期时间。例如,如果
expiry-delay
设置为“10”,并且使用默认过期时间(即 0)的消息到达,则其过期时间“0”将更改为“10”。但是,如果使用过期时间“20”的消息到达,则其过期时间将保持不变。将expiry-delay
设置为“-1”将禁用此功能。默认值为“-1”。有关消息过期的更多信息,请参阅。 - max-delivery-attempts
-
定义取消的消息在发送到
dead-letter-address
之前可以重新送达多少次。有关未送达的消息的更多信息,请参阅。 - redelivery-delay
-
定义在尝试重新送达取消的消息之前等待多长时间。默认值为
0
。有关未送达的消息的更多信息,请参阅。 - redelivery-delay-multiplier
-
每次后续重新送达尝试时,将乘以
redelivery-delay
的数字。默认值为1.0
。有关未送达的消息的更多信息,请参阅。 - redelivery-collision-avoidance-factor
-
定义用于计算对
redelivery-delay
(向上或向下)进行调整的附加因子。默认值为0.0
。有效值介于 0.0 和 1.0 之间。有关未送达的消息的更多信息,请参阅。 - max-size-bytes
- max-size-messages
- page-size-bytes
- max-read-page-messages
- max-read-page-bytes
-
所有这些都用于配置地址上的分页。这在分页文档中进行了解释。
- max-size-bytes-reject-threshold
-
与地址满
BLOCK
策略一起使用,地址可以达到的最大大小(以字节为单位),在此之后消息将开始被拒绝。与max-size-bytes
结合使用仅适用于 AMQP 客户端。默认值为-1
(即没有限制)。 - address-full-policy
-
此属性可以具有以下值之一:
PAGE
、DROP
、FAIL
或BLOCK
,并确定当指定了max-size-bytes
的地址已满时会发生什么。默认值为PAGE
。如果值为PAGE
,则后续消息将被分页到磁盘。如果值为DROP
,则后续消息将被静默丢弃。如果值为FAIL
,则后续消息将被丢弃,并且将在客户端抛出异常。如果值为BLOCK
,则客户端消息生产者在尝试发送后续消息时将被阻塞。有关更多信息,请参阅流量控制和分页章节。 - message-counter-history-day-limit
-
假设
message-counter-enabled
为true
,则为保留此地址的消息计数器历史记录的天数。默认值为0
。 - default-last-value-queue
-
队列是否仅使用最后一个值。默认值为
false
。此值可以使用last-value
布尔值在队列级别覆盖。有关最后一个值队列的更多信息,请参阅。 - default-exclusive-queue
-
队列是否仅为单个消费者服务。默认值为
false
。此值可以使用exclusive
布尔值在队列级别覆盖。有关独占队列的更多信息,请参阅。 - default-consumers-before-dispatch
-
绑定到匹配地址的队列上需要多少个消费者才能将消息分派给这些消费者。默认值为
0
。此值可以使用consumers-before-dispatch
布尔值在队列级别覆盖。此行为可以使用队列本身上的delay-before-dispatch
进行调整,或者使用default-delay-before-dispatch
地址设置进行调整。 - default-delay-before-dispatch
-
代理在开始分派消息之前,将等待配置的消费者数量连接到匹配队列的毫秒数。默认值为
-1
(无限期等待)。 - redistribution-delay
-
当队列上的最后一个消费者关闭后,在重新分发任何消息之前等待多长时间。默认值为
-1
。有关集群的更多信息,请参阅。 - send-to-dla-on-no-route
-
如果消息发送到某个地址,但服务器没有将其路由到任何队列(例如,可能没有队列绑定到该地址,或者没有一个队列的过滤器匹配该地址),则通常该消息将被丢弃。但是,如果此参数为
true
,则此类消息将改为发送到该地址的dead-letter-address
(DLA)(如果存在)。默认值为false
。 - slow-consumer-threshold
-
消费者被认为是“缓慢”的允许的最低消息消费率。以 slow-consumer-threshold-measurement-unit 配置选项指定的单位衡量。默认值为
-1
(即禁用);任何其他值都必须大于 0 才能确保队列中有消息,并且是实际的消费者速度慢。值为 0 将允许没有待处理消息的消费者被认为是速度慢的。有关慢速消费者的更多信息,请参阅。 - slow-consumer-threshold-measurement-unit
-
用于测量 slow-consumer-threshold 的单位。有效选项为
-
MESSAGES_PER_SECOND
-
MESSAGES_PER_MINUTE
-
MESSAGES_PER_HOUR
-
MESSAGES_PER_DAY
如果没有指定单位,则将使用默认的 MESSAGES_PER_SECOND。有关慢速消费者的更多信息,请参阅。
-
- slow-consumer-policy
-
检测到慢速消费者时应该发生什么。
KILL
将终止消费者的连接(这显然会影响使用同一连接的任何其他客户端线程)。NOTIFY
将发送 CONSUMER_SLOW 管理通知,应用程序可以接收该通知并采取措施。有关慢速消费者的更多信息,请参阅。 - slow-consumer-check-period
-
多久检查一次特定队列上的慢速消费者。以秒为单位。默认值为
5
。这应该至少是消费者处理 1 条消息所需的最大时间的 2 倍。例如,如果 slow-consumer-threshold
设置为 1 且slow-consumer-threshold-measurement-unit
设置为MESSAGES_PER_MINUTE
,则这应该至少设置为 2 x 60 秒,即 120 秒。有关慢速消费者的更多信息,请参阅。 - auto-create-queues
-
代理是否应该在发送消息或消费者尝试连接到其名称与地址
match
匹配的队列时自动创建该队列。自动创建的队列是持久的、非临时的和非瞬态的。默认值为true
。自动队列创建不适用于核心客户端。核心 API 是一个低级 API,不打算具有这种自动化功能。
自动队列创建用于在正常操作期间不会创建的队列。例如,当远程应用程序在 JMS 主题上创建消费者时,将创建一个队列来表示该订阅,如JMS 到核心映射章节中所述。无论auto-create-queues 如何配置,都会创建此队列,因为它对于正常操作是必需的。 |
- auto-delete-queues
-
代理是否应该在自动创建的队列既没有消费者且消息计数小于或等于
auto-delete-queues-message-count
时自动删除该队列。默认值为true
。 - auto-delete-created-queues
-
代理是否应该在创建的队列既没有消费者且消息计数小于或等于
auto-delete-queues-message-count
时自动删除该队列。默认值为false
。 - auto-delete-queues-delay
-
在队列既没有消费者且消息计数小于或等于
auto-delete-queues-message-count
之后,等待多少毫秒(以毫秒为单位)才能删除自动创建的队列。默认值为0
(立即删除)。代理的address-queue-scan-period
控制多久(以毫秒为单位)扫描一次队列以查找可能需要删除的队列。使用-1
禁用扫描。默认扫描值为30000
。 - auto-delete-queues-message-count
-
队列必须小于或等于的邮件计数,才能删除自动创建的队列。要禁用邮件计数检查,可以设置
-1
。默认值为0
(空队列)。 - auto-delete-queues-skip-usage-check
-
默认情况下,只有当队列实际被“使用”过时,才会自动删除队列。如果在队列的生命周期内有消息发送到队列,或者有消费者连接到队列,则认为队列被“使用”过。但是,在某些用例中,跳过此检查非常有用。当设置为
true
时,必须将auto-delete-queues-delay
设置为大于0
的值,否则队列可能在创建后几乎立即被删除。在这种情况下,队列将根据创建的时间而不是最后一次“使用”的时间来删除。默认值为false
。当客户端自动创建队列时,上述自动删除地址设置也可以在队列级别单独配置。 对于 Core API,它在 createQueue 方法中公开。
对于 Core JMS,可以使用目标队列属性
my.destination?auto-delete=true&auto-delete-delay=120000&auto-delete-message-count=-1
来设置它。 - config-delete-queues
-
代理应如何处理配置重新加载时删除的队列,通过删除策略:
OFF
或FORCE
。默认值为OFF
。有关配置重新加载的更多信息,请参阅。 - config-delete-diverts
-
代理应如何处理配置重新加载时删除的转发,通过删除策略:
OFF
或FORCE
。默认值为OFF
。有关配置重新加载的更多信息,请参阅。 - auto-create-addresses
-
代理是否应该在将消息发送到或消费者尝试从映射到地址的队列(其名称符合地址
match
)进行消费时自动创建一个地址。默认值为true
。自动地址创建不适用于核心客户端。核心 API 是一个低级 API,不打算进行这种自动化。 - auto-delete-addresses
-
代理是否应该在地址不再有任何队列时自动删除自动创建的地址。默认值为
true
。 - auto-delete-addresses-delay
-
在自动创建的地址不再有任何队列后,在删除它们之前等待的时间(以毫秒为单位)。默认值为
0
(立即删除)。代理的address-queue-scan-period
控制扫描地址以进行潜在删除的频率(以毫秒为单位)。使用-1
禁用扫描。默认扫描值为30000
。 - auto-delete-addresses-skip-usage-check
-
默认情况下,只有当地址实际被“使用”过时,才会自动删除地址。如果在其生命周期内在其上创建了任何队列,则认为地址被“使用”过。但是,在某些用例中,跳过此检查非常有用。当设置为
true
时,必须将auto-delete-addresses-delay
设置为大于0
的值,否则地址可能在创建后几乎立即被删除。在这种情况下,地址将根据创建的时间而不是最后一次“使用”的时间来删除。默认值为false
。 - config-delete-addresses
-
代理应如何处理配置重新加载时删除的地址,通过删除策略:
OFF
或FORCE
。默认值为OFF
。有关配置重新加载的更多信息,请参阅。 - management-browse-page-size
-
是管理资源可以浏览的消息数量。这与队列控制上公开的
browse
、list
和count-with-filter
管理方法有关。默认值为200
。 - management-message-attribute-size-limit
-
是从消息中收集的用于浏览的字节数。这与队列控制上公开的
browse
和list
管理方法有关。比此值更长的消息属性将显示为截断。默认值为256
。使用-1
关闭此限制。请注意,需要为所有在给定时刻可见的消息分配内存。如果将此值设置得太高,可能会影响浏览器稳定性,因为可能需要大量内存才能浏览大量消息。 - default-purge-on-no-consumers
-
定义队列的默认
purge-on-no-consumers
设置,如果队列本身没有提供任何设置。默认值为false
。可以使用purge-on-no-consumers
布尔值在队列级别覆盖此值。有关此功能的更多信息,请参阅。 - default-max-consumers
-
定义队列的默认
max-consumers
设置,如果队列本身没有提供任何设置。默认值为-1
(即没有限制)。可以使用max-consumers
布尔值在队列级别覆盖此值。有关此功能的更多信息,请参阅。 - default-queue-routing-type
-
如果代理无法根据客户端和/或协议语义确定路由类型,则为自动创建的队列的路由类型。默认值为
MULTICAST
。有关路由类型的更多信息,请参阅。 - default-address-routing-type
-
如果代理无法根据客户端和/或协议语义确定路由类型,则为自动创建的地址的路由类型。默认值为
MULTICAST
。有关路由类型的更多信息,请参阅。 - default-consumer-window-size
-
CORE
协议消费者的默认consumerWindowSize
值,如果未定义,则默认值将设置为 1 MiB(1024 * 1024 字节)。如果在客户端上未设置该值,则消费者将使用此值作为窗口大小。有关流量控制的更多信息,请参阅。 - default-ring-size
-
任何匹配队列的默认
ring-size
值,该队列没有明确定义ring-size
。如果未定义,则默认值将设置为 -1。有关环形队列的更多信息,请参阅。 - retroactive-message-count
-
为匹配地址上将来创建的队列保留的消息数量。默认值为 0。有关追溯地址的更多信息,请参阅。
- enable-metrics
-
确定是否将指标发布到为匹配地址配置的任何指标插件。默认值为
true
。有关指标的更多信息,请参阅。 - enable-ingress-timestamp
-
确定代理是否将自己的时间添加到发送到匹配地址的消息中。当为
true
时,确切的行为将取决于所使用的特定协议。对于 AMQP 消息,代理将添加一个名为x-opt-ingress-time
的消息注释。对于核心消息(由核心和 OpenWire 协议使用),代理将添加一个名为_AMQ_INGRESS_TIMESTAMP
的长属性。对于 STOMP 消息,代理将添加一个名为ingress-timestamp
的帧标题。该值将是从纪元以来的毫秒数。默认值为false
。 - id-cache-size
-
定义地址的重复 ID 缓存的最大大小,因为每个地址都有自己的缓存,可以帮助检测和防止基于其唯一标识处理重复消息。默认情况下,
id-cache-size
设置从全局id-cache-size
继承,如果未明确配置,则默认值为20000
个元素。有关重复 ID 缓存大小的更多信息,请参阅。 - initial-queue-buffer-size
-
定义最初为消息引用缓冲区在 JVM 堆上分配的元素数量。这将为每个队列分配。如果有许多创建但不太可能使用的队列,可以将其配置为更小的值,以防止大型初始分配。默认情况下,如果未明确配置,则此值为
8192
。这必须是 2 的正幂(即0
不是选项)。
1. 字面匹配
字面匹配是包含通配符但应不考虑这些通配符而应用的匹配。换句话说,应该忽略通配符,地址设置应该只应用于字面(即精确)匹配。
当应用程序使用通配符地址时,这可能很有用。例如,如果应用程序在地址orders.#
上创建一个多播队列,并且该队列需要与其他匹配地址(如orders.retail
和orders.wholesale
)不同的配置。一般来说,这种用例很少见,但 MQTT 客户端通常使用通配符地址,这种配置灵活性很有用。
1.1. 配置字面匹配
如果要配置字面匹配,首先要做的就是在broker.xml
中配置literal-match-markers
参数。这定义了用于标记字面匹配的开始和结束字符,例如
<core>
...
<literal-match-markers>()</literal-match-markers>
...
</core>
默认情况下,没有为literal-match-markers
定义任何值,这意味着默认情况下字面匹配被禁用。该值必须只有 2 个字符。
一旦定义了literal-match-markers
,就可以在地址设置的match
中使用这些标记,例如
<address-settings>
<address-setting match="(orders.#)">
<enable-metrics>true</enable-metrics>
</address-setting>
<address-setting match="orders.#">
<enable-metrics>false</enable-metrics>
</address-setting>
</address-settings>
使用这些设置,将在地址orders.#
和直接绑定到该地址的任何队列上启用指标,但不会为其他匹配地址(如orders.retail
或orders.wholesale
)和绑定到这些地址的任何队列启用指标。