<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sushil</title>
    <description>The latest articles on DEV Community by Sushil (@sushil).</description>
    <link>https://dev.to/sushil</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204670%2F58be9c39-a52f-4e11-95db-8f59c3f60907.jpg</url>
      <title>DEV Community: Sushil</title>
      <link>https://dev.to/sushil</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sushil"/>
    <language>en</language>
    <item>
      <title>Apache Camel 4.x + Spring Boot 3.x + RabbitMq + IbmMq</title>
      <dc:creator>Sushil</dc:creator>
      <pubDate>Sat, 02 Dec 2023 13:12:47 +0000</pubDate>
      <link>https://dev.to/sushil/apache-camel-4x-spring-boot-3x-rabbitmq-ibmmq-3293</link>
      <guid>https://dev.to/sushil/apache-camel-4x-spring-boot-3x-rabbitmq-ibmmq-3293</guid>
      <description>&lt;p&gt;&lt;strong&gt;What is Aapche Camel&lt;/strong&gt;?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Camel is an Open Source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this article, we are going to read data from IbmMq(producer) and send it to rabbitMq (consumer). I am going to run RabbitMq and IbmMq locally using Docker desktop. I will also share the docker command as well to run RabbitMq and IbmMq containers.&lt;/p&gt;

&lt;h4&gt;
  
  
  Pre-requisites:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;JDK — 17+&lt;/li&gt;
&lt;li&gt;Docker Desktop&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s start by executing the docker command assuming you have a docker desktop running on your local machine.&lt;/p&gt;

&lt;h4&gt;
  
  
  IbmMq
&lt;/h4&gt;

&lt;p&gt;docker command&lt;br&gt;
&lt;code&gt;docker run - env LICENSE=accept - env MQ_QMGR_NAME=QM1 - publish 1414:1414 - publish 9443:9443 - detach ibmcom/mq&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Console url : &lt;a href="https://localhost:9443/ibmmq/console"&gt;https://localhost:9443/ibmmq/console&lt;/a&gt;&lt;br&gt;
UserId/Password : admin/passw0rd&lt;/p&gt;
&lt;h4&gt;
  
  
  RabbitMq docker command
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;docker run -it -p 5672:5672 --hostname my-rabbit --name some-rabbit rabbitmq:3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Console Url : &lt;a href="http://localhost:15672"&gt;http://localhost:15672&lt;/a&gt;&lt;br&gt;
UserId/Password : guest/guest&lt;/p&gt;


&lt;h3&gt;
  
  
  Spring Boot Application
&lt;/h3&gt;

&lt;p&gt;Let’s create a Spring Boot Application&lt;/p&gt;

&lt;p&gt;You can create Spring Boot Application from &lt;a href="https://start.spring.io/"&gt;spring initializr&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g3EvtN0---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u5ucvrk2fcwrxy0endz8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g3EvtN0---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u5ucvrk2fcwrxy0endz8.png" alt="Image description" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make sure you select maven, Spring Boot version 3.2.0 and click on Generate.&lt;br&gt;
Once the project is downloaded you can open the project in any IDE of your choice. In my case, I am using Intellij.&lt;br&gt;
Up until now, we have not added any dependency in pom.xml.&lt;br&gt;
Let’s start by adding spring boot dependency in the dependencies section in pom.xml.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-boot-starter&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-boot-starter-web&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;3.2.0&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Apache Camel Dependency
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.camel.springboot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;camel-spring-boot-starter&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;4.2.0&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;spring-boot-starter-integration&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;3.1.3&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  RabbitMq Dependency
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.camel.springboot&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;camel-spring-rabbitmq-starter&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;4.2.0&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  IbmMq Dependency
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;com.ibm.mq&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;mq-jms-spring-boot-starter&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;3.1.5&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.camel&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;camel-jms&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;4.2.0&amp;lt;/version&amp;gt;
        &amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All the required dependencies added, let’s add rabbitmq and ibmmq configuration in the application.properties file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;camel.springboot.main-run-controller=true
camel.springboot.name = MyCamel
# RabbitMQ Configuration
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.template.exchange=myqueue
spring.rabbitmq.template.routing-key=mykey

# IBM-MQ Configuration
ibm.mq.queueManager=QM1
ibm.mq.channel=DEV.ADMIN.SVRCONN
ibm.mq.connName=localhost(1414)
ibm.mq.queue=DEV.QUEUE.1
ibm.mq.user=admin
ibm.mq.password=passw0rd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Almost at the last step, create a class which extends RouterBuilder. Override method configure and add routes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;

@Component
public class RouteService extends RouteBuilder {
    @Override
    public void configure() throws Exception {

        // first route
        from("timer:mytimer?period=5000")
                .transform(simple("Random number ${random(0,100)}"))
                .to("jms:DEV.QUEUE.1");

        // second route
        from("jms:queue:DEV.QUEUE.1")
                .log("Message Posted in RabbitMq")
                .to("spring-rabbitmq:librayQueue.exchange?queues=librayQueue");

        // third route
        from("spring-rabbitmq:librayQueue.exchange?queues=librayQueue")
                .log("Data from rabbitmq: ${body}");
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code, we have added the first route which triggers every 5 seconds and generates a random number between 0 to 100 and inserts that data in IBM MQ.&lt;/p&gt;

&lt;p&gt;In the second route, we are reading data from ibmmq which was pushed in route1 and adding that data as it is in rabbitmq.&lt;/p&gt;

&lt;p&gt;To verify if data was being posted successfully in rabbitmq we have introduced a third route, which reads data from rabbitmq and logs it.&lt;/p&gt;

&lt;p&gt;You can also verify by logging into the rabbitmq console.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validate:
&lt;/h3&gt;

&lt;p&gt;Run spring boot application using IDE or using maven command mvn spring-boot:run and monitor logs.&lt;/p&gt;

&lt;p&gt;repo link: &lt;a href="https://gitlab.com/taskar.sushil/apache-camel"&gt;https://gitlab.com/taskar.sushil/apache-camel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you for your attention! Happy Learning!&lt;/p&gt;

</description>
      <category>apachecamel</category>
      <category>rabbitmq</category>
      <category>springboot</category>
      <category>ibmmq</category>
    </item>
  </channel>
</rss>
