Skip to content

Martini ActiveMQ Classic Message Broker

Configuring ActiveMQ Classic

Before integrating Martini with ActiveMQ Classic, it's essential to configure the ActiveMQ settings to ensure that Martini can successfully connect to the ActiveMQ broker. This involves updating the ActiveMQ configuration file with the server details.

Steps to Configure ActiveMQ for Martini

  1. Locate the Configuration File: The first step involves identifying and accessing the activemq.xml file within your ActiveMQ Classic installation directory. This file is located in <martini-home>/conf/broker/.

  2. Edit the Configuration File: Open the activemq.xml file in a text editor. You'll need to specify the connection details that Martini will use to interact with ActiveMQ. This includes setting up the broker URL, client ID, and any other relevant connection parameters.

  3. Define the Broker URL: Update the broker URL to point to your ActiveMQ Classic instance. For example, if you're connecting to a local ActiveMQ broker, the URL might be tcp://localhost:61616.

  4. Set the Client ID: The client ID uniquely identifies Martini's connection to ActiveMQ. Ensure this is set to a unique value within the activemq.xml file.

  5. Save the Configuration: After making the necessary changes, save the activemq.xml file.

  6. Restart ActiveMQ: To apply the changes, restart your ActiveMQ Classic broker.

  7. Verify the Connection: Ensure that Martini can connect to ActiveMQ by observing the logs or testing the connection through a simple messaging operation.

Next Steps: Configuring Transport Connectors

After setting up the initial connection configuration, proceed with configuring transport connectors as previously outlined. This includes adding, editing, or removing transport connectors to suit your integration needs with Martini.

  • Follow the steps in the previous sections to add, edit, or remove transport connectors in the activemq-embedded.xml or activemq.xml file.
  • Restart Martini after making changes to transport connectors to ensure that the new settings are applied.

Testing and Validation

Once the configuration is complete, test the connection between Martini and ActiveMQ Classic by sending and receiving messages. Use the MQTT, STOMP, and AMQP protocols to ensure that Martini can interact with ActiveMQ across different transport protocols.

ActiveMQ Transport Connectors

Transport connectors in ActiveMQ are essential for defining the protocols clients use to communicate with brokers. Martini's embedded ActiveMQ broker supports various transport protocols, allowing for extensive connectivity options beyond the default configurations.

Default Transports

Out-of-the-box, Martini comes equipped with TCP and VM transport connectors, catering to most basic connectivity needs without requiring additional configuration.

Adding Additional Transports

To accommodate a wider range of client connectivity options, you may need to add support for other protocols such as AMQP, MQTT, and STOMP. These protocols cater to different use cases and client types, providing flexibility in how your applications communicate with the ActiveMQ broker.

Configuring Transport Connectors

Configuring transport connectors involves modifying the ActiveMQ broker's XML configuration file. This file is pivotal for adding, modifying, or removing transport connectors to meet your integration needs.

Location of the Configuration File

The XML configuration file for the ActiveMQ broker is located within the Martini installation directory, specifically at:

1
<martini-home>/conf/broker/activemq-embedded.xml

Modifying the Configuration File

  1. Access the Configuration File: Navigate to the file path mentioned above to access the activemq-embedded.xml file.
  2. Edit the File: Use a text editor to modify the XML file. To add a new transport connector, locate the <transportConnectors> element and append a new <transportConnector> element with the appropriate attributes for the protocol you wish to add.
  3. Save Your Changes: After making the necessary adjustments, save the file. Changes will take effect upon restarting the Martini instance.

Example: Adding an MQTT Transport Connector

To add an MQTT transport connector, you would insert a snippet like the following into the activemq-embedded.xml file:

1
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883"/>

This example configures an MQTT transport connector listening on all network interfaces at port 1883.

Adding a Transport Connector

Integrating additional transport connectors enhances Martini's capability to communicate with various clients using different protocols. This section provides a step-by-step guide on how to add a new transport connector to Martini's embedded ActiveMQ instance.

