Maven Coordinates
To enable JMS Connector add the following dependency to your project’s pom.xml (see Managing Dependencies).
<dependency>
<groupId>io.helidon.messaging.jms</groupId>
<artifactId>helidon-messaging-jms</artifactId>
</dependency>content_copy
Reactive JMS Connector
Connecting streams to JMS with Reactive Messaging couldn’t be easier.
Explicit config with config builder
Example of consuming from JMS:
Channel<String> fromJms = Channel.<String>builder()
.name("from-jms")
.publisherConfig(JmsConnector.configBuilder()
.jndiInitialFactory(ActiveMQInitialContextFactory.class)
.jndiProviderUrl("tcp://127.0.0.1:61616")
.type(JmsConfigBuilder.Type.QUEUE)
.destination("se-example-queue-1")
.build()
)
.build();
JmsConnector jmsConnector = JmsConnector.create();
Messaging messaging = Messaging.builder()
.connector(jmsConnector)
.listener(fromJms, payload -> {
System.out.println("Jms says: " + payload);
})
.build()
.start();content_copy
- Prepare a channel for connecting jms connector with specific publisher configuration → listener
- Channel → connector mapping is automatic when using JmsConnector.configBuilder()
- Prepare JMS connector, can be used by any channel
Example of producing to JMS:
Channel<String> toJms = Channel.<String>builder()
.subscriberConfig(JmsConnector.configBuilder()
.jndiInitialFactory(ActiveMQInitialContextFactory.class)
.jndiProviderUrl("tcp://127.0.0.1:61616")
.type(JmsConfigBuilder.Type.QUEUE)
.destination("se-example-queue-1")
.build()
).build();
JmsConnector jmsConnector = JmsConnector.create();
messaging = Messaging.builder()
.publisher(toJms, Multi.just("test1", "test2").map(Message::of))
.connector(jmsConnector)
.build()
.start();content_copy
- Prepare a channel for connecting jms connector with specific publisher configuration → listener
- Channel → connector mapping is automatic when using JmsConnector.configBuilder()
- Prepare JMS connector, can be used by any channel
Implicit Helidon Config
Example of connector config:
mp.messaging:
incoming.from-jms:
connector: helidon-jms
destination: se-example-queue-1
session-group-id: session-group-1
type: queue
outgoing.to-jms:
connector: helidon-jms
destination: se-example-queue-1
type: queue
connector:
helidon-jms:
jndi:
jms-factory: ConnectionFactory
env-properties:
java.naming.factory.initial: org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url: tcp://127.0.0.1:61616content_copy
Example of consuming from JMS:
Config config = Config.create();
Channel<String> fromJms = Channel.create("from-jms");
JmsConnector jmsConnector = JmsConnector.create();
Messaging messaging = Messaging.builder()
.config(config)
.connector(jmsConnector)
.listener(fromJms, payload -> {
System.out.println("Jms says: " + payload);
})
.build()
.start();content_copy
- Prepare JMS connector, can be used by any channel
Example of producing to JMS:
Config config = Config.create();
Channel<String> toJms = Channel.create("to-jms");
JmsConnector jmsConnector = JmsConnector.create();
messaging = Messaging.builder()
.config(config)
.publisher(toJms, Multi.just("test1", "test2").map(Message::of))
.connector(jmsConnector)
.build()
.start();content_copy
- Prepare JMS connector, can be used by any channel
Don’t forget to check out the examples with pre-configured ActiveMQ docker image, for easy testing: