2015-04-27 17:32:30 -04:00
|
|
|
# Embedding Apache ActiveMQ Artemis
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2018-03-09 10:07:38 -05:00
|
|
|
Apache ActiveMQ Artemis is designed as set of simple Plain Old Java Objects
|
2020-06-17 13:10:57 -04:00
|
|
|
(POJOs). This means Apache ActiveMQ Artemis can be instantiated and run in any
|
2018-03-09 10:07:38 -05:00
|
|
|
dependency injection framework such as Spring or Google Guice. It also means
|
|
|
|
that if you have an application that could use messaging functionality
|
2020-06-17 13:10:57 -04:00
|
|
|
internally then it can *directly instantiate* Apache ActiveMQ Artemis clients
|
2018-03-09 10:07:38 -05:00
|
|
|
and servers in its own application code to perform that functionality. We call
|
|
|
|
this *embedding* Apache ActiveMQ Artemis.
|
|
|
|
|
|
|
|
Examples of applications that might want to do this include any application
|
|
|
|
that needs very high performance, transactional, persistent messaging but
|
|
|
|
doesn't want the hassle of writing it all from scratch.
|
|
|
|
|
2020-06-17 13:10:57 -04:00
|
|
|
Embedding Apache ActiveMQ Artemis can be done in very few easy steps -
|
|
|
|
supply a `broker.xml` on the classpath or instantiate the configuration object,
|
|
|
|
instantiate the server, start it, and you have a Apache ActiveMQ Artemis running
|
|
|
|
in your JVM. It's as simple and easy as that.
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2020-06-17 13:10:57 -04:00
|
|
|
## Embedding with XML configuration
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2018-03-09 10:07:38 -05:00
|
|
|
The simplest way to embed Apache ActiveMQ Artemis is to use the embedded
|
2020-06-17 13:10:57 -04:00
|
|
|
wrapper class and configure Apache ActiveMQ Artemis through `broker.xml`.
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2020-06-17 13:10:57 -04:00
|
|
|
Here's a simple example `broker.xml`:
|
|
|
|
|
|
|
|
```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>
|
|
|
|
```
|
2014-12-04 10:25:29 -05:00
|
|
|
|
|
|
|
|
2018-03-08 15:46:38 -05:00
|
|
|
```java
|
2015-04-27 17:32:30 -04:00
|
|
|
import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ;
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2014-12-11 07:17:29 -05:00
|
|
|
...
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2014-12-11 07:17:29 -05:00
|
|
|
EmbeddedActiveMQ embedded = new EmbeddedActiveMQ();
|
|
|
|
embedded.start();
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2018-03-09 10:07:38 -05:00
|
|
|
ServerLocator serverLocator = ActiveMQClient.createServerLocator("vm://0");
|
|
|
|
ClientSessionFactory factory = serverLocator.createSessionFactory();
|
2014-12-11 07:17:29 -05:00
|
|
|
ClientSession session = factory.createSession();
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2020-06-17 13:10:57 -04:00
|
|
|
session.createQueue(new QueueConfiguration("example"));
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2014-12-11 07:17:29 -05:00
|
|
|
ClientProducer producer = session.createProducer("example");
|
|
|
|
ClientMessage message = session.createMessage(true);
|
|
|
|
message.getBody().writeString("Hello");
|
|
|
|
producer.send(message);
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2014-12-11 07:17:29 -05:00
|
|
|
session.start();
|
|
|
|
ClientConsumer consumer = session.createConsumer("example");
|
|
|
|
ClientMessage msgReceived = consumer.receive();
|
|
|
|
System.out.println("message = " + msgReceived.getBody().readString());
|
|
|
|
session.close();
|
|
|
|
```
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2018-03-09 10:07:38 -05:00
|
|
|
The `EmbeddedActiveMQ` class has a few additional setter methods that allow you
|
|
|
|
to specify a different config file name as well as other properties. See the
|
|
|
|
javadocs for this class for more details.
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2020-06-17 13:10:57 -04:00
|
|
|
## Embedding with programmatic configuration
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2020-06-17 13:10:57 -04:00
|
|
|
You can follow this step-by-step guide to programmatically embed a broker
|
|
|
|
instance.
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2020-06-17 13:10:57 -04:00
|
|
|
Create the `Configuration` object. This contains configuration information for
|
2018-03-09 10:07:38 -05:00
|
|
|
an Apache ActiveMQ Artemis instance. The setter methods of this class allow you
|
2020-06-17 13:10:57 -04:00
|
|
|
to programmatically set configuration options as described in the [Server
|
2018-03-09 10:07:38 -05:00
|
|
|
Configuration](configuration-index.md) section.
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2018-03-09 10:07:38 -05:00
|
|
|
The acceptors are configured through `Configuration`. Just add the acceptor URL
|
|
|
|
the same way you would through the main configuration file.
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2018-03-08 15:46:38 -05:00
|
|
|
```java
|
2015-04-27 17:32:30 -04:00
|
|
|
import org.apache.activemq.artemis.core.config.Configuration;
|
|
|
|
import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2014-12-11 07:17:29 -05:00
|
|
|
...
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2014-12-11 07:17:29 -05:00
|
|
|
Configuration config = new ConfigurationImpl();
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2018-03-09 10:07:38 -05:00
|
|
|
config.addAcceptorConfiguration("in-vm", "vm://0");
|
|
|
|
config.addAcceptorConfiguration("tcp", "tcp://127.0.0.1:61616");
|
2014-12-11 07:17:29 -05:00
|
|
|
```
|
2014-12-04 10:25:29 -05:00
|
|
|
|
|
|
|
You need to instantiate an instance of
|
2015-04-29 13:20:31 -04:00
|
|
|
`org.apache.activemq.artemis.api.core.server.embedded.EmbeddedActiveMQ` and add
|
2014-12-04 10:25:29 -05:00
|
|
|
the configuration object to it.
|
|
|
|
|
2018-03-08 15:46:38 -05:00
|
|
|
```java
|
2015-04-27 17:32:30 -04:00
|
|
|
import org.apache.activemq.artemis.api.core.server.ActiveMQ;
|
|
|
|
import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ;
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2014-12-11 07:17:29 -05:00
|
|
|
...
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2014-12-11 07:17:29 -05:00
|
|
|
EmbeddedActiveMQ server = new EmbeddedActiveMQ();
|
|
|
|
server.setConfiguration(config);
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2014-12-11 07:17:29 -05:00
|
|
|
server.start();
|
|
|
|
```
|
2014-12-04 10:25:29 -05:00
|
|
|
|
|
|
|
You also have the option of instantiating `ActiveMQServerImpl` directly:
|
|
|
|
|
2018-03-08 15:46:38 -05:00
|
|
|
```java
|
2014-12-11 07:17:29 -05:00
|
|
|
ActiveMQServer server = new ActiveMQServerImpl(config);
|
|
|
|
server.start();
|
|
|
|
```
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2014-12-11 07:17:29 -05:00
|
|
|
## Dependency Frameworks
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2018-03-09 10:07:38 -05:00
|
|
|
You may also choose to use a dependency injection framework such as The Spring
|
|
|
|
Framework. See [Spring Integration](spring-integration.md) for more details on
|
2015-04-27 17:32:30 -04:00
|
|
|
Spring and Apache ActiveMQ Artemis.
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2018-03-09 10:07:38 -05:00
|
|
|
Apache ActiveMQ Artemis standalone uses
|
|
|
|
[Airline](https://github.com/airlift/airline) to bootstrap.
|