透過位址設定,您可以提供一組設定,這些設定將會套用至任何符合 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
原則一起使用,在訊息開始被拒絕之前,位址可以達到的最大大小(以位元組為單位)。僅適用於 AMQP 用戶端,與max-size-bytes
結合使用。預設值為-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
-
當自動建立的佇列同時具有 0 個消費者且訊息計數小於或等於
auto-delete-queues-message-count
時,代理程式是否應自動刪除這些佇列。預設值為true
。 - auto-delete-created-queues
-
當已建立的佇列同時具有 0 個消費者且訊息計數小於或等於
auto-delete-queues-message-count
時,代理程式是否應自動刪除這些佇列。預設值為false
。 - auto-delete-queues-delay
-
在佇列具有 0 個消費者且訊息計數小於或等於
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
。當客戶端自動建立佇列時,也可以在佇列層級單獨設定上述自動刪除位址設定。 對於核心 API,它會公開在 createQueue 方法中。
對於核心 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
的long
*訊息註釋*。對於核心訊息(由核心和 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
)以及繫結到這些位址的任何佇列啟用度量。