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 verifymvn 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 服务器之间创建消息流。核心桥接具有弹性,能够应对临时连接故障,因此是通过不可靠连接(例如广域网)进行转发的理想选择。

4. 浏览器

browser 示例展示了如何使用 JMS QueueBrowser 与 Apache ActiveMQ Artemis 进行交互。

队列是 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 对象(例如 ConnectionFactoryQueueTopic 实例)在被客户端代码使用之前从 JNDI 中查找。这些对象在 JMS 术语中被称为“管理对象”。

但是,在某些情况下,可能无法使用或需要 JNDI 服务器。为了解决此问题,Apache ActiveMQ Artemis 还支持在客户端侧直接实例化这些管理对象,因此您不必使用 JNDI 来使用 JMS。

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 来通知 Broker 接收它。

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 支持发送和接收非常大的消息,远远大于客户端或服务器上可用内存的大小。实际上,消息大小的唯一限制是服务器上的磁盘空间大小。

大消息会持久化到服务器上,以便它们能够在服务器重启后保留。换句话说,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 服务器与使用 Openwire 协议的 Apache ActiveMQ Artemis JMS 客户端通信。

您将找到 Openwire 的队列示例和聊天示例。virtual-topic-mapping 示例展示了如何映射 ActiveMQ "Classic" 虚拟主题命名约定以与 Artemis 地址模型一起使用。

53. 分页

paging 示例展示了 Apache ActiveMQ Artemis 如何支持巨大的队列,即使服务器在有限的 RAM 中运行。它通过透明地将消息分页到磁盘,并在需要时将其反分页来实现这一点。

54. 预确认

标准 JMS 支持三种确认模式:AUTO_ACKNOWLEDGECLIENT_ACKNOWLEDGEDUPS_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. 重新附加节点示例

重新附加节点示例展示了客户端如何尝试重新连接到同一服务器,而不是立即失败连接并通知任何用户 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 套接字的 Stomp

stomp-websockets 示例展示了如何配置 Apache ActiveMQ Artemis 服务器直接从 Web 浏览器(前提是它们支持 Web 套接字)发送和接收 Stomp 消息。

80. 对称集群

symmetric-cluster 示例演示了使用 Apache ActiveMQ Artemis 的对称集群设置。

Apache ActiveMQ Artemis 具有极其灵活的集群功能,允许您以多种不同的拓扑结构设置服务器。如果您习惯于应用程序服务器集群,您可能熟悉的最常见的拓扑结构是对称集群。

在对称集群中,集群是同构的,即每个节点的配置与其他所有节点相同,并且每个节点都连接到集群中的所有其他节点。

81. 临时队列

一个简单的示例,展示了如何使用 JMS 临时队列。

82. 主题

一个简单的示例,展示了 JMS 主题。

83. 主题层次结构

Apache ActiveMQ Artemis 支持主题层次结构。使用主题层次结构,您可以使用通配符注册订阅者,并且该订阅者将接收发送到与通配符匹配的地址的所有消息。

84. 主题选择器 1

topic-selector-example1 示例展示了如何使用 Apache ActiveMQ Artemis 将消息发送到 JMS 主题,并使用选择器订阅它们。

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 事务中消息发送的行为。