Tutorial 6: JMS

This sections shows several examples how to use JMS client.

API

Module hydratk.lib.network.jms.client

Method JMSClient is factory method which requires attribute engine to create proper JMSClient object instance. Additional attributes are passed as args, kwargs.

Supported protocols:

  • JMS: module jms_client
  • STOMP: module stomp_client
  • AMQP: module amqp_client
  • MQTT: module mqtt_client

Methods:

  • connect: connect to JMS provider

  • disconnect: disconnect from JMS provider

  • send: send message to queue|topic (MQTT supports topic only)

  • receive: receive message from queue (from topic for MQTT)

  • browse: browse queue, not supported for MQTT

  • close: stop JVM, supported for JMS

    Note

    API uses HydraTK core functionalities so it must be running.

JMS

Part of JMS client library is implemented in Java as a wrapper application which uses Java JMS API. Python client library uses Java bridge to create Java object instance. Specific Java libraries are needed to access JMS providers (WebLogic, HornetQ, OpenMQ, ActiveMQ etc.). JMS API has no low level communication protocol specification so there is no universal client library. These libraries are not bundled with hydratk.

After installation do following actions: 1. Check that directory /var/local/hydratk/java was created and contains files: JMSClient.java, JMSClient.class, JMSMessage.class, javaee.jar 2. Store specific client jar file to same directory (i.e. activemq-all-5.13.0.jar).

Note

JMS is not supported for PyPy due to module JPype1.

# import library
import hydratk.lib.network.jms.client as jms

# initialize client
client = jms.JMSClient('JMS', verbose=True)

# connect to server
properties = {}
properties['provider_url'] = 'tcp://localhost:61616'
properties['initial_context_factory'] = 'org.apache.activemq.jndi.ActiveMQInitialContextFactory'

# returns bool
client.connect('ConnectionFactory', properties)

# send message
headers = {}
headers['JMSCorrelationID'] = '3141592654-xxx'
headers['JMSType'] = 'sample'

# returns bool
client.send('dynamicQueues/HydraQueue', 'xxx', headers=headers)

# browse queue, search messages of given JMS type
messages = client.browse('dynamicQueues/HydraQueue', jms_type='sample')

# receive multiple messages
messages = client.receive('dynamicQueues/HydraQueue', cnt=5)

# disconnect from server
# returns bool
client.disconnect()

# stop JVM
client.close()

STOMP

# import library
import hydratk.lib.network.jms.client as jms

# initialize client
client = jms.JMSClient('STOMP')

# connect to server
# returns bool
client.connect('localhost', 61613, 'admin', 'password')

# send message
headers = {}
headers['JMSCorrelationID'] = '3141592654-xxx'
headers['JMSType'] = 'sample'

# returns bool
client.send('HydraQueue', 'xxx', headers=headers)

# browse queue, search messages of given JMS type
messages = client.browse('HydraQueue', cnt=3, jms_type='pokusny')

# receive multiple messages
messages = client.receive('HydraQueue', cnt=5)

# disconnect from server
# returns bool
client.disconnect()

AMQP

# import library
import hydratk.lib.network.jms.client as jms

# initialize client
client = jms.JMSClient('AMQP')

# connect to server
# returns bool
client.connect('localhost', 5672, 'admin', 'password')

# send message
headers = {}
headers['JMSCorrelationID'] = '3141592654-xxx'
headers['JMSType'] = 'sample'

# returns bool
client.send('HydraQueue', 'xxx', headers=headers)

# browse queue, search messages of given JMS type
messages = client.browse('HydraQueue', cnt=3, jms_type='pokusny')

# receive multiple messages
messages = client.receive('HydraQueue', cnt=5)

# disconnect from server
# returns bool
client.disconnect()

MQTT

# import library
import hydratk.lib.network.jms.client as jms

# initialize client
client = jms.JMSClient('MQTT')

# connect to server
# returns bool
client.connect('localhost', 1883, 'admin', 'password')

# send message (only topic is supported)
# returns bool
client.send('HydraTopic', 'xxx')

# receive multiple messages
# messages are received asynchronously (must be sent to topic during wait timeout)
messages = client.receive('HydraTopic', cnt=5)

# disconnect from server
# returns bool
client.disconnect()