Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

21
Integrating MQ Protocols WSO2 Enterprise Service Bus 4.9.0 Jagath Ariyarathne Technical Lead Kevin Rathnasekara Software Engineer

Transcript of Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

Page 1: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

Integrating MQ Protocols WSO2 Enterprise Service Bus 4.9.0

Jagath AriyarathneTechnical Lead

Kevin RathnasekaraSoftware Engineer

Page 2: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

Agenda

o Enterprise Messaging

o Messaging support in WSO2 ESB

o What’s new in ESB 4.9.0 with MQ protocols

o RabbitMQ

o Kafka

o MQTT

o Demo on MQTT Integration

Page 3: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

Enterprise Messaging

o What is messaging?Communication between two applications with high-speed, asynchronousand reliable delivery

o Why we need messagingo Remote communicationo Platform/language integrationo Asynchronous communicationo Reliable communication

Page 4: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

Enterprise Messaging cont...

o Achieved by message queues

o Enterprise messaging middleware systemso ActiveMQo IBM WebSphereo RabbitMQo JBoss Messaging

Producer (Sender)

Message Queue

Consumer(Receiver)

Page 5: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

Enterprise Messaging with WSO2 ESB

o RabbitMQ, Kafka and MQTT transports

Page 6: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

RabbitMQ with WSO2 ESB

o In-built RabbitMQ transport, easy to configure

o Automatic connection recovery

o All content-types are now supported

o Synchronized request-response support

o Introduced the new feature rich inbound endpoint for RabbitMQ

o Added the SSL support for RabbitMQ inbound/transport

Page 7: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

RabbitMQ with WSO2 ESB cont...

o RabbitMQ as a transport in ESB 4.9.0

Page 8: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

RabbitMQ with WSO2 ESB cont...

o Enable RabbitMQ Transport (axis2.xml)o Transport Receiver

<transportReceiver name="rabbitmq" class="org.apache.axis2.transport.rabbitmq.RabbitMQListener">

<parameter name="AMQPConnectionFactory" locked="false">

<parameter name="rabbitmq.server.host.name" locked="false">192.168.0.3</parameter>

<parameter name="rabbitmq.server.port" locked="false">5672</parameter>

<parameter name="rabbitmq.server.user.name" locked="false">user</parameter>

<parameter name="rabbitmq.server.password" locked="false">abc123</parameter>

</parameter>

</transportReceiver>

o Transport Sender

<transportSender name="rabbitmq" class="org.apache.axis2.transport.rabbitmq.RabbitMQSender"/>

Page 9: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

RabbitMQ with WSO2 ESB cont...

o Use RabbitMQ transport in a Proxy<proxy xmlns="http://ws.apache.org/ns/synapse" name="AMQPProxy" transports="rabbitmq" statistics="disable" trace="disable"

startOnLoad="true">

<target>

<inSequence>

<log level="full"/>

<property name="OUT_ONLY" value="true"/>

<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>

</inSequence>

<endpoint>

<address

uri="rabbitmq:/AMQPProxy?rabbitmq.server.host.name=192.168.0.3&rabbitmq.server.port=5672&rabbitmq.server.user.

name=user&rabbitmq.server.password=abc123&rabbitmq.queue.name=queue2&rabbitmq.exchange.name=exchange2"/>

</endpoint>

</target>

<parameter name="rabbitmq.queue.name">queue1</parameter>

<parameter name="rabbitmq.exchange.name">exchange1</parameter>

<parameter name="rabbitmq.connection.factory">AMQPConnectionFactory</parameter>

<description></description>

</proxy>

Page 10: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

RabbitMQ with WSO2 ESB cont...

o Sample configuration for RabbitMQ Inbound<inboundEndpoint xmlns="http://ws.apache.org/ns/synapse" name="RabbitMQConsumer" sequence="amqpSeq" onError="amqpErrorSeq" protocol="

rabbitmq" suspend="false">

<parameters>

<parameter name="sequential">true</parameter>

<parameter name="coordination">true</parameter>

