import ballerina/jms;
import ballerina/log;
jms:Connection conn = new ({
    initialContextFactory: "wso2mbInitialContextFactory",
    providerUrl: "amqp://admin:admin@carbon/carbon?brokerlist='tcp://localhost:5672'"
});
jms:Session jmsSession = new (conn, {
    acknowledgementMode: "AUTO_ACKNOWLEDGE"
});
endpoint jms:DurableTopicSubscriber subscriber {
    session: jmsSession,
    topicPattern: "BallerinaTopic",
    identifier: "sub1"
};
service<jms:Consumer> jmsListener bind subscriber {
    onMessage(endpoint consumer, jms:Message message) {
        string messageText = check message.getTextMessageContent();
        log:printInfo("Message : " + messageText);
  }
}

JMS Durable Topic Message Subscriber

Ballerina natively supports JMS. Here is an example where we create a simple JMS durable topic subscriber.

import ballerina/jms;
import ballerina/log;
jms:Connection conn = new ({
    initialContextFactory: "wso2mbInitialContextFactory",
    providerUrl: "amqp://admin:admin@carbon/carbon?brokerlist='tcp://localhost:5672'"
});

Initialize a JMS connection with the provider.

jms:Session jmsSession = new (conn, {

Initialize a JMS session on top of the created connection.

    acknowledgementMode: "AUTO_ACKNOWLEDGE"
});

Optional property. Defaults to AUTO_ACKNOWLEDGE

endpoint jms:DurableTopicSubscriber subscriber {
    session: jmsSession,
    topicPattern: "BallerinaTopic",
    identifier: "sub1"
};

Initialize a Durable topic subscriber using the created session.

service<jms:Consumer> jmsListener bind subscriber {

Bind the created subscriber to the listener service.

    onMessage(endpoint consumer, jms:Message message) {

OnMessage resource get invoked when a message is received.

        string messageText = check message.getTextMessageContent();
        log:printInfo("Message : " + messageText);
  }
}

Retrieve the text message content with error lifting by using the check keyword.

$ ballerina run jms-durable-topic-message-subscriber.bal

To run the program, put the code in jms-durable-topic-message-subscriber.bal and use $BALLERINA_HOME/bin/ballerina.

JMS subscriber run as a Ballerina service listening on the subscribed topic