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();