4.2. 将地址设置应用到一组地址
在 AMQ Broker 中,您可以使用通配符表达式代表匹配的地址名称,将 address-setting
元素中指定的配置应用到 一组 地址。
以下小节论述了如何使用通配符表达式。
4.2.1. AMQ Broker 通配符语法 复制链接链接已复制到粘贴板!
AMQ Broker 使用特定语法来代表地址设置中的通配符。通配符也可以在安全设置中使用,并在创建使用者时使用。
-
通配符表达式包含一个以句点(
.
)分隔的词语。 数字符号 (
#
) 和星号 (*
) 字符还有特殊的用处,可以替代一个词,例如:- 数字符号字符表示"匹配任何 0 个或更多连续的词"。在表达式的末尾使用它。
- 星号字符表示"匹配单个单词"。在您的表达式中的任何位置使用它。
匹配不是按照字符进行的,而是根据分割的字符段进行的。例如,一个 address-setting
项被配置为匹配名称中带有 my
的队列将不匹配名为 myqueue
的队列。
当多个 address-setting
元素与地址匹配时,代理覆盖配置将最小特定匹配项的配置用作基准。表达式中的字面字符比通配符更具体,星号 (*
) 比数字符号更具体 (#
)。例如,my.destination
和 my.*
都会匹配地址 my.destination
。在这种情况下,代理首先应用 my
opg 下找到的配置,因为通配符表达式比字面 小。接下来,代理覆盖 my.destination
address 设置元素的配置,它会覆盖任何使用 my
ClusterClaim 共享的配置。例如,假设与 my.destination
关联的队列将 max-delivery-attempts
设置为 3
,last-value-queue
设为 false
。
下表中的示例说明了如何使用通配符来匹配一组地址。
Example | 描述 |
---|---|
|
|
|
匹配 |
|
匹配 |
|
匹配 |
4.2.2. 配置字面匹配 复制链接链接已复制到粘贴板!
在字面匹配中,通配符将被视为字面字符,以匹配包含通配符的地址。例如,字面匹配中的 hash (#)字符可以匹配 orders.
Slack 但没有匹配地址的地址,如 orders.retail
或 orders.wholeell
。
流程
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 在配置字面匹配项前,请使用
literal-match-markers
参数来定义限制字面匹配项的字符。在以下示例中,使用括号来限制字面匹配。<core> ... <literal-match-markers>()</literal-match-markers> ... </core>
<core> ... <literal-match-markers>()</literal-match-markers> ... </core>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在定义了限制字面匹配项的标记后,在
address 设置 match 参数中指定匹配项
,包括标记。以下示例为名为orders.
"" 的地址配置字面匹配,以启用该特定地址的指标。<address-settings> <address-setting match="(orders.#)"> <enable-metrics>true</enable-metrics> </address-setting> </address-settings>
<address-settings> <address-setting match="(orders.#)"> <enable-metrics>true</enable-metrics> </address-setting> </address-settings>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.3. 配置代理通配符语法 复制链接链接已复制到粘贴板!
以下流程演示了如何自定义用于通配符地址的语法。
流程
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 在配置中添加 <
wildcard-addresses
> 部分,如下例所示。Copy to Clipboard Copied! Toggle word wrap Toggle overflow enabled
-
当设置为
true
时,指示代理使用您的自定义设置。 delimiter
-
提供自定义字符作为
分隔符
替代默认字符(.
)。 any-words
-
作为
any-words
的值提供的字符代表“匹配 0 个或更多个序列”,并将替换默认的#
。在表达式的末尾使用此字符。 单词
-
作为
single-word
的值提供的字符代表“匹配一个词”,并将替换默认的*
。在您的表达式中的任何位置使用此字符。