透過位址設定,您可以提供一組設定,這些設定將會套用至任何符合 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

此屬性可以具有下列值之一:PAGEDROPFAILBLOCK,並決定當指定了 max-size-bytes 的位址滿載時會發生什麼情況。預設值為 PAGE。如果值為 PAGE,則其他訊息將會分頁到磁碟。如果值為 DROP,則其他訊息將會被無聲地捨棄。如果值為 FAIL,則其他訊息將會被捨棄,並且會在用戶端拋出例外狀況。如果值為 BLOCK,則用戶端訊息產生者會在嘗試傳送其他訊息時被封鎖。如需更多資訊,請參閱流量控制分頁章節。

message-counter-history-day-limit

假設 message-counter-enabledtrue,則此位址保留訊息計數器歷程記錄的天數。預設值為 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

代理程式在重新載入設定時應如何處理已刪除的佇列,依刪除原則:OFFFORCE。預設值為 OFF。請閱讀更多關於設定重新載入的資訊。

config-delete-diverts

代理程式在重新載入設定時應如何處理已刪除的轉向器,依刪除原則:OFFFORCE。預設值為 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

代理程式在重新載入設定時應如何處理已刪除的位址,依刪除原則:OFFFORCE。預設值為 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-timelong *訊息註釋*。對於核心訊息(由核心和 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.retailorders.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.retailorders.wholesale)以及繫結到這些位址的任何佇列啟用度量。