Important Note

This configuration pertains exclusively to the embedded ActiveMQ instance within Martini. Standalone instances of ActiveMQ Classic and ActiveMQ Artemis are configured independently and do not require adjustments through Martini.

Steps to Add a New Transport Connector

1. Locate the Configuration File

Begin by opening the activemq-embedded.xml file located in <martini-home>/conf/broker/. This XML file contains the configuration for the embedded ActiveMQ instance, including the transport connectors.

2. Modify the Transport Connectors

Within the activemq-embedded.xml file, search for the transportConnectors property of the broker bean. This section configures the transport connectors.

The configuration snippet below shows the structure of the transportConnectors property:

1
2
3
4
5
6
7
8
9
<bean id="broker" class="org.apache.activemq.xbean.XBeanBrokerService">
    <!-- Other configurations -->
    <property name="transportConnectors">
        <list>
            <!-- Existing transport connectors -->
        </list>
    </property>
    <!-- Other configurations -->
</bean>

To add a new transport connector, append a new TransportConnector bean to the list. Each connector requires a uri property to define its connection URI, and an optional name attribute to identify the connector.

Example of adding a VM transport connector:

1
2
3
<bean class="org.apache.activemq.broker.TransportConnector">
    <property name="uri" value="vm://localhost" />
</bean>

To add an MQTT transport connector, for example, your modified section would look like this:

1
2
3
4
5
6
7
8
9
<property name="transportConnectors">
    <list>
        <!-- Existing transport connectors -->
        <!-- MQTT transport connector -->
        <bean class="org.apache.activemq.broker.TransportConnector">
            <property name="uri" value="mqtt://localhost:1883" />
        </bean>
    </list>
</property>

3. Utilize Pre-populated Configurations

For convenience, activemq-embedded.xml includes pre-populated samples for common transports like MQTT, NIO, and AMQP. To activate one, simply uncomment the desired transport connector entry. These samples provide a quick way to configure new connectors based on common use cases.

4. Apply the Changes

After adding or modifying the transport connector(s), save your changes to the activemq-embedded.xml file.

5. Restart Martini

For the new or updated transport connectors to take effect, restart the Martini server. This ensures that the embedded ActiveMQ instance applies your configuration changes.

Editing a Transport Connector

Modifying the settings of an existing transport connector allows you to adjust its configurations, such as changing the port number or protocol specifics. This process involves editing the properties of the TransportConnector bean in the activemq-embedded.xml file.

Steps for Editing

1. Open the Configuration File: Navigate to the activemq-embedded.xml file within the <martini-home>/conf/broker/ directory.

2. Locate the Connector: Find the transportConnectors property list where the connector is defined.

3. Modify the Connector: Edit the properties of the TransportConnector bean as required. For instance, to change the port of an MQTT connector:

1
2
3
4
5
6
7
8
9
<property name="transportConnectors">
    <list>
        <!-- MQTT transport connector -->
        <bean class="org.apache.activemq.broker.TransportConnector">
            <property name="name" value="mqtt" />
            <property name="uri" value="mqtt://localhost:1884" /> <!-- Port changed to 1884 -->
        </bean>
    </list>
</property>

4. Save and Restart: After making the necessary changes, save the file and restart the Martini instance for the changes to take effect.

Removing a Transport Connector

Removing or disabling a transport connector can be necessary for security reasons, to simplify your environment, or to retire unused protocols.

Steps for Removal

  1. Open the Configuration File: Access the activemq-embedded.xml file as mentioned above.

  2. Locate and Remove/Comment Out the Connector: To remove a connector, delete its TransportConnector bean from the list or comment it out if you might want to re-enable it later.

Example of commenting out a connector:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<property name="transportConnectors">
    <list>
        <!-- MQTT transport connector (disabled)
        <bean class="org.apache.activemq.broker.TransportConnector">
            <property name="name" value="mqtt" />
            <property name="uri" value="mqtt://localhost:1884" />
        </bean>
        -->
    </list>
