Apache ActiveMQ Artemis 範例儲存庫包含 90 多個範例,示範了許多用戶端和代理程式功能。
這些範例可以在以下位置找到:https://github.com/apache/activemq-artemis-examples
個別範例可在 examples
目錄下找到,並在以下子樹中分組
-
features
- 包含代理程式特定功能的範例。-
clustered
- 顯示負載平衡和分發功能的範例。 -
ha
- 顯示故障轉移和重新連線功能的範例。 -
perf
- 允許您在伺服器上執行一些效能測試的範例 -
standard
- 示範各種代理程式功能的範例。 -
sub-modules
- 整合外部模組的範例。
-
-
protocols
- 協定特定範例-
amqp
-
mqtt
-
openwire
-
stomp
-
1. 執行範例
首先,在儲存庫根目錄中執行 mvn clean package
,以在 artemis-distribution/target 目錄中準備一個代理程式發行版,供範例使用。
若要執行任何範例,只需 cd
到適當的範例目錄,然後輸入 mvn verify
或 mvn install
(如需詳細資訊,請閱讀每個範例目錄中的 readme.md)。
您可以使用設定檔 -Pexamples
在任何範例樹下執行多個範例。
對於每個範例,您都會在 ./target/server0
下建立一個伺服器 (某些範例使用多個伺服器)。
您可以選擇防止範例啟動伺服器 (例如,如果您想要手動啟動伺服器),只需指定 -PnoServer
設定檔,例如
# running an example without running the server
mvn verify -PnoServer
在 ./target
下,也會有一個腳本重複建立每個伺服器的命令。這是 Queue
範例產生的 create-server0.sh
。這有助於確切了解配置伺服器所需的命令。
# These are the commands used to create server0
/myInstallDirectory/apache-artemis/bin/artemis create --allow-anonymous --silent --force --no-web --user guest --password guest --role guest --port-offset 0 --data ./data --allow-anonymous --no-autotune --verbose /myInstallDirectory/apache-artemis-1.1.0/examples/features/standard/queue/target/server0
一些範例使用 UDP 叢集,這在您的環境中可能預設無法運作。在 Linux 上,命令為
route add -net 224.0.0.0 netmask 240.0.0.0 dev lo
此命令應以 root 身分執行。這會將導向 224.0.0.0
的所有流量重新導向到迴路介面。在 Mac OS X 上,命令略有不同
sudo route add 224.0.0.0 127.0.0.1 -netmask 240.0.0.0
所有範例都使用 Maven 外掛程式,這對於執行您的測試伺服器也很有用。
這是執行範例時的常見輸出。在此案例中,取自 Queue
範例
[INFO] -------------< org.apache.activemq.examples.broker:queue >--------------
[INFO] Building ActiveMQ Artemis JMS Queue Example 2.32.0
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- enforcer:3.3.0:enforce (enforce-maven-version) @ queue ---
[INFO] Rule 0: org.apache.maven.enforcer.rules.version.RequireMavenVersion passed
[INFO]
[INFO] --- enforcer:3.3.0:enforce (enforce-java-version) @ queue ---
[INFO] Rule 0: org.apache.maven.enforcer.rules.version.RequireJavaVersion passed
[INFO]
[INFO] --- remote-resources:3.1.0:process (process-resource-bundles) @ queue ---
[INFO] Preparing remote bundle org.apache.apache.resources:apache-jar-resource-bundle:1.5
[INFO] Copying 3 resources from 1 bundle.
[INFO]
[INFO] --- resources:3.3.1:resources (default-resources) @ queue ---
[INFO] Copying 1 resource from src/main/resources to target/classes
[INFO] Copying 3 resources from target/maven-shared-archive-resources to target/classes
[INFO]
[INFO] --- compiler:3.11.0:compile (default-compile) @ queue ---
[INFO] Changes detected - recompiling the module! :source
[INFO] Compiling 1 source file with javac [debug target 11] to target/classes
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ queue ---
[INFO] skip non existing resourceDirectory /home/user/activemq-artemis-examples/examples/features/standard/queue/src/test/resources
[INFO] Copying 3 resources from target/maven-shared-archive-resources to target/test-classes
[INFO]
[INFO] --- compiler:3.11.0:testCompile (default-testCompile) @ queue ---
[INFO] No sources to compile
[INFO]
[INFO] --- surefire:2.22.2:test (default-test) @ queue ---
[INFO]
[INFO] --- jar:3.3.0:jar (default-jar) @ queue ---
[INFO] Building jar: /home/user/activemq-artemis-examples/examples/features/standard/queue/target/queue-2.32.0.jar
[INFO]
[INFO] --- site:3.12.1:attach-descriptor (attach-descriptor) @ queue ---
[INFO] Skipping because packaging 'jar' is not pom.
[INFO]
[INFO] --- source:3.3.0:jar-no-fork (attach-sources) @ queue ---
[INFO] Building jar: /home/user/activemq-artemis-examples/examples/features/standard/queue/target/queue-2.32.0-sources.jar
[INFO]
[INFO] --- artemis:2.32.0:create (create) @ queue ---
[INFO]
[INFO] --- artemis:2.32.0:cli (start) @ queue ---
[INFO] awaiting server to start
server-out: _ _ _
server-out: / \ ____| |_ ___ __ __(_) _____
server-out: / _ \| _ \ __|/ _ \ \/ | |/ __/
server-out: / ___ \ | \/ |_/ __/ |\/| | |\___ \
server-out: /_/ \_\| \__\____|_| |_|_|/___ /
server-out: Apache ActiveMQ Artemis 2.32.0
server-out:
server-out:
[INFO] awaiting server to start
server-out:2023-12-14 14:33:06,314 INFO [org.apache.activemq.artemis.integration.bootstrap] AMQ101000: Starting ActiveMQ Artemis Server version 2.32.0
server-out:2023-12-14 14:33:06,339 INFO [org.apache.activemq.artemis.core.server] AMQ221000: primary Message Broker is starting with configuration Broker Configuration (clustered=false,journalDirectory=./data/journal,bindingsDirectory=./data/bindings,largeMessagesDirectory=./data/large-messages,pagingDirectory=./data/paging)
server-out:2023-12-14 14:33:06,354 INFO [org.apache.activemq.artemis.core.server] AMQ221012: Using AIO Journal
server-out:2023-12-14 14:33:06,380 INFO [org.apache.activemq.artemis.core.server] AMQ221057: Global Max Size is being adjusted to 1/2 of the JVM max size (-Xmx). being defined as 1073741824
server-out:2023-12-14 14:33:06,391 INFO [org.apache.activemq.artemis.core.server] AMQ221043: Protocol module found: [artemis-server]. Adding protocol support for: CORE
server-out:2023-12-14 14:33:06,391 INFO [org.apache.activemq.artemis.core.server] AMQ221043: Protocol module found: [artemis-amqp-protocol]. Adding protocol support for: AMQP
server-out:2023-12-14 14:33:06,391 INFO [org.apache.activemq.artemis.core.server] AMQ221043: Protocol module found: [artemis-hornetq-protocol]. Adding protocol support for: HORNETQ
server-out:2023-12-14 14:33:06,392 INFO [org.apache.activemq.artemis.core.server] AMQ221043: Protocol module found: [artemis-mqtt-protocol]. Adding protocol support for: MQTT
server-out:2023-12-14 14:33:06,392 INFO [org.apache.activemq.artemis.core.server] AMQ221043: Protocol module found: [artemis-openwire-protocol]. Adding protocol support for: OPENWIRE
server-out:2023-12-14 14:33:06,392 INFO [org.apache.activemq.artemis.core.server] AMQ221043: Protocol module found: [artemis-stomp-protocol]. Adding protocol support for: STOMP
server-out:2023-12-14 14:33:06,411 INFO [org.apache.activemq.artemis.core.server] AMQ221034: Waiting indefinitely to obtain primary lock
server-out:2023-12-14 14:33:06,411 INFO [org.apache.activemq.artemis.core.server] AMQ221035: Primary Server Obtained primary lock
server-out:2023-12-14 14:33:06,450 INFO [org.apache.activemq.artemis.core.server] AMQ221080: Deploying address DLQ supporting [ANYCAST]
server-out:2023-12-14 14:33:06,454 INFO [org.apache.activemq.artemis.core.server] AMQ221003: Deploying ANYCAST queue DLQ on address DLQ
server-out:2023-12-14 14:33:06,476 INFO [org.apache.activemq.artemis.core.server] AMQ221080: Deploying address ExpiryQueue supporting [ANYCAST]
server-out:2023-12-14 14:33:06,476 INFO [org.apache.activemq.artemis.core.server] AMQ221003: Deploying ANYCAST queue ExpiryQueue on address ExpiryQueue
server-out:2023-12-14 14:33:06,681 INFO [org.apache.activemq.artemis.core.server] AMQ221020: Started EPOLL Acceptor at 0.0.0.0:61616 for protocols [CORE,MQTT,AMQP,STOMP,HORNETQ,OPENWIRE]
server-out:2023-12-14 14:33:06,683 INFO [org.apache.activemq.artemis.core.server] AMQ221020: Started EPOLL Acceptor at 0.0.0.0:5445 for protocols [HORNETQ,STOMP]
server-out:2023-12-14 14:33:06,685 INFO [org.apache.activemq.artemis.core.server] AMQ221020: Started EPOLL Acceptor at 0.0.0.0:5672 for protocols [AMQP]
server-out:2023-12-14 14:33:06,687 INFO [org.apache.activemq.artemis.core.server] AMQ221020: Started EPOLL Acceptor at 0.0.0.0:1883 for protocols [MQTT]
server-out:2023-12-14 14:33:06,689 INFO [org.apache.activemq.artemis.core.server] AMQ221020: Started EPOLL Acceptor at 0.0.0.0:61613 for protocols [STOMP]
server-out:2023-12-14 14:33:06,690 INFO [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
server-out:2023-12-14 14:33:06,690 INFO [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.32.0 [0.0.0.0, nodeID=b20d82dd-9a8d-11ee-a56d-000c2997e711]
[INFO] Server started
[INFO]
[INFO] --- artemis:2.32.0:runClient (runClient) @ queue ---
Sent message: This is a text message
Received message: This is a text message
[INFO]
[INFO] --- artemis:2.32.0:stop (stop) @ queue ---
server-out:2023-12-14 14:33:08,295 INFO [org.apache.activemq.artemis.core.server] AMQ221002: Apache ActiveMQ Artemis Message Broker version 2.32.0 [b20d82dd-9a8d-11ee-a56d-000c2997e711] stopped, uptime 1.969 seconds
server-out:Server stopped!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.845 s
[INFO] Finished at: 2023-12-14T14:33:08Z
[INFO] ------------------------------------------------------------------------
此清單包含 範例儲存庫中 Artemis 的一些範例預覽,如需更多範例,請參閱儲存庫。
2. 應用程式層故障轉移
Apache ActiveMQ Artemis 也支援應用程式層故障轉移,這在伺服器端未啟用複寫的情況下很有用。
透過應用程式層故障轉移,由應用程式向 Apache ActiveMQ Artemis 註冊一個 JMS ExceptionListener
,如果偵測到連線失敗,Apache ActiveMQ Artemis 會呼叫它。
然後,ExceptionListener
中的程式碼會在另一個節點上重新建立 JMS 連線、工作階段等,應用程式可以繼續。
應用程式層故障轉移是一種高可用性 (HA) 的替代方法。應用程式層故障轉移與自動故障轉移的不同之處在於,需要一些用戶端程式碼才能實作。此外,使用應用程式層故障轉移時,由於舊的工作階段物件會終止並建立一個新的工作階段物件,因此舊工作階段中任何未提交的工作都會遺失,而任何未確認的訊息都可能會重新傳遞。
3. 核心橋接器範例
bridge
範例示範了一個部署在一個伺服器上的核心橋接器,該橋接器會取用來自本機佇列的訊息,並將其轉寄到第二個伺服器上的位址。
核心橋接器用於在遠端分離的任何兩個 Apache ActiveMQ Artemis 伺服器之間建立訊息流程。核心橋接器具有彈性,並且可以處理暫時的連線失敗,使其成為在不可靠的連線上轉寄 (例如 WAN) 的理想選擇。
4. 瀏覽器
browser
範例會顯示如何搭配 Apache ActiveMQ Artemis 使用 JMS QueueBrowser
。
佇列是 JMS 的標準部分,請參閱 JMS 2.0 規格以取得完整詳細資訊。
QueueBrowser
用於查看佇列上的訊息,而不會移除它們。它可以掃描整個佇列內容,或僅掃描符合訊息選取器的訊息。
5. Camel
camel
範例示範如何使用 Web 應用程式封存 (即 war
檔案) 建置 Camel 路由並將其部署到代理程式。
6. 客戶端啟動
client-kickoff
範例示範如何使用 JMX 管理 API 終止指定 IP 位址的用戶端連線。
7. 用戶端故障轉移監聽器
client-side-failoverlistener
範例示範如何註冊監聽器以監控故障轉移事件
8. 用戶端負載平衡
client-side-load-balancing
範例示範如何從單一 JMS Connection
建立的工作階段,可以建立到叢集的不同節點。換句話說,它示範了 Apache ActiveMQ Artemis 如何在整個叢集中進行工作階段的用戶端負載平衡。
9. 叢集化持久訂閱
此範例示範了叢集化的 JMS 持久訂閱
10. 叢集化分組
這與訊息分組範例類似,但示範了它在叢集上的運作方式。傳送到具有相同群組 ID 的不同節點的訊息,將會傳送到相同的節點和相同的消費者。
11. 叢集化佇列
clustered-queue
範例示範了部署在兩個不同節點上的佇列。這兩個節點已設定為形成叢集。然後,我們在每個節點上建立佇列的消費者,並且僅在其中一個節點上建立生產者。然後,我們透過生產者傳送一些訊息,並驗證兩個消費者都以輪流方式接收到已傳送的訊息。
12. 使用 JGroups 進行叢集化
clustered-jgroups
範例示範如何使用 JGroups 作為其基礎拓撲探索技術 (而非預設的 UDP 廣播) 來形成一個雙節點叢集。然後,我們在每個節點上建立佇列的消費者,並且僅在其中一個節點上建立生產者。然後,我們透過生產者傳送一些訊息,並驗證兩個消費者都以輪流方式接收到已傳送的訊息。
13. 叢集化獨立
clustered-standalone
範例示範如何設定並在同一台機器上啟動 3 個叢集節點以形成叢集。在每個節點上建立 JMS 主題的訂閱者,並且僅在其中一個節點上建立生產者。然後,我們透過生產者傳送一些訊息,並驗證 3 個訂閱者都收到所有已傳送的訊息。
14. 叢集靜態探索
這個範例示範如何使用連接器列表而不是 UDP 來設定叢集以進行探索。
15. 叢集靜態單向叢集
這個範例示範如何設定一個叢集,其中叢集連線是單向的,例如伺服器 A -> 伺服器 B -> 伺服器 C。
16. 叢集主題
clustered-topic
範例示範如何在兩個不同的節點上部署 JMS 主題。這兩個節點設定為形成一個叢集。然後,我們在每個節點上的主題上建立一個訂閱者,並且我們只在其中一個節點上建立一個生產者。接著,我們透過生產者傳送一些訊息,並驗證兩個訂閱者都收到所有傳送的訊息。
17. 訊息消費者速率限制
透過 Apache ActiveMQ Artemis,您可以指定 JMS MessageConsumer 消費訊息的最大速率。這可以在建立或部署連線工廠時指定。
如果指定此值,Apache ActiveMQ Artemis 將確保訊息永遠不會以高於指定速率的速率被消費。這是一種消費者節流的形式。
18. 死信
dead-letter
範例向您展示如何定義和處理死信訊息。訊息可能無法成功傳遞(例如,如果用於消費訊息的交易式會話被回滾)。
這樣的訊息會回到 JMS 目標,準備重新傳遞。然而,這意味著一個訊息可能被一次又一次地傳遞而沒有任何成功,並且仍然保留在目標中,阻塞系統。
為了防止這種情況,訊息系統定義了死信訊息:在指定的多次不成功的傳遞嘗試後,訊息會從目標中移除,而是放入一個死信目標,它們可以在這裡被消費以進行進一步的調查。
19. 延遲重新傳遞
delayed-redelivery
範例示範如何設定 Apache ActiveMQ Artemis 在訊息需要重新傳遞的情況下提供延遲重新傳遞。
在客戶端經常失敗或回滾的情況下,延遲重新傳遞通常很有用。如果沒有延遲重新傳遞,系統可能會進入「抖動」狀態,嘗試傳遞、客戶端回滾,然後快速重新嘗試傳遞,消耗寶貴的 CPU 和網路資源。
20. 轉向
Apache ActiveMQ Artemis 轉向允許訊息僅透過伺服器端定義的一些簡單設定,透明地從一個位址「轉向」或複製到另一個位址。
21. 持久訂閱
durable-subscription
範例向您展示如何使用 Apache ActiveMQ Artemis 的持久訂閱。持久訂閱是 JMS 的標準部分,請參閱 JMS 1.1 規範以了解完整詳細資訊。
與非持久訂閱不同,持久訂閱的主要功能是其中包含的訊息的持續時間長於訂閱者的生命週期 - 也就是說,即使它們上沒有活動的訂閱者,它們也會累積傳送到主題的訊息。它們也會在伺服器重新啟動或崩潰後倖存下來。請注意,為了使訊息被持久化,傳送給它們的訊息必須標記為持久訊息。
22. 嵌入式
embedded
範例展示如何使用 POJO 實例化並在沒有設定檔的情況下將訊息代理程式嵌入到您自己的程式碼中。
23. 嵌入式簡易
embedded-simple
範例展示如何使用常規的 Apache ActiveMQ Artemis XML 檔案將訊息代理程式嵌入到您自己的程式碼中。
24. 獨佔佇列
exlusive-queue
範例向您展示如何使用獨佔佇列,將所有訊息一次路由到僅一個消費者。
25. 訊息過期
expiry
範例向您展示如何定義和處理訊息過期。訊息可以在訊息系統中保留一段有限的時間,然後被移除。JMS 規範指出客戶端不應接收已過期的訊息(但它不保證不會發生這種情況)。
Apache ActiveMQ Artemis 可以為給定的佇列分配一個過期位址,以便在訊息過期時,它們會從佇列中移除並傳送到過期位址。這些「過期」訊息稍後可以從過期位址消費以進行進一步的檢查。
26. Apache ActiveMQ Artemis 資源配接器範例
這個範例展示如何建立 activemq 資源配接器 rar,以便在其他應用程式伺服器中部署
27. HTTP 傳輸
http-transport
範例向您展示如何設定 Apache ActiveMQ Artemis 使用 HTTP 協定作為其傳輸層。
28. 直接實例化 JMS 物件
通常,JMS 物件,例如 ConnectionFactory
、Queue
和 Topic
實例,在使用前會從 JNDI 查找。這些物件在 JMS 術語中稱為「受管理物件」。
然而,在某些情況下,JNDI 伺服器可能不可用或不被期望。為了來救援,Apache ActiveMQ Artemis 也支援在客戶端直接實例化這些受管理物件,因此您不必為 JMS 使用 JNDI。
29. 攔截器
Apache ActiveMQ Artemis 允許應用程式使用攔截器來連接到訊息傳遞系統。攔截器允許您在 Apache ActiveMQ Artemis 中處理各種訊息事件。
30. AMQP 攔截器
與 攔截器 範例類似,但使用 AMQP 攔截器。
31. 客戶端攔截器
與 攔截器 範例類似,但使用 客戶端(而不是訊息代理程式)上的攔截器。
32. MQTT 攔截器
與 攔截器 範例類似,但使用 MQTT 攔截器。
33. JAAS
jaas
範例向您展示如何設定 Apache ActiveMQ Artemis 使用 JAAS 進行安全性。Apache ActiveMQ Artemis 可以利用 JAAS 將使用者身分驗證和授權委派給現有的安全性基礎結構。
34. JMS 自動可關閉
jms-auto-closeable
範例展示了 JMS 2 中 JMS 資源(例如連線、會話和消費者)如何在發生錯誤時自動關閉。
35. JMS 完成接聽程式
jms-completion-listener
範例展示如何將訊息非同步傳送到 Apache ActiveMQ Artemis,並使用 CompletionListener 來接收訊息代理程式接收到訊息的通知。
36. JMS 橋接器
jms-bridge
範例展示如何在兩個獨立的 Apache ActiveMQ Artemis 伺服器之間設定橋接器。
37. JMS 環境
jms-context
範例展示如何使用 JMS 環境透過 Apache ActiveMQ Artemis 將訊息傳送和接收到/從位址/佇列。
JMSContext 是 JMS 2.0 的一部分,它將 JMS 連線和會話物件合併到一個簡單的介面中。
38. JMS 共用消費者
jms-shared-consumer
範例向您展示如何使用共用消費者來共用主題上的訂閱。在 JMS 1.1 中,這是不允許的,因此會導致延展性問題。在 JMS 2 中,此限制已被解除,因此您可以在不同的執行緒和連線之間共用負載。
39. JMX 管理
jmx
範例展示如何使用 JMX 管理 Apache ActiveMQ Artemis。
40. 大型訊息
large-message
範例向您展示如何使用 Apache ActiveMQ Artemis 傳送和接收非常大的訊息。Apache ActiveMQ Artemis 支援傳送和接收比客戶端或伺服器上可用的 RAM 容納量大得多的巨大訊息。實際上,訊息大小的唯一限制是您伺服器上的磁碟空間量。
大型訊息會持久儲存在伺服器上,因此它們可以在伺服器重新啟動後倖存下來。換句話說,Apache ActiveMQ Artemis 不僅僅是從傳送者到消費者執行簡單的套接字串流。
41. 最後值佇列
last-value-queue
範例向您展示如何定義和處理最後值佇列。最後值佇列是特殊的佇列,當具有相同最後值屬性值的較新訊息放入佇列時,它會捨棄所有訊息。換句話說,最後值佇列只保留最後的值。
最後值佇列的一個典型範例是用於股票價格,您只對特定股票的最新價格感興趣。
42. 管理
management
範例展示如何使用 JMS 訊息來呼叫伺服器上的管理操作,藉此管理 Apache ActiveMQ Artemis。
43. 管理通知
management-notification
範例展示如何使用 JMS 訊息從 Apache ActiveMQ Artemis 接收管理通知。當發生感興趣的事件時(建立或關閉消費者、建立或刪除位址、安全性驗證失敗等),Apache ActiveMQ Artemis 伺服器會發出管理通知。
44. 訊息計數器
message-counters
範例向您展示如何使用訊息計數器來取得佇列的訊息資訊。
45. 訊息群組
message-group
範例向您展示如何設定 Apache ActiveMQ Artemis 的訊息群組並使用它們。訊息群組允許您釘選訊息,以便它們僅由單一消費者消費。訊息群組是具有以下特徵的訊息集
-
訊息群組中的訊息共用相同的群組 ID,也就是說,它們具有相同的 JMSXGroupID 字串屬性值
-
接收群組第一個訊息的消費者將接收屬於該群組的所有訊息
46. 訊息群組
message-group2
範例向您展示如何透過連線工廠設定 Apache ActiveMQ Artemis 的訊息群組並使用它們。
47. 訊息優先權
訊息優先權可用於影響訊息的傳遞順序。
它可以由訊息的標準標頭欄位 'JMSPriority' 擷取,如 JMS 規範版本 1.1 中所定義。
該值為整數類型,範圍從 0(最低)到 9(最高)。當訊息被傳遞時,它們的優先權會影響它們的傳遞順序。優先權較高的訊息可能會在優先權較低的訊息之前傳遞。
優先權相等的訊息會依照它們到達目的地的自然順序傳遞。請參閱 JMS 1.1 規範以了解完整詳細資訊。
48. 多重容錯移轉
這個範例示範如何設定具有多個備份的主要伺服器
49. 多重故障轉移與故障回復
這個範例示範如何設定具有多個備份的主要伺服器,但強制故障回復到原始的主要伺服器
50. 無消費者緩衝
預設情況下,Apache ActiveMQ Artemis 消費者會在用戶端緩衝來自伺服器的訊息,然後您才能在用戶端實際接收它們。這樣做可以提高效能,因為否則每次您呼叫 receive() 或處理完 MessageListener onMessage()
方法中的最後一個訊息時,Apache ActiveMQ Artemis 用戶端都必須前往伺服器請求下一個訊息,如果有的話,該訊息隨後會被傳送到用戶端。
這將涉及每個訊息的網路往返,並降低效能。因此,預設情況下,Apache ActiveMQ Artemis 會預先提取訊息到每個消費者的緩衝區中。
在某些情況下,緩衝並不是理想的,而 Apache ActiveMQ Artemis 允許關閉它。這個範例示範了這一點。
51. 使用伺服器資料複寫的非交易故障轉移
non-transaction-failover
範例示範了兩個伺服器耦合為高可用性 (HA) 的即時備份對,以及一個使用非交易 JMS 會話的用戶端,在主要伺服器崩潰時從主要伺服器故障轉移到備份伺服器。
Apache ActiveMQ Artemis 實作了主要和備份伺服器之間用戶端連線的故障轉移。這是透過主要和備份節點之間狀態的複寫來實作的。當配置複寫且主要節點崩潰時,用戶端連線可以繼續並繼續傳送和接收訊息。當使用非交易會話時,無法保證訊息只傳遞一次,並且可能會遺失一些訊息或傳遞兩次。
52. OpenWire
Openwire
範例示範如何配置 Apache ActiveMQ Artemis 伺服器,使其與使用 open-wire 協定的 Apache ActiveMQ Artemis JMS 用戶端通訊。
您會找到 open wire 的佇列範例和聊天範例。virtual-topic-mapping 範例示範如何映射 ActiveMQ「Classic」虛擬主題命名慣例,以與 Artemis 地址模型搭配使用。
53. 分頁
paging
範例示範了即使伺服器在有限的 RAM 中運行,Apache ActiveMQ Artemis 如何支援巨大的佇列。它透過將訊息透明地分頁到磁碟,並在需要時取消分頁來實現這一點。
54. 預先確認
標準 JMS 支援三種確認模式: AUTO_ACKNOWLEDGE
、CLIENT_ACKNOWLEDGE
和 DUPS_OK_ACKNOWLEDGE
。有關這些模式的完整說明,請查閱 JMS 規格或任何 JMS 教學。
所有這些標準模式都涉及從用戶端向伺服器傳送確認。但是,在某些情況下,您真的不介意在發生故障時遺失訊息,因此最好在將訊息傳遞到用戶端之前在伺服器上確認訊息。這個範例示範了 Apache ActiveMQ Artemis 如何使用額外的確認模式來實現這一點。
55. 訊息生產者速率限制
producer-rte-limit
範例示範了如何使用 Apache ActiveMQ Artemis 指定 JMS 訊息生產者傳送訊息的最大傳送速率。
56. 佇列
一個示範佇列的簡單範例。
57. 訊息重新分配
queue-message-redistribution
範例示範了叢集中不同節點上部署的同名佇列之間的訊息重新分配。
58. 佇列請求者
一個示範 JMS 佇列請求者的簡單範例。
59. 具有訊息選擇器的佇列
queue-selector
範例示範如何使用佇列消費者的訊息選擇器來選擇性地消費訊息。
60. 重新附加節點範例
Reattach Node
範例示範了用戶端如何嘗試重新連線到同一伺服器,而不是立即失敗連線並通知任何用戶 ExceptionListener 物件。可以將 Apache ActiveMQ Artemis 配置為自動重試連線,並在網路再次可用時重新附加到伺服器。
61. 複寫故障回復範例
一個範例示範了在使用複寫時故障回復如何運作。在此範例中,主要伺服器會在更新時將其所有日誌複寫到備份伺服器。當主要伺服器崩潰時,備份伺服器會接管主要伺服器,並且用戶端會重新連線並從離開的地方繼續。
62. 複寫故障回復靜態範例
一個範例示範了在使用複寫時故障回復如何運作,但這次使用靜態連接器
63. 複寫多重故障轉移範例
一個範例示範了在使用複寫時如何配置多個備份
64. 複寫故障轉移交易範例
一個範例示範了在使用複寫時交易的故障轉移如何運作
65. 請求-回覆範例
一個示範 JMS 請求-回應模式的簡單範例。
66. 排程訊息
scheduled-message
範例示範如何使用 Apache ActiveMQ Artemis 將排程訊息傳送到地址/佇列。排程訊息在未來指定的時程之前不會傳遞。
67. 安全性
security
範例示範如何使用 Apache ActiveMQ Artemis 設定和使用基於角色的安全性。
68. 安全性 LDAP
security-ldap
範例示範如何使用 Apache ActiveMQ Artemis 和 Apache DS LDAP 伺服器的嵌入式執行個體來設定和使用基於角色的安全性。
69. 安全性 keycloak
security-keycloak
範例示範如何使用 Apache ActiveMQ Artemis 和外部 Keycloak 委派安全性。使用 Web 主控台的 OAuth 和 JMS 用戶端的直接存取。
70. 傳送確認
send-acknowledgements
範例示範如何使用 Apache ActiveMQ Artemis 的進階非同步傳送確認功能,以取得來自伺服器的確認,表示傳送已接收並在與傳送訊息分開的串流中處理。
71. 慢速消費者
slow-consumer
範例示範如何在 Apache ActiveMQ Artemis 中偵測慢速消費者並配置慢速消費者原則
72. Spring 整合
此範例示範如何使用 Apache ActiveMQ Artemis 的 Spring 整合來使用嵌入式 JMS。
73. SSL 傳輸
ssl-enabled
示範如何使用 Apache ActiveMQ Artemis 設定 SSL 以傳送和接收訊息。
74. 靜態訊息選擇器
static-selector
範例示範如何使用靜態訊息選擇器(篩選器)來配置 Apache ActiveMQ Artemis 核心佇列。
75. 使用 JMS 的靜態訊息選擇器
static-selector-jms
範例示範如何使用 JMS 來配置具有靜態訊息選擇器(篩選器)的 Apache ActiveMQ Artemis 佇列。
76. Stomp
stomp
範例示範如何配置 Apache ActiveMQ Artemis 伺服器以傳送和接收 Stomp 訊息。
77. Stomp1.1
stomp
範例示範如何配置 Apache ActiveMQ Artemis 伺服器以透過 Stomp 1.1 連線傳送和接收 Stomp 訊息。
78. Stomp1.2
stomp
範例示範如何配置 Apache ActiveMQ Artemis 伺服器以透過 Stomp 1.2 連線傳送和接收 Stomp 訊息。
79. Web Sockets 上的 Stomp
stomp-websockets
範例示範如何配置 Apache ActiveMQ Artemis 伺服器,以直接從 Web 瀏覽器(前提是它們支援 Web Sockets)傳送和接收 Stomp 訊息。
80. 對稱叢集
symmetric-cluster
範例示範了使用 Apache ActiveMQ Artemis 的對稱叢集設定。
Apache ActiveMQ Artemis 具有非常靈活的叢集功能,可讓您以許多不同的拓撲設定伺服器。如果您習慣於應用程式伺服器叢集,您可能熟悉的最常見拓撲是對稱叢集。
在對稱叢集中,叢集是同質的,也就是說,每個節點的配置都與其他每個節點相同,並且每個節點都連線到叢集中的每個其他節點。
81. 暫時佇列
一個示範如何使用 JMS 暫時佇列的簡單範例。
82. 主題
一個示範 JMS 主題的簡單範例。
83. 主題階層
Apache ActiveMQ Artemis 支援主題階層。使用主題階層,您可以使用萬用字元註冊訂閱者,該訂閱者將接收傳送到符合萬用字元的位址的任何訊息。
84. 主題選擇器 1
topic-selector-example1
範例示範如何將訊息傳送到 JMS 主題,並使用 Apache ActiveMQ Artemis 的選擇器訂閱它們。
85. 主題選擇器 2
topic-selector-example2
範例示範如何使用主題消費者的訊息選擇器來選擇性地消費訊息。
86. 交易故障轉移
transaction-failover
範例示範了兩個伺服器耦合為高可用性 (HA) 的即時備份對,以及一個使用交易 JMS 會話的用戶端,在主要伺服器崩潰時從主要伺服器故障轉移到備份伺服器。
Apache ActiveMQ Artemis 實作了主要和備份伺服器之間用戶端連線的故障轉移。這是透過伺服器之間共享日誌來實作的。當主要節點崩潰時,用戶端連線可以攜帶並繼續傳送和接收訊息。當使用交易會話時,保證訊息只傳遞一次。
87. 沒有交易的故障轉移
stop-server-failover
範例示範了當主要伺服器使用 JMS 非交易會話崩潰時,JMS 連線從一個節點故障轉移到另一個節點。
88. 交易會話
transactional
範例示範如何使用 Apache ActiveMQ Artemis 的交易會話。
89. XA 啟發法
xa-heuristic
範例展示如何透過 Apache ActiveMQ Artemis 管理介面做出 XA 啟發式決策。啟發式決策是指在 XA 交易分支準備完成後,單方面決定提交或回滾該交易分支。
90. XA 接收
xa-receive
範例展示在 Apache ActiveMQ Artemis 中,訊息接收在 XA 交易中的行為。
91. XA 發送
xa-send
範例展示在 Apache ActiveMQ Artemis 中,訊息發送在 XA 交易中的行為。