DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Enterprise AI Trend Report: Gain insights on ethical AI, MLOps, generative AI, large language models, and much more.

2024 Cloud survey: Share your insights on microservices, containers, K8s, CI/CD, and DevOps (+ enter a $750 raffle!) for our Trend Reports.

PostgreSQL: Learn about the open-source RDBMS' advanced capabilities, core components, common commands and functions, and general DBA tasks.

AI Automation Essentials. Check out the latest Refcard on all things AI automation, including model training, data security, and more.

Related

  • Apache Camel Integration with Kafka
  • Apache Camel Integration With ActiveMQ
  • Revolutionizing Software Deployment: The Synergy of Cloud and DevOps
  • Integration of AI Tools With SAP ABAP Programming

Trending

  • Building a Sustainable Data Ecosystem
  • Harnessing the Power of Observability in Kubernetes With OpenTelemetry
  • The Power of Generative AI: How It Is Revolutionizing Business Process Automation
  • The Future of Kubernetes: Potential Improvements Through Generative AI
  1. DZone
  2. Software Design and Architecture
  3. Integration
  4. Quick Integration With IBM MQ Using Apache Camel

Quick Integration With IBM MQ Using Apache Camel

In this article, look t an integration with IBM MQ using Apache Camel.

By 
Chandra Shekhar Pandey user avatar
Chandra Shekhar Pandey
·
May. 28, 20 · Tutorial
Like (2)
Save
Tweet
Share
25.1K Views

Join the DZone community and get the full member experience.

Join For Free

In this article we will find out how easy it is to integrate a messaging server with Apache Camel. Apache Camel is one of the best known Integration framework. Here we are integrating Apache Camel with IBM MQ. You will be amazed to see how quick integration is and how easy to test it with Camel Spring-Boot based template. Docker images of IBM MQ are available for quick development and testing. Also client artifacts are now available in maven repository. So it is quick and easy to setup a development or test environment, now one should only focus on actual development.

There is another very important use-case where there could be a requirement to create a bridge between two different messaging middleware. Like IBM MQ and AMQ7 or AMQ 6.x and IBM MQ.  Bridge refers to communication channel. Apache Camel would serve as the bridge between two different messaging server.

So let us start now.

1. Download camel-archetype-spring-boot using following command. If will ask for group-id, artifact-id, version and package. You can set them as per your wish or coding guidelines.

Shell
 




xxxxxxxxxx
1


 
1
mvn archetype:generate   -DarchetypeGroupId=org.apache.camel.archetypes   -DarchetypeArtifactId=camel-archetype-spring-boot   -DarchetypeVersion=3.3.0


2.  Modify this template as per code shared in my personal GitHub link. We will go through important sections of  the shared code.

  • IBM MQ client library. These are available in maven repository.
  • Camel latest library is being used. At the time of writing this blog latest available version of Camel is 3.3.0.
  • camel-context.xml is being loaded from class-path using spring ImportResource annotation.
  • camel-jms component is being used which is set with IBM MQ connectionfactory.
XML
 




xxxxxxxxxx
1
21


 
1
<bean id="mqConnectionFactory"
2
        class="com.ibm.mq.jms.MQConnectionFactory">
3
        <property name="hostName" value="localhost" />
4
        <property name="port" value="1414" />
5
        <property name="queueManager" value="QM1" />
6
        <property name="channel" value="DEV.APP.SVRCONN" />
7
        <property name="transportType" value="1" />
8
        <property name="shareConvAllowed" value="0" />
9
    </bean>
10
    <bean id="mqcredential"
11
        class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
12
        <property name="targetConnectionFactory"
13
            ref="mqConnectionFactory" />
14
        <property name="username" value="app" />
15
        <property name="password" value="" />
16
    </bean>
17
    <bean id="mq" class="org.apache.camel.component.jms.JmsComponent">
18
        <property name="connectionFactory" ref="mqcredential" />
19
        <property name="maxConcurrentConsumers" value="1" />
20
        <property name="cacheLevelName" value="CACHE_CONSUMER" />
21
    </bean>


  • Route-1 is producing or sending messages to IBM MQ instance. Route-2 is receiving or consuming messages from IBM MQ instance.

3. Now let us pull and start IBM MQ docker image. I have used Podman. Podman is an alternative to docker and command syntax remain same. Docker can also be used instead of podman.

Shell
 




xxxxxxxxxx
1


 
1
podman run   --env LICENSE=accept   --env MQ_QMGR_NAME=QM1   --publish 1414:1414   --publish 9443:9443   --detach   ibmcom/mq


 

4.  Run Camel spring-boot application. We will finally see logs as following which send and receive message from broker.

Shell
 