<parameter name="rabbitmq.connection.factory">AMQPConnectionFactory</parameter>

<parameter name="rabbitmq.server.host.name">localhost</parameter>

<parameter name="rabbitmq.server.port">5672</parameter>

<parameter name="rabbitmq.server.user.name">guest</parameter>

<parameter name="rabbitmq.server.password">guest</parameter>

<parameter name="rabbitmq.queue.name">queue</parameter>

<parameter name="rabbitmq.exchange.name">exchange</parameter>

<parameter name="rabbitmq.connection.ssl.enabled">false</parameter>

</parameters>

</inboundEndpoint>

Page 11: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

RabbitMQ with WSO2 ESB cont...

Page 12: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

Kafka with WSO2 ESB

o Kafka inbound endpoint to connect to inbound connections<inboundEndpoint xmlns="http://ws.apache.org/ns/synapse"

name="KafkaListenerEP"

sequence="requestHandlerSeq"

onError="inFaulte"

protocol="kafka"

suspend="false">

<parameters>

<parameter name="interval">100</parameter>

<parameter name="coordination">true</parameter>

<parameter name="sequential">true</parameter>

<parameter name="zookeeper.connect">localhost:2181</parameter>

<parameter name="consumer.type">highlevel</parameter>

<parameter name="content.type">application/xml</parameter>

<parameter name="topics">test,sampletest</parameter>

<parameter name="group.id">test-group</parameter>

</parameters>

</inboundEndpoint>

Page 13: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

Kafka with WSO2 ESB cont...

o Kafka connector for outbound communication<proxy xmlns="http://ws.apache.org/ns/synapse"

name="KafkaTransport"

transports="https http"

startOnLoad="true"

trace="disable">

<description/>

<target>

<inSequence>

<kafkaTransport.init>

<brokerList>localhost:9092</brokerList>

</kafkaTransport.init>

<kafkaTransport.publishMessages>

<topic>test</topic>

</kafkaTransport.publishMessages>

</inSequence>

</target>

</proxy>

Page 14: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

Kafka with WSO2 ESB cont...

Page 15: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

MQTT with WSO2 ESB

o Improved MQTT transport(axis2 transport)

o transport sender

o transport listener

o MQTT inbound endpoint for more versatile integrations

Page 16: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

MQTT with WSO2 ESB cont...

Page 17: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

MQTT with WSO2 ESB

o Inbound communication with Axis2 transport<transportReceiver name="mqtt" class="org.apache.axis2.transport.mqtt.MqttListener">

<parameter locked="false" name="mqttConFactory">

<parameter locked="false" name="mqtt.server.host.name">localhost</parameter>

<parameter name="mqtt.connection.factory">mqttConFactory</parameter>

<parameter locked="false" name="mqtt.server.port">1883</parameter>

<parameter locked="false" name="mqtt.client.id">client-id-1234</parameter>

<parameter locked="false" name="mqtt.topic.name">esb.test</parameter>

</parameter>

</transportReceiver>

<proxy xmlns="http://ws.apache.org/ns/synapse"

name="SampleProxy"

transports="mqtt"

startOnLoad="true"

trace="disable">

Page 18: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

MQTT with WSO2 ESB cont...

Outbound communication with Axis2 transport

o Axis2.xml configuration

<transportSender name="mqtt" class="org.apache.axis2.transport.mqtt.MqttSender"/>

o Sample Sequence

<sequence name="dispatchSeq" onError="fault">

<log level="full"/>

<send>

<endpoint>

<address uri="mqtt:/sender?mqtt.server.host.name=localhost&amp;mqtt.server.port=1884&amp;mqtt.client.id=mqtt.sender.id&amp;mqtt.topic.name=esb.publish.topic&amp;mqtt.subscription.qos=2&amp;mqtt.blocking.sender=true"/>

</endpoint>

</send>

<drop/>

</sequence>

Page 19: Integrating MQ Protocols with WSO2 ESB 4.9.0 (RabbitMQ, MQTT, Kafka)

Demo

A

B