</property>
  1. Save and Restart: Save the file and restart the Martini instance to apply the changes.

Configuring a Transport Connector

Configuring a transport connector involves adjusting its settings to meet your specific requirements, such as security settings, protocol-specific configurations, and performance tuning.

Additional Information

  • The configuration instructions provided below are applicable for Linux environments, with the exception of the AMQP protocol configurations.
  • These configurations are relevant for both the embedded ActiveMQ instance in Martini and standalone instances of ActiveMQ Classic and ActiveMQ Artemis.

Example Configuration Steps

1. Access the Configuration File: Edit the activemq-embedded.xml or the corresponding configuration file for standalone ActiveMQ instances.

2. Configure the Connector: Modify the connector's properties according to your requirements. This might include setting up SSL/TLS, adjusting client connection limits, or configuring protocol-specific options.

For example, configuring an MQTT connector for better security might involve adding SSL/TLS properties to the connector's configuration.

3. Refer to Protocol Documentation: For detailed configuration options for each protocol (e.g., AMQP, MQTT, STOMP), consult the official ActiveMQ documentation or the protocol's specific documentation to understand all available settings and best practices.

4. Save and Restart: After configuring the connector as needed, save your changes and restart the Martini instance or ActiveMQ service.

Protocol Testing

MQTT

Installing the MQTT Client

To interact with the MQTT protocol, first, install the MQTT client on your system. ActiveMQ serves as the MQTT broker, so only the client is needed.

  • Installation Command:
    1
    sudo apt install mosquitto-clients -y
    

Subscribing to a Topic

To subscribe to a topic and listen for messages:

1
mosquitto_sub -h [address] -t [topic]
Replace [address] with your broker's address and [topic] with the desired topic name.

Publishing a Message

To publish a message to a topic from the command line, ensuring Martini can send and receive messages:

1
mosquitto_pub -h [address] -t [topic] -m "[message]"
Adjust [address], [topic], and [message] accordingly.

STOMP

Installing a STOMP Client

STOMP testing requires a client installation on your system:

  • Installation Command:
    1
    sudo apt install python3-stomp
    

Subscribing to a Queue

To subscribe to a Martini-created queue:

1
stomp -H [address] -P [port] -L [queue]
The default port for STOMP is 61613. Replace [address], [port], and [queue] with your specific details.

Publishing a Message via Telnet

To test Martini's ability to receive messages through STOMP, use the following telnet commands:

  1. Open a telnet session:
    1
    telnet [address] [port]
    
  2. Connect to the STOMP server:
    1
    2
    3
    4
    5
    6
    7
    CONNECT
    accept-version:1.2
    host:[address]
    login:[username]
    passcode:[password]
    
    ^@
    
  3. Send a message to the queue:
    1
    2
    3
    4
    5
    6
    SEND
    destination:[queue]
    content-type:text/plain
    receipt:123
    
    [message]^@
    
    Replace placeholders with appropriate values. ^@ represents a null byte, indicating the end of a command in telnet.

AMQP

Configuring AMQP

For ActiveMQ, enhance the AMQP transport connector by appending &transport.transformer=jms to its URI in the activemq.xml file located at <installation dir>/conf/.

  • For Artemis: Follow the specific configuration steps for Artemis if applicable.

Testing with a Java-based AMQP Client

Utilize a simple Java-based client to publish and subscribe to messages through AMQP. Configure a Martini service to process incoming messages and verify the reception of messages through the console output.

Notes

  • MQTT and STOMP: Focus on topic and queue messaging, respectively.
  • AMQP Support: ActiveMQ supports AMQP 1.0, distinct from the AMQP 0-9-1 protocol used by RabbitMQ. Ensure compatibility when integrating with other services.

Before Migrating

If transitioning from an embedded ActiveMQ instance to a standalone version, remember to manually transfer your transport connector configurations to preserve your setup.