xxxxxxxxxx
1
15


 
1

          
2
[chandrashekhar@localhost messaging]$ mvn spring-boot:run
3
---
4
---
5
2020-05-16 23:59:32.554  INFO 89538 --- [           main] o.a.c.impl.engine.AbstractCamelContext   : Total 2 routes, of which 2 are started
6
2020-05-16 23:59:32.554  INFO 89538 --- [           main] o.a.c.impl.engine.AbstractCamelContext   : Apache Camel 3.3.0 (CamelContext: MyCamel) started in 0.117 seconds
7
2020-05-16 23:59:32.575  INFO 89538 --- [           main] io.undertow                              : starting server: Undertow - 2.0.30.Final
8
2020-05-16 23:59:32.580  INFO 89538 --- [           main] org.xnio                                 : XNIO version 3.3.8.Final
9
2020-05-16 23:59:32.591  INFO 89538 --- [           main] org.xnio.nio                             : XNIO NIO Implementation Version 3.3.8.Final
10
2020-05-16 23:59:32.656  INFO 89538 --- [           main] o.s.b.w.e.u.UndertowServletWebServer     : Undertow started on port(s) 8080 (http) with context path ''
11
2020-05-16 23:59:32.659  INFO 89538 --- [           main] poc.integration.MySpringBootApplication  : Started MySpringBootApplication in 3.516 seconds (JVM running for 3.913)
12
2020-05-16 23:59:33.562  INFO 89538 --- [2 - timer://foo] timer                                    : SENDING MESSAGE
13
2020-05-16 23:59:33.706  INFO 89538 --- [2 - timer://foo] timer                                    : SENT MESSAGE
14
2020-05-16 23:59:33.736  INFO 89538 --- [er[DEV.QUEUE.1]] get                                      : GOT MESSAGE with headers: {firedTime=Sat May 16 23:59:33 IST 2020, JMS_IBM_Character_Set=UTF-8, JMS_IBM_Encoding=273, JMS_IBM_Format=MQSTR   , JMS_IBM_MsgType=8, JMS_IBM_PutApplType=28, JMS_IBM_PutDate=20200516, JMS_IBM_PutTime=18293362, JMSCorrelationID=null, JMSCorrelationIDAsBytes=null, JMSDeliveryMode=2, JMSDestination=queue:///DEV.QUEUE.1, JMSExpiration=0, JMSMessageID=ID:414d5120514d31202020202020202020e9edbf5e02214521, JMSPriority=4, JMSRedelivered=false, JMSReplyTo=null, JMSTimestamp=1589653773618, JMSType=null, JMSXAppID=MySpringBootApplication     , JMSXDeliveryCount=1, JMSXGroupID=null, JMSXUserID=app         }
15
2020-05-16 23:59:33.737  INFO 89538 --- [er[DEV.QUEUE.1]] get                                      : GOT MESSAGE with Body 2020-05-16T23:59:33


5.  Browse Queue.

Shell
 




x
33


 
1
[chandrashekhar@localhost messaging]$ podman ps
2
CONTAINER ID  IMAGE                       COMMAND  CREATED      STATUS          PORTS                   NAMES
3
52f0f72d56ed  docker.io/ibmcom/mq:latest           5 hours ago  Up 5 hours ago  0.0.0.0:1414->1414/tcp  laughing_almeida
4
[chandrashekhar@localhost messaging]$ 
5

          
6
[chandrashekhar@localhost messaging]$  podman exec --tty --interactive 52f0f72d56ed  bash
7

          
8
bash-4.4$ /opt/mqm/samp/bin/amqsbcg DEV.QUEUE.1 QM1
9

          
10
AMQSBCG0 - starts here
11
**********************
12
 
13
 MQOPEN - 'DEV.QUEUE.1'
14
 
15
 
16
 MQGET of message number 1, CompCode:0 Reason:0
17
****Message descriptor****
18

          
19
  StrucId  : 'MD  '  Version : 2
20
  Report   : 0  MsgType : 8
21
  Expiry   : -1  Feedback : 0
22
  Encoding : 273  CodedCharSetId : 1208
23
  Format : 'MQHRF2  '
24
  Priority : 4  Persistence : 1
25
  MsgId : X'414D5120514D31202020202020202020E9EDBF5E02174521'
26
  CorrelId : X'000000000000000000000000000000000000000000000000'
27
  BackoutCount : 0
28
  ReplyToQ       : '                                                '
29
  ReplyToQMgr    : 'QM1                                             '
30
  ** Identity Context
31
  UserIdentifier : 'app         '
32
---
33
---


6. It may happen that you don't see a message while browsing the message, you can comment out a second route in the example and then test. As the consumer route is not available, the queue will have messages available.

That's it. I hope you will find this article helpful and interesting. 

Apache Camel Integration

Opinions expressed by DZone contributors are their own.

Related

  • Apache Camel Integration with Kafka
  • Apache Camel Integration With ActiveMQ
  • Revolutionizing Software Deployment: The Synergy of Cloud and DevOps
  • Integration of AI Tools With SAP ABAP Programming

Partner Resources


Comments

ABOUT US

  • About DZone
  • Send feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends: