{"id":772,"date":"2012-05-11T09:05:09","date_gmt":"2012-05-11T07:05:09","guid":{"rendered":"http:\/\/blog.fabianpiau.com\/?p=772"},"modified":"2024-12-30T14:47:59","modified_gmt":"2024-12-30T14:47:59","slug":"first-steps-with-apache-camel","status":"publish","type":"post","link":"https:\/\/blog.fabianpiau.com\/en\/2012\/05\/11\/first-steps-with-apache-camel\/","title":{"rendered":"First steps with Apache Camel"},"content":{"rendered":"<p><a class=\"lang\" href=\"https:\/\/blog.fabianpiau.com\/fr\/2012\/05\/11\/first-steps-with-apache-camel\/\" title=\"Lire en fran\u00e7ais\"><strong class=\"labellang\"><span class=\"fr\">&nbsp;<\/span>Version fran\u00e7aise disponible<\/strong><\/a><\/p>\n<div class=\"info\"><strong class=\"label\">Note<\/strong><br \/>\nTo learn more about Camel, you can read a <a href=\"https:\/\/manning-content.s3.amazonaws.com\/download\/f\/737b721-0f60-4ba9-bb1f-7a27c4a4532b\/chapter1sample.pdf\" target=\"_blank\" title=\"Apache Camel In Action - Chapter 1\" rel=\"noopener noreferrer\">free sample of the chapter 1 of &#8220;Camel in Action&#8221;<\/a>, the reference book.\n<\/div>\n<p>Rapha\u00ebl Delaporte (<a href=\"https:\/\/twitter.com\/rafdelaporte\" target=\"_blank\" title=\"@rafdelaporte\" rel=\"noopener noreferrer\">@rafdelaporte<\/a>) proposed us to tame a camel this week at Nantes <a href=\"https:\/\/blog.fabianpiau.com\/en\/2009\/10\/24\/java-user-group-jug\/\" title=\"JUG\">JUG<\/a>.<\/p>\n<p style=\"text-align: center;\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" title=\"Camel photo\" src=\"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/post\/00042\/camel.png?resize=430%2C298&#038;ssl=1\" alt=\"Camel photo\" width=\"430\" height=\"298\" \/><\/p>\n<p>Don&#8217;t be fooled by the picture ! Our computerized camel is not lazy&#8230; Let&#8217;s focus back on an attractive presentation of <a href=\"https:\/\/camel.apache.org\/\" target=\"_blank\" title=\"Apache Camel\" rel=\"noopener noreferrer\">Apache Camel<\/a>.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/camel.apache.org\/\" target=\"_blank\" title=\"Apache Camel\" rel=\"noopener noreferrer\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" title=\"Apache Camel logo\" src=\"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/post\/00042\/apache-camel-logo.png?resize=349%2C171&#038;ssl=1\" alt=\"Apache Camel logo\" width=\"349\" height=\"171\" \/><\/a><\/p>\n<p><a href=\"https:\/\/camel.apache.org\/\" target=\"_blank\" title=\"Apache Camel\" rel=\"noopener noreferrer\">Apache Camel<\/a> relies on the Enterprise Integration Patterns &#8211; EIP (not to be confused with the concept of Design Patterns used for objects designing).<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>EIP Patterns<\/h4>\n<p>Here are the main patterns from simple to more complex (this is a slide from the presentation).<\/p>\n<div style=\"max-width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/post\/00042\/eip-patterns-en.png?ssl=1\" rel=\"shadowbox[sbpost-772];player=img;\" title=\"Entreprise Integration Patterns\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/post\/00042\/eip-patterns-en-thumbnail.png?resize=550%2C346&#038;ssl=1\" alt=\"Entreprise Integration Patterns\" title=\"Entreprise Integration Patterns\" width=\"550\" height=\"346\" class=\"size-medium wp-image-257\" \/><\/a><p class=\"wp-caption-text\">Entreprise Integration Patterns<\/p><\/div>\n<p>By combining multiple patterns, the possibilities are almost endless. You can find the <a href=\"https:\/\/camel.apache.org\/components\/eips\/enterprise-integration-patterns.html\" target=\"_blank\" title=\"List of Patterns implemented in Camel\" rel=\"noopener noreferrer\">list of Patterns implemented in Camel<\/a> on the official website of the framework.<\/p>\n<blockquote><p> A comprehensive book on the subject exists <a href=\"https:\/\/www.enterpriseintegrationpatterns.com\/\" target=\"_blank\" title=\"Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions\" rel=\"noopener noreferrer\">&#8220;Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions&#8221;<\/a>. The author is none other than the creator of this concept, needless to say that this is the reference book.<\/p><\/blockquote>\n<p><br clear=\"none\" \/><\/p>\n<h4>Make EIP with Apache Camel<\/h4>\n<p>There are three basic elements in Camel to implement the EIP :<\/p>\n<ul>\n<li>Route<\/li>\n<li>Processor<\/li>\n<li>Endpoint<\/li>\n<\/ul>\n<p>A <a href=\"https:\/\/camel.apache.org\/manual\/routes.html\" target=\"_blank\" title=\"Camel route\" rel=\"noopener noreferrer\">route<\/a> is conceptualized as follows : the binding of two <a href=\"https:\/\/camel.apache.org\/manual\/endpoint.html\" target=\"_blank\" title=\"Camel endpoint\" rel=\"noopener noreferrer\">endpoints<\/a> by a <a href=\"https:\/\/camel.apache.org\/manual\/processor.html\" target=\"_blank\" title=\"Camel processor\" rel=\"noopener noreferrer\">processor<\/a>. Thus, we have a start endpoint and a end endpoint, an endpoint is associated with a resource. A route symbolizes a more or less complex treatment (processor) depending on what you want to achieve and the EIP you have chosen to implement.<\/p>\n<p>To meet your needs, you can use nesting and chained routes, apply different treatments throughout the route, etc.<br \/>\n<br clear=\"none\" \/><br \/>\nIn Apache Camel, a route can be defined in two ways :<\/p>\n<ul>\n<li>Either by using the Java language (Domain Specific Language &#8211; DSL). Apache Camel provides an API. This is a very handy way, specially inside an IDE with autocomplete feature.<\/li>\n<li>Or using XML. More verbose so a little less readable and finally a bit less convenient. I recommend you to use DSL when routes become complex.<\/li>\n<\/ul>\n<p>In the following, we will favor the Java syntax. Note that in all cases, some XML will be required for the configuration of Camel (Camel context, datasources, etc.).<\/p>\n<p>Here is a simple example of route :<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nimport org.apache.camel.builder.RouteBuilder;\r\n\r\npublic class MyFirstRoute extends RouteBuilder {\r\n    @Override\r\n    public void configure() thwrows Exception {\r\n        \/\/ My first route\r\n        from(&#039;file:\/Users\/fabian\/src&#039;).to(&#039;file:\/Users\/fabian\/dest&#039;).end();\r\n\r\n        \/\/ We can define more routes here\r\n        \/\/ ...\r\n    }\r\n}\r\n<\/pre>\n<blockquote><p>The <code>.end()<\/code> keyword is not mandatory, but highly advisable to clearly delineate routes (maintainability). In this example, the treatment is very simple, there is only one route, so it is not really necessary.<\/p><\/blockquote>\n<p><br clear=\"none\" \/><br \/>\nThe presentation was mainly demos-based. Rapha\u00ebl showed us some textbook cases starting from a correctly configured Maven project (Spring dependencies, Camel, contexts&#8230;) :<\/p>\n<ul>\n<li>Move files from one directory to another (this is the code snippet above). All files created in the <code>src<\/code> folder will be moved in the <code>dest<\/code> folder. This route can be written in one single line&#8230; And shows us the power of such a tool.<\/li>\n<li>Create files corresponding to pooled messages in a JMS queue. For the presentation, Rapha\u00ebl has used <a href=\"https:\/\/activemq.apache.org\/\" target=\"_blank\" title=\"Apache ActiveMQ\" rel=\"noopener noreferrer\">Apache ActiveMQ<\/a>, a JMS message broker. This case illustrates the <a href=\"https:\/\/camel.apache.org\/components\/eips\/split-eip.html\" target=\"_blank\" title=\"Camel splitter\" rel=\"noopener noreferrer\">Splitter<\/a> pattern.<\/li>\n<li>Pool messages in a JMS queue according to their content. This case illustrates the <a href=\"https:\/\/camel.apache.org\/components\/eips\/choice-eip.html\" target=\"_blank\" title=\"Camel content-based Router\" rel=\"noopener noreferrer\">Content-based Router<\/a> pattern.<\/li>\n<p>The route is as follows, assuming <code>queue.in<\/code> exists in ActiveMQ and that they are pooled messages :<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nimport org.apache.camel.builder.RouteBuilder;\r\n\r\npublic class MyContentBasedRoute extends RouteBuilder {\r\n    @Override\r\n    public void configure() thwrows Exception {\r\n        from(&#039;amq:queue.in&#039;)\r\n            .choice()\r\n                .when(header(&#039;JMSCorrelationID&#039;).isEqualTo(&#039;nantes&#039;))\r\n                    .to(&#039;amq:queue.nantes&#039;)\r\n                .when(header(&#039;JMSCorrelationID&#039;).isEqualTo(&#039;rennes&#039;))\r\n                    .to(&#039;amq:queue.rennes&#039;)\r\n                .otherwise()\r\n                    .to(&#039;amq:queue.others&#039;)\r\n        .end();\r\n    }\r\n}\r\n<\/pre>\n<p>From the ActiveMQ admin console, we create a few messages to test the different scenarios. Message is routed to the right queue according to its header.<\/p>\n<p>It is possible to chain predicates with the usual logical operators in order to create more complex routing criteria. In our example, the predicate is simple and is only based on the message&#8217;s header. It could also be based on the body to make a finer routing messages.<\/p>\n<li>Create JMS messages from the content of an XML file. This case illustrates the <a href=\"https:\/\/camel.apache.org\/components\/eips\/dynamicRouter-eip.html\" target=\"_blank\" title=\"Camel dynamic Router\" rel=\"noopener noreferrer\">Dynamic Router<\/a> pattern.<\/li>\n<p>Content of <code>messages_jug.xml<\/code> :<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;jug&gt;\r\n    &lt;nantes&gt;Hello from Nantes&lt;\/nantes&gt;\r\n    &lt;paris&gt;Hello from Paris&lt;\/paris&gt;\r\n    &lt;rennes&gt;Hello from Rennes&lt;\/nantes&gt;\r\n    &lt;nantes&gt;Hello again from Nantes&lt;\/nantes&gt;\r\n    &lt;paris&gt;Hello again from Paris&lt;\/paris&gt;\r\n    &#x5B;...]\r\n&lt;\/jug&gt;\r\n<\/pre>\n<p>With Camel, we want to extract the various messages and send them into a queue.<\/p>\n<p>Here is the code of the corresponding route :<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nimport org.apache.camel.builder.RouteBuilder;\r\n\r\npublic class MyDynamicRoute extends RouteBuilder {\r\n    @Override\r\n    public void configure() thwrows Exception {\r\n        from(&#039;files:\/Users\/fabian\/src\/messages_jug.xml&#039;)\r\n            .split(xpath(&#039;\/jug\/child::*&#039;))\r\n        .to(&#039;amq:queue.jugs&#039;);\r\n    }\r\n}\r\n<\/pre>\n<blockquote><p>It could have been a different treatment. For example : filtering on messages from Nantes and routed them to another file. The possibilities are endless.<\/p><\/blockquote>\n<p><br clear=\"none\" \/><\/p>\n<h4>Camel Optimizations<\/h4>\n<p>What about unavailability ? What&#8217;s going on with the message processing if the machine crashes and does not have the time to route the message ? Unfortunately, you lose the message ! It was consumed in the source queue, but has never reach its destination. Solution is to pass the route in transactional mode. This is done by adding <code>.transacted()<\/code> just after <code>.from(...)<\/code> and making sure that your JMS datasource is in transactional mode too (see XML configuration).<\/p>\n<p>We also note that the treatment is single-threaded by default. An improvement is to enable the processor&#8217;s parallelization (in our case, a <code>split<\/code> processor) by adding this custom option <code>.parallelProcessing()<\/code> just after <code>.split(...)<\/code>.<\/p>\n<p>We talked about <code>file<\/code> and <code>jms<\/code>, but there is so much more components available in Camel thanks to a very active community. This <a href=\"https:\/\/camel.apache.org\/components\/latest\/\" target=\"_blank\" title=\"Components available in Camel\" rel=\"noopener noreferrer\">page<\/a> lists <a href=\"https:\/\/camel.apache.org\/components\/latest\/\" target=\"_blank\" title=\"Components available in Camel\" rel=\"noopener noreferrer\">all the components available<\/a>. Including <code>jdbc<\/code>, <code>ftp<\/code>, <code>gmail<\/code>, <code>atom<\/code>, <code>pop<\/code>, <code>imap<\/code> among others.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Make EIP with Spring Integration<\/h4>\n<p>Rapha\u00ebl told us about <a href=\"https:\/\/docs.spring.io\/spring-integration\/reference\/overview.html\" target=\"_blank\" title=\"Spring Integration\" rel=\"noopener noreferrer\">Spring Integration<\/a>, an alternative to Camel. When using <a href=\"https:\/\/docs.spring.io\/spring-integration\/reference\/overview.html\" target=\"_blank\" title=\"Spring Integration documentation\" rel=\"noopener noreferrer\">Spring Integration<\/a>, you have no choice and you must use the XML notation exclusively.<\/p>\n<p>According to Rapha\u00ebl, SI fits better with Spring Batch, but the goal was not to blame one tool or the other. And each one has pros and cons.<\/p>\n<p>Here is the example of transferring files from one directory to another, but written with Spring Integration :<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;channel id=&#039;myFirstChannel&#039; \/&gt;\r\n\r\n&lt;file:inbound-channel-adapter id=&#039;filesIn&#039;\r\n        channel=&#039;myFirstChannel&#039;\r\n        directory=&#039;file:\/Users\/fabian\/src&#039; \/&gt;\r\n       \r\n&lt;file:outbound-channel-adapter id=&#039;filesOut&#039;\r\n        channel=&#039;myFirstChannel&#039;\r\n        directory=&#039;files:\/Users\/fabian\/dest&#039; \/&gt;\r\n<\/pre>\n<p>The concept of route is not present, SI defines a channel which connects two components. This is clearly the Spring philosophy, which places the notion of component at the center. Components are injected and can be linked together (this is logical because SI is developped by SpringSource).<\/p>\n<blockquote><p>Actually, the term route is only used by Camel. Spring Integration is closer to the EIP concepts by using same terms, such as channel.<\/p><\/blockquote>\n<p>Another difference, the channel appears concretely in Spring Integration but the route is implicit in Camel (no <code>route()<\/code> keyword). If we come back to our first route :<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nfrom(&#039;file:\/Users\/fabian\/src&#039;).to(&#039;file:\/Users\/fabian\/dest&#039;);\r\n<\/pre>\n<p>The route is symbolized by the &#8220;.&#8221; between the two endpoints. It is not possible to configure it. At this level, Spring Integration is more advanced with the ability to configure a particular type of channel.<\/p>","protected":false},"excerpt":{"rendered":"<p>&nbsp;Version fran\u00e7aise disponible Note To learn more about Camel, you can read a free sample of the chapter 1 of &#8220;Camel in Action&#8221;, the reference book. Rapha\u00ebl Delaporte (@rafdelaporte) proposed us to tame a camel this week at Nantes JUG. Don&#8217;t be fooled by the picture ! Our computerized camel is not lazy&#8230; Let&#8217;s focus [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1386,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[152,153,154,51],"class_list":["post-772","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agile-programming","tag-camel","tag-eip","tag-entreprise-integration-pattern","tag-jug"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>First steps with Apache Camel | CarmaBlog<\/title>\n<meta name=\"description\" content=\"&nbsp;English version available Remarque Pour en savoir plus sur Camel, vous pouvez lire un extrait gratuit du chapitre 1 du livre &quot;Camel in Action&quot;, le\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.fabianpiau.com\/en\/2012\/05\/11\/first-steps-with-apache-camel\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"First steps with Apache Camel | CarmaBlog\" \/>\n<meta property=\"og:description\" content=\"&nbsp;English version available Remarque Pour en savoir plus sur Camel, vous pouvez lire un extrait gratuit du chapitre 1 du livre &quot;Camel in Action&quot;, le\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.fabianpiau.com\/en\/2012\/05\/11\/first-steps-with-apache-camel\/\" \/>\n<meta property=\"og:site_name\" content=\"CarmaBlog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/fabian.piau\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/fabian.piau\" \/>\n<meta property=\"article:published_time\" content=\"2012-05-11T07:05:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-12-30T14:47:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.fabianpiau.com\/wp-content\/uploads\/2012\/05\/00042.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"279\" \/>\n\t<meta property=\"og:image:height\" content=\"279\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Fabian Piau\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@fabianpiau\" \/>\n<meta name=\"twitter:site\" content=\"@fabianpiau\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fabian Piau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/\"},\"author\":{\"name\":\"Fabian Piau\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\"},\"headline\":\"First steps with Apache Camel\",\"datePublished\":\"2012-05-11T07:05:09+00:00\",\"dateModified\":\"2024-12-30T14:47:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/\"},\"wordCount\":2685,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/00042.jpg?fit=279%2C279&ssl=1\",\"keywords\":[\"camel\",\"eip\",\"entreprise integration pattern\",\"jug\"],\"articleSection\":[\"Agile programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.fabianpiau.com\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/\",\"url\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/\",\"name\":\"First steps with Apache Camel | CarmaBlog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/00042.jpg?fit=279%2C279&ssl=1\",\"datePublished\":\"2012-05-11T07:05:09+00:00\",\"dateModified\":\"2024-12-30T14:47:59+00:00\",\"description\":\"&nbsp;English version available Remarque Pour en savoir plus sur Camel, vous pouvez lire un extrait gratuit du chapitre 1 du livre \\\"Camel in Action\\\", le\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[[\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/\"]]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/00042.jpg?fit=279%2C279&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/00042.jpg?fit=279%2C279&ssl=1\",\"width\":279,\"height\":279,\"caption\":\"Apache Camel\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/2012\\\/05\\\/11\\\/first-steps-with-apache-camel\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Homepage\",\"item\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programmation agile\",\"item\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/category\\\/agile-programming\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"First steps with Apache Camel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/\",\"name\":\"CarmaBlog\",\"description\":\"Agility, Java programming, New technologies and more...\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/en\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\",\"name\":\"Fabian Piau\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\",\"width\":567,\"height\":667,\"caption\":\"Fabian Piau\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\"},\"description\":\"Java developer, Fabian is interested in new technologies and their use within an Agile environment.\",\"sameAs\":[\"https:\\\/\\\/blog.fabianpiau.com\",\"https:\\\/\\\/www.facebook.com\\\/fabian.piau\",\"https:\\\/\\\/www.instagram.com\\\/fabianpiau\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/fabianpiau\\\/\",\"https:\\\/\\\/x.com\\\/fabianpiau\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"First steps with Apache Camel | CarmaBlog","description":"&nbsp;English version available Remarque Pour en savoir plus sur Camel, vous pouvez lire un extrait gratuit du chapitre 1 du livre \"Camel in Action\", le","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.fabianpiau.com\/en\/2012\/05\/11\/first-steps-with-apache-camel\/","og_locale":"en_US","og_type":"article","og_title":"First steps with Apache Camel | CarmaBlog","og_description":"&nbsp;English version available Remarque Pour en savoir plus sur Camel, vous pouvez lire un extrait gratuit du chapitre 1 du livre \"Camel in Action\", le","og_url":"https:\/\/blog.fabianpiau.com\/en\/2012\/05\/11\/first-steps-with-apache-camel\/","og_site_name":"CarmaBlog","article_publisher":"https:\/\/www.facebook.com\/fabian.piau","article_author":"https:\/\/www.facebook.com\/fabian.piau","article_published_time":"2012-05-11T07:05:09+00:00","article_modified_time":"2024-12-30T14:47:59+00:00","og_image":[{"width":279,"height":279,"url":"https:\/\/blog.fabianpiau.com\/wp-content\/uploads\/2012\/05\/00042.jpg","type":"image\/jpeg"}],"author":"Fabian Piau","twitter_card":"summary_large_image","twitter_creator":"@fabianpiau","twitter_site":"@fabianpiau","twitter_misc":{"Written by":"Fabian Piau","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.fabianpiau.com\/2012\/05\/11\/first-steps-with-apache-camel\/#article","isPartOf":{"@id":"https:\/\/blog.fabianpiau.com\/2012\/05\/11\/first-steps-with-apache-camel\/"},"author":{"name":"Fabian Piau","@id":"https:\/\/blog.fabianpiau.com\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14"},"headline":"First steps with Apache Camel","datePublished":"2012-05-11T07:05:09+00:00","dateModified":"2024-12-30T14:47:59+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.fabianpiau.com\/2012\/05\/11\/first-steps-with-apache-camel\/"},"wordCount":2685,"commentCount":3,"publisher":{"@id":"https:\/\/blog.fabianpiau.com\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14"},"image":{"@id":"https:\/\/blog.fabianpiau.com\/2012\/05\/11\/first-steps-with-apache-camel\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2012\/05\/00042.jpg?fit=279%2C279&ssl=1","keywords":["camel","eip","entreprise integration pattern","jug"],"articleSection":["Agile programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.fabianpiau.com\/2012\/05\/11\/first-steps-with-apache-camel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.fabianpiau.com\/en\/2012\/05\/11\/first-steps-with-apache-camel\/","url":"https:\/\/blog.fabianpiau.com\/en\/2012\/05\/11\/first-steps-with-apache-camel\/","name":"First steps with Apache Camel | CarmaBlog","isPartOf":{"@id":"https:\/\/blog.fabianpiau.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.fabianpiau.com\/en\/2012\/05\/11\/first-steps-with-apache-camel\/#primaryimage"},"image":{"@id":"https:\/\/blog.fabianpiau.com\/2012\/05\/11\/first-steps-with-apache-camel\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2012\/05\/00042.jpg?fit=279%2C279&ssl=1","datePublished":"2012-05-11T07:05:09+00:00","dateModified":"2024-12-30T14:47:59+00:00","description":"&nbsp;English version available Remarque Pour en savoir plus sur Camel, vous pouvez lire un extrait gratuit du chapitre 1 du livre \"Camel in Action\", le","breadcrumb":{"@id":"https:\/\/blog.fabianpiau.com\/en\/2012\/05\/11\/first-steps-with-apache-camel\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":[["https:\/\/blog.fabianpiau.com\/en\/2012\/05\/11\/first-steps-with-apache-camel\/"]]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.fabianpiau.com\/en\/2012\/05\/11\/first-steps-with-apache-camel\/#primaryimage","url":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2012\/05\/00042.jpg?fit=279%2C279&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2012\/05\/00042.jpg?fit=279%2C279&ssl=1","width":279,"height":279,"caption":"Apache Camel"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.fabianpiau.com\/en\/2012\/05\/11\/first-steps-with-apache-camel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Homepage","item":"https:\/\/blog.fabianpiau.com\/en\/"},{"@type":"ListItem","position":2,"name":"Programmation agile","item":"https:\/\/blog.fabianpiau.com\/en\/category\/agile-programming\/"},{"@type":"ListItem","position":3,"name":"First steps with Apache Camel"}]},{"@type":"WebSite","@id":"https:\/\/blog.fabianpiau.com\/en\/#website","url":"https:\/\/blog.fabianpiau.com\/en\/","name":"CarmaBlog","description":"Agility, Java programming, New technologies and more...","publisher":{"@id":"https:\/\/blog.fabianpiau.com\/en\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.fabianpiau.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/blog.fabianpiau.com\/en\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14","name":"Fabian Piau","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1","url":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1","width":567,"height":667,"caption":"Fabian Piau"},"logo":{"@id":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1"},"description":"Java developer, Fabian is interested in new technologies and their use within an Agile environment.","sameAs":["https:\/\/blog.fabianpiau.com","https:\/\/www.facebook.com\/fabian.piau","https:\/\/www.instagram.com\/fabianpiau\/","https:\/\/www.linkedin.com\/in\/fabianpiau\/","https:\/\/x.com\/fabianpiau"]}]}},"views":14002,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2012\/05\/00042.jpg?fit=279%2C279&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pbSHyl-cs","_links":{"self":[{"href":"https:\/\/blog.fabianpiau.com\/en\/wp-json\/wp\/v2\/posts\/772","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.fabianpiau.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.fabianpiau.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/en\/wp-json\/wp\/v2\/comments?post=772"}],"version-history":[{"count":0,"href":"https:\/\/blog.fabianpiau.com\/en\/wp-json\/wp\/v2\/posts\/772\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/en\/wp-json\/wp\/v2\/media\/1386"}],"wp:attachment":[{"href":"https:\/\/blog.fabianpiau.com\/en\/wp-json\/wp\/v2\/media?parent=772"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/en\/wp-json\/wp\/v2\/categories?post=772"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/en\/wp-json\/wp\/v2\/tags?post=772"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}