Apache ActiveMQ Artemis 被設計為一組簡單的 Plain Old Java Objects(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 方法可讓您以程式化的方式設定配置選項,如 伺服器配置 區段所述。
Acceptors 是透過 Configuration
配置的。只需以與透過主要配置檔案相同的方式新增 acceptor 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();