Page History
...
This article describes the implementation for sending messages to a Java Message Queue Service which:
- send sends and receive receives messages,
- add adds an order to a JS7 workflow by a JS7 - REST Web Service API call with a JSON body extracted from a message.
...
The implementation includes the following steps:
- create creation of a message producer to send messages to a Message Queue Service,
- create creation of a message consumer to receive messages from a Message Queue Service,
- use using the message as part of a JS7 REST Web Service API call.
The message is assumed to be a JSON snippet that which is processed by the desired JS7 REST Web Service API. This snippet must be valid JSON and compliant with requests explained with in the Technical Documentation of the REST Web Service API article.
...
The method is called with the message to send be sent to the server. The message is a String
object. The method instantiates a Message
object with the text to sendbe sent.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
public void write(String text, String queueName, long ttl) throws Exception { Connection connection = null; Session session = null; try { ConnectionFactory factory = new ActiveMQConnectionFactory(uri); connection = factory.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue(queueName); MessageProducer producer = session.createProducer(destination); // 5 sec time to live for the producer for this showcase producer.setTimeToLive(ttl); Message message = null; if(text != null){ message = session.createTextMessage(text); } else{ message = session.createTextMessage(TEXT); } producer.send(message); } catch (Throwable e) { LOGGER.error("JMSException occurred while trying to write Message to Destination: "); throw e; } finally { if(session != null) { try { session.close(); } catch (JMSException e) { LOGGER.warn("JMSException occurred while trying to close the session: ", e); } } if (connection != null) { try { connection.close(); } catch (JMSException e) { LOGGER.warn("JMSException occurred while trying to close the connection: ", e); } } } } |
The SOSProducer
class
The below code example below shows the complete class. The code in the below example includes a default TEXT consiting consisting of a body for for a JS7 /orders/add
request.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
package com.sos.jms.producer; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageProducer; import javax.jms.Session; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.log4j.Logger; public class SOSProducer { private static final Logger LOGGER = Logger.getLogger(SOSProducer.class); private static final String TEXT = "{\"controllerId\":\"testsuite\",\"orders\":[{\"workflowPath\":\"/JS7Demo/01_HelloWorld/jdHelloWorld\",\"scheduledFor\":\"now\"}],\"auditLog\":{}}"; private String uri; public SOSProducer(String uri) { this.uri = uri; } public void write(String text, String queueName) throws Exception { write(text, queueName, 5000L); } public void write(String text, String queueName, long ttl) throws Exception { Connection connection = null; Session session = null; try { ConnectionFactory factory = new ActiveMQConnectionFactory(uri); connection = factory.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue(queueName); MessageProducer producer = session.createProducer(destination); // 5 sec time to live for the producer for this showcase producer.setTimeToLive(ttl); Message message = null; if(text != null){ message = session.createTextMessage(text); } else{ message = session.createTextMessage(TEXT); } producer.send(message); } catch (Throwable e) { LOGGER.error("JMSException occurred while trying to write Message to Destination: "); throw e; } finally { if(session != null) { try { session.close(); } catch (JMSException e) { LOGGER.warn("JMSException occurred while trying to close the session: ", e); } } if (connection != null) { try { connection.close(); } catch (JMSException e) { LOGGER.warn("JMSException occurred while trying to close the connection: ", e); } } } } } |
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
public String read(String queueName) throws Exception { TextMessage message = null; String textMessage = null; Connection connection = null; Session session = null; try { ConnectionFactory factory = new ActiveMQConnectionFactory(uri); connection = factory.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue(queueName); connection.start(); MessageConsumer consumer = session.createConsumer(destination); while (true) { Message receivedMessage = consumer.receive(1); if (receivedMessage != null) { if (receivedMessage instanceof TextMessage) { message = (TextMessage) receivedMessage; textMessage = message.getText(); LOGGER.info("Reading message: " + textMessage); break; } else { break; } } } } catch (Throwable e) { LOGGER.error("JMSException occurred while trying to read from Destination: "); throw e; } finally { if(session != null) { try { session.close(); } catch (JMSException e) { LOGGER.warn("JMSException occurred while trying to close the session: ", e); } } if (connection != null) { try { connection.close(); } catch (JMSException e) { LOGGER.warn("JMSException occurred while trying to close the connection: ", e); } } } return textMessage; } |
The SOSConsumer
class
The below code example below shows the complete class.
...
The Java class makes use of the SOSProducer to create a message and send it to the message queue. It then uses the SOSConsumer class to read the message from the queue. Additionally In addition, it creates an HTTP connection to a JS7 JOC Cockpit instance to call the /orders/add
API with the JSON body from the message received.
...
This example shows the dependencies required to build the example above example as a Maven project.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sos-berlin</groupId> <artifactId>activeMQ-example</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.15.0</version> </dependency> </dependencies> </project> |
...