Apache ActiveMQ Artemis 被设计为一组简单的普通 Java 对象 (POJO)。这意味着 Apache ActiveMQ Artemis 可以实例化并在任何依赖注入框架中运行,例如 Spring 或 Google Guice。这也意味着,如果您有一个应用程序需要在内部使用消息功能,那么它可以*直接实例化* Apache ActiveMQ Artemis 客户端和服务器在其自己的应用程序代码中以执行该功能。我们称之为*嵌入* Apache ActiveMQ Artemis。

想要这样做的一些应用程序示例包括任何需要非常高性能、事务性、持久消息但不想从头开始编写所有内容的应用程序。

嵌入 Apache ActiveMQ Artemis 可以通过几个简单的步骤完成 - 在类路径上提供一个 broker.xml 或实例化配置对象,实例化服务器,启动它,您就拥有在 JVM 中运行的 Apache ActiveMQ Artemis。就这么简单易行。

1. 使用 XML 配置嵌入

嵌入 Apache ActiveMQ Artemis 最简单的方法是使用嵌入式包装器类,并通过 broker.xml 配置 Apache ActiveMQ Artemis。

这是一个简单的 broker.xml 示例

<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:activemq" xsi:schemaLocation="urn:activemq /schema/artemis-server.xsd">
   <core xmlns="urn:activemq:core">

      <persistence-enabled>false</persistence-enabled>

      <security-enabled>false</security-enabled>

      <acceptors>
         <acceptor name="in-vm">vm://0</acceptor>
      </acceptors>
   </core>
</configuration>
import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ;

...

EmbeddedActiveMQ embedded = new EmbeddedActiveMQ();
embedded.start();

ServerLocator serverLocator =  ActiveMQClient.createServerLocator("vm://0");
ClientSessionFactory factory =  serverLocator.createSessionFactory();
ClientSession session = factory.createSession();

session.createQueue(QueueConfiguration.of("example"));

ClientProducer producer = session.createProducer("example");
ClientMessage message = session.createMessage(true);
message.getBody().writeString("Hello");
producer.send(message);

session.start();
ClientConsumer consumer = session.createConsumer("example");
ClientMessage msgReceived = consumer.receive();
System.out.println("message = " + msgReceived.getBody().readString());
session.close();

EmbeddedActiveMQ 类还有一些额外的 setter 方法,允许您指定不同的配置文件名以及其他属性。有关更多详细信息,请参阅该类的 javadoc。

2. 使用编程方式配置嵌入

您可以按照本分步指南以编程方式嵌入代理实例。

创建 Configuration 对象。它包含 Apache ActiveMQ Artemis 实例的配置信息。此类的 setter 方法允许您以编程方式设置配置选项,如 服务器配置 部分所述。

接收器通过 Configuration 配置。只需添加接收器 URL,就像您在主配置文件中添加一样。

import org.apache.activemq.artemis.core.config.Configuration;
import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;

...

Configuration config = new ConfigurationImpl();

config.addAcceptorConfiguration("in-vm", "vm://0");
config.addAcceptorConfiguration("tcp", "tcp://127.0.0.1:61616");

您需要实例化一个 org.apache.activemq.artemis.api.core.server.embedded.EmbeddedActiveMQ 实例,并将配置对象添加到其中。

import org.apache.activemq.artemis.api.core.server.ActiveMQ;
import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ;

...

EmbeddedActiveMQ server = new EmbeddedActiveMQ();
server.setConfiguration(config);

server.start();

您还可以选择直接实例化 ActiveMQServerImpl

ActiveMQServer server = new ActiveMQServerImpl(config);
server.start();