<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Claus Ibsen on Medium]]></title>
        <description><![CDATA[Stories by Claus Ibsen on Medium]]></description>
        <link>https://medium.com/@davsclaus?source=rss-a1d083b8ed87------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*wKxAx5UL_Bqti-VG_bhI_g.jpeg</url>
            <title>Stories by Claus Ibsen on Medium</title>
            <link>https://medium.com/@davsclaus?source=rss-a1d083b8ed87------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 16 Oct 2026 13:30:31 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@davsclaus/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Apache Camel K 1.0 is here — Why should you care]]></title>
            <link>https://medium.com/@davsclaus/apache-camel-k-1-0-is-here-why-should-you-care-42e574b2a508?source=rss-a1d083b8ed87------2</link>
            <guid isPermaLink="false">https://medium.com/p/42e574b2a508</guid>
            <category><![CDATA[knative]]></category>
            <category><![CDATA[apache-camel]]></category>
            <category><![CDATA[camelk]]></category>
            <dc:creator><![CDATA[Claus Ibsen]]></dc:creator>
            <pubDate>Wed, 10 Jun 2020 12:55:54 GMT</pubDate>
            <atom:updated>2020-06-10T12:55:54.809Z</atom:updated>
            <content:encoded><![CDATA[<h3>Apache Camel K 1.0 is here — Why should you care</h3><p>Yesterday we released Apache Camel K 1.0 and it was announced on social media and on the Camel website.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/400/0*oN1tYtN8_X8r79bF.png" /></figure><p>So what is Camel K and why should you care? That is a great question and I want to help answer this by referring to great minds.</p><p>Hugo Guerrero posted the <a href="https://twitter.com/hguerreroo/status/1270471245813907463?s=20">following tweet</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/400/0*UPLpXPFnjESo9mwz.png" /></figure><p>That is a powerful statement from Hugo, where he highlights the groundbreaking innovation from Camel K, that gives developers the tools and means to build Java based services that are both serverless and functional and runs using standard Kubernetes building blocks.</p><p>Camel K is the biggest innovation in Apache Camel for the last 10 years. So fill your cup with coffee or tea, and sit back and enjoy the next 10 minutes read.</p><p>I give the floor to Nicola Ferraro (co-creator of Camel K) whom have allowed me to re-post his blog post from the announcement yesterday.</p><p>Apache Camel K has made a lot of progress since its inception and we’re now proud to announce the 1.0 release. We’ve been working hard in the past months to add more awesome features to Camel K, but also to improve stability and performance. This post contains a list of cool stuff that you’ll find in the 1.0 GA release.</p><p>First of all, if you’re living under a rock and it’s the first time you hear about Camel K, you can read some introductory blog posts here ( <a href="https://nicolaferraro.me/2018/10/15/introducing-camel-k/">1 — introducing Camel K</a>) ( <a href="https://www.nicolaferraro.me/2018/12/10/camel-k-on-knative">2 — camel k on knative</a>) or look at the Apache Camel website that contains a <a href="https://camel.apache.org/camel-k/latest/">Camel K section</a> with a lot of material that is automatically generated from the <a href="https://github.com/apache/camel-k">Github repository</a></p><p><strong>User experience</strong></p><p>Camel K development style is minimalistic: you need just to write a single file with your integration routes and you can immediately run them on any Kubernetes cluster. This way of defining things is common to many FaaS platforms (although Camel K is not a proper FaaS platform, but a lightweight integration platform) and it’s technically difficult to provide IDE support, such as code completion and other utilities, to developers.</p><p>But now we’ve it. The integration tooling team has created some cool extensions for VS Code that make the development experience with Camel K even more exciting. You don’t need to remember the Camel DSL syntax, the IDE will give you suggestions and error highlighting.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/400/0*nI5PyNJRxo2xGqV1.gif" /></figure><p>Code completion works with Java code, but it’s not only limited to it: you also have suggestions and documentation out of the box when writing the Camel URIs and property files. And you also have many options to run integrations and interact with them, all integrated in the IDE.</p><p>Just install the VS Code <a href="https://marketplace.visualstudio.com/items?itemName=redhat.apache-camel-extension-pack">Extension Pack for Apache Camel</a> to have all these features available.</p><p><strong>Getting started tutorials</strong></p><p>Good tools are fundamental to have a great development experience with Camel K, but then you need to learn what you can do with such a great power.<br> We’ve created a new repository in the Apache organization that hosts getting started examples: the <a href="https://github.com/apache/camel-k-examples">camel-k-examples</a> repository.</p><p>So far we’ve added guides that drive you through:</p><ul><li><a href="https://github.com/apache/camel-k-examples/tree/master/01-basic">01 Basic</a>: Learn the basics of Camel K and some interesting use cases</li><li><a href="https://github.com/apache/camel-k-examples/tree/master/02-serverless-api">02 Serverless APIs</a>: How to design a serverless (i.e. auto-scaling, scaling to zero) API and run it in a few minutes</li></ul><p>The basic quickstart is <a href="https://learn.openshift.com/middleware/courses/middleware-camelk/camel-k-basic">also available online</a>, so you can have a look at how camel k works <strong>without installing anything on your laptop</strong>.</p><p>More tutorials are expected to come in the following months. You are also welcome if you want to help us by contributing your own. They are based on the <a href="https://marketplace.visualstudio.com/items?itemName=redhat.vscode-didact">VSCode Didact</a> project, that provides an awesome user experience.</p><p>If you are looking for Camel K code samples that you can just pick and run using the CLI, the <a href="https://github.com/apache/camel-k/tree/master/examples">examples directory</a> of the Camel K main repository contains a lot of them. You can also run them directly from Github:</p><p>kamel run <a href="https://raw.githubusercontent.com/apache/camel-k/master/examples/Sample.java">https://raw.githubusercontent.com/apache/camel-k/master/examples/Sample.java</a></p><p>You can find ready-to-use examples written in different languages (e.g. <a href="https://github.com/apache/camel-k/blob/5fb589090c2f45b28aef586118df48fad8838b3f/examples/hello.xml">XML</a>, <a href="https://github.com/apache/camel-k/blob/5fb589090c2f45b28aef586118df48fad8838b3f/examples/simple.js">JavaScript</a> and others).</p><p><strong>Serverless</strong></p><p>Serverless is the most important area where we’re focusing the new developments in Apache Camel K, although, you should remember, you can have a wonderful Camel K experience even without serverless features. To enable the serverless profile in Camel K, you just need to have <a href="https://knative.dev/">Knative</a> installed.</p><p>In recent releases, we have added support for the most recent advancements in Knative, for example, Camel K is very well integrated with the Knative event broker and you can easily produce or consume events from it.</p><p>With <strong>2 lines of code</strong> you can transfer events (e.g. generated by IoT devices) from your MQTT broker to the mesh:</p><p><em>bridge.groovy</em></p><p>from(‘paho:mytopic?brokerUrl=tcp://broker-address:1883&amp;clientId=knative-bridge’) <br> .to(‘knative:event/device-event’)</p><p>No kidding, you just need to write those two lines of code in a file and run it with kamel run bridge.groovy to push data into the Knative broker.</p><p>And you can also scale the Integration out (Integration is a Kubernetes custom resource, kubectl get integrations to see all of them)<br> to have a higher throughput. Scaling here is manual because the source of events is a MQTT broker (but we’ve plans to put <a href="https://github.com/apache/camel-k/issues/1107)">auto-scaling also in this scenario</a></p><p>The Camel K embedded auto-scaling feature works really well when you want to react to some Knative events:</p><p><em>listener.groovy</em></p><p>from(‘knative:event/device-event’) <br> .to(‘http://myhost/webhook/random-id&#39;)</p><p>This integration is configured to receive all events with `type=device-event` and scales automatically with the load because it is materialized into a <a href="https://knative.dev/docs/serving/spec/knative-api-specification-1.0/#service">Knative Serving Service</a> and automatically subscribed to the <a href="https://knative.dev/docs/eventing/broker/">Eventing Broker</a> via a Trigger.</p><p>It then receives a <a href="https://cloudevents.io/">CloudEvent</a> when your IoT devices produce something and scales down to zero if there’s no data coming. You just need to create it (as before, just kamel run listener.groovy), all the remaining configuration is done <strong>automatically by the Camel K operator</strong>.</p><p>We’ve added much more features for having a better integration with the Knative ecosystem and we’ve also fixed some compatibility and performance issues that were present in previous versions. The user experience is now much smoother.</p><p>If you are a Knative YAML developer (!), instead of using Camel K directly, you also have the option to use <a href="https://knative.dev/docs/eventing/samples/apache-camel-source/">Knative Camel Sources</a> which are part of the Knative release. They are wrappers for Camel K integrations that are compatible with all the tools used by Knative developers (such as the kn CLI or the OpenShift serverless console). Sources in Knative can only push data into the various Knative endpoints, but not the other way around (i.e. they cannot be used to publish data from Knative to the outside). In Camel K you don’t have this limitation: the Route is the fundamental building block of a Camel integration and you can do whatever you want with it.</p><p><strong>Fast startup and low memory</strong></p><p>We cannot say we’re serverless without mentioning the work that we’ve been doing in improving the performance of Camel K integrations.</p><p>Starting from Camel 3.3.0 which is the default version used by Camel K 1.0.0, you can benefit from all improvements that have been made directly in the Camel core to make it much more lightweight. More in depth details of the Camel core improvements can be found the following blog series that highlights what has been changed in the 3.x Camel timeline to reduce memory footprint and speedup the startup time, which is fundamental when running integrations in a serverless environment: <a href="http://www.davsclaus.com/2020/01/apache-camel-31-more-camel-core.html?m=1">part 1</a>, <a href="http://www.davsclaus.com/2020/01/apache-camel-31-more-camel-core_30.html?m=1">part 2</a> <a href="http://www.davsclaus.com/2020/02/apache-camel-31-more-camel-core.html?m=1">part 3</a>, <a href="http://www.davsclaus.com/2020/03/apache-camel-32-reflection-free.html?m=1">part 4</a>.</p><p>But improvements are not only limited to the Camel core: we’re doing much more. Several months ago we’ve started a new subproject of Apache Camel named <a href="https://github.com/apache/camel-quarkus">Camel Quarkus</a> with the goal of seamlessly running integrations on top of the Quarkus framework. As you probably know, Quarkus is able to reduce the memory footprint of Java applications and improve the startup time, because it moves much startup logic to the build phase. And Quarkus applications can also be compiled to a native binary, allowing a dramatic improvements in startup performance and very low memory footprint.</p><p>In Camel K 1.0.0 we support Camel Quarkus in JVM mode. A goal is to have also the in-cluster native compilation soon (for some DSL languages, such as YAML), in one of next releases!</p><p>To use Quarkus as underlying runtime, you just need to enable the <a href="https://camel.apache.org/camel-k/latest/traits/quarkus.html">Quarkus trait</a> when running an integration:</p><p>kamel run myintegration.groovy -t quarkus.enabled=true</p><p>Quarkus is expected to be the default underlying runtime in the next release, and support for Standalone mode (via camel-main) will be deprecated and removed. This means that you won’t need to enable Quarkus manually in the next releases, but you still need to do it in 1.0.</p><p><strong>Fast build time</strong></p><p>Every application running on Kubernetes needs to be packaged in a container image, but in Camel K you only provide the integration DSL and the operator does what it takes to run it, including building images directly in the cluster.</p><p>The operator manages a pool of reusable container images and if you redeploy your integration code, it does try to reuse existing images from the pool rather than building a new one at each change, because it takes some time to build a new one. It was 1 minute at the beginning…</p><p>But Kubernetes is moving so fast that you cannot solve a problem once and forget about it, you need to take care of it continuously. It happened that some of our third party dependencies that we used for doing builds in “vanilla Kube” has slowly degraded in performance up to a point where Camel K user experience was highly affected.</p><p>We decided to work harder on the build system in order to dramatically improve (again!) the build phase of Camel K integrations.</p><p>Build time can be be now measured in seconds in dev environments such as Minikube. A bunch of seconds, most of the times. This is more than a simple improvement!</p><p>The ‘kamel’ CLI is the main tool we provide to developers to run integrations. It’s not a mandatory requirement: at the end, an Integration is a Kubernetes custom resources and you can manage it with any Kubernetes standard tool (e.g. kubectl). But the kamel CLI adds a lot of value for integration developers.</p><p>For example, if you’re a Camel Java developer it’s not super easy to remember the boilerplate that you have to write in order to instantiate a Camel route builder. Now you don’t have to remember that:</p><p>kamel init Handler.java</p><p>You get a Java file with all the boilerplate written for you and you just have to write your integration routes.</p><p>It works also with all other languages: Groovy, XML, YAML, Kotlin and JavaScript. For example you can write:</p><p>kamel init foo.js</p><p>This way you get a simple route written in JavaScript.</p><p>It’s not just that. Often Camel K developers need to add a lot of command line options to configure the final behavior of their integration. For example, you may want to add a custom library with the `-d` option or configure a trait with `-t`. E.g.:</p><p>kamel run -d mvn:org.my:lib:1.0.0 -d mvn:org.my:otherlib:2.0.0 -t quarkus.enabled=true Handler.java</p><p>Sometimes the number of command line parameters you’ve to add can become too many. For this reason we’ve added the possibility to specify them as modeline options in the integration file (done by adding a comment line with `camel-k:` as prefix).</p><p><em>Handler.java</em></p><p>// camel-k: dependency=mvn:org.my:lib:1.0.0 dependency=mvn:org.my:otherlib:2.0.0 trait=quarkus.enabled=true <br> // …<br> // your routes here</p><p>Once the options are written in the file, you can run the routes with just:</p><p>// simply this, additional args are read from the file <br> kamel run Handler.java</p><p>The other options are taken automatically from the file modeline. The CLI also displays the full command to let you know what’s running.</p><p>This kind of configuration is extremely useful in CI/CD scenarios because it allows you to have self-contained integration files and you don’t need to change the pipeline to setup additional options. If you’re curious about the CI/CD configurations, you can follow the <a href="https://camel.apache.org/camel-k/latest/tutorials/tekton/tekton.html">tutorial about Tekton pipelines</a> to have more information.</p><p><strong>Monitoring and Tracing</strong></p><p>Ok, you’ve finished level 1 of Camel K development and you want to make serious things. You’re in a very good position because Camel K provides a lot of useful tools to add visibility on what your integration routes are doing.</p><p>Let’s suppose you’ve a <a href="https://prometheus.io/">Prometheus</a> instance in your namespace and you want to publish your integration metrics:</p><p>kamel run Routes.java -t prometheus.enabled=true</p><p>That’s it. No need to setup services a labels to enable scraping. A default prometheus configuration file is also provided for the integration, with sensible defaults. Of course you also have the option to provide <a href="https://camel.apache.org/camel-k/latest/traits/prometheus.html">your own configuration</a> for advanced use cases.</p><p>Now, let’s suppose you want to see what your routes are doing and trace the execution flow of an integration. What you need to do is to install an opentracing compatible application in the namespace, such as <a href="https://www.jaegertracing.io/">Jaeger</a>, and run the integration as:</p><p>kamel run Routes.java -t prometheus.enabled=true -t tracing.enabled=true</p><p>That’s it again. The Camel K operator will add the <a href="https://camel.apache.org/components/latest/others/opentracing.html">camel-opentracing</a> library and connect it to the Jaeger collector that is available in the namespace. Here again, <a href="https://camel.apache.org/camel-k/latest/traits/tracing.html">advanced use cases</a> are supported.</p><p><strong>Master routes</strong></p><p>Good old Camel users know why and when master routes are useful, but for those who are not familiar with the term, I’m going to provide a brief explanation.</p><p>Whenever you have an integration route that must be running, at any point in time, in at most one single Camel instance, you need to use a master route. Master routes can be declared by simply prefixing the consumer endpoint by the ‘master’ keyword and a name that will be used to create a named lock, e.g.</p><p>from(‘master:mylock:telegram:bots’) <br> .to(‘log:info’)</p><p>It can be used to print all messages that are sent to your Telegram bot. Since the Telegram API support a single consumer only, you can guard the route with a master prefix to have the guarantee that there will be at most only one consumer at any given time.</p><p>If you’re wondering how there can be two instances running of you deploy one, well, think just to when you change your code and need to do a rolling update: for some time there’ll be two pods running in parallel. In some cases, you may decide to scale your service out but keep only one instance of a particular route among all the pods of your service. Or you may want to embed a master route in a Knative autoscaling service: in this case, the service can scale autonomously based on the load, but there’ll be only one telegram consumer at any time.</p><p>Master routes work out of the box in Camel K, you just need to put a prefix in your endpoint uri. A leader election protocol based on Kubernetes APIs resource locks will be automatically configured for you!</p><p><strong>CronJobs</strong></p><p>All complex enough systems contain several scheduled jobs. This is especially true for that part of the system that handles integration with the outside.</p><p>Ideally, if you need to execute a quick periodic task, say, every two seconds, you would startup an integration with a route based on timer to execute the periodic task. E.g.</p><p>from(“timer:task?period=2000”) <br> .to(this, “businessLogic”)</p><p>But if the period between two executions, instead of 2 seconds (“2000” in the Camel URI, which is measured in milliseconds) is 2 minutes (“120000”) or 2 hours (“7200000”)?</p><p>You can see that keeping a container with a JVM running for a task that should be executed once every two minutes may be overkill (it is overkill for sure when the period is 2 hours). We live in a time where resources such as memory and CPU are really valuable.</p><p>So the Camel K operator automatically handles this situation by deploying your integration not as a Kubernetes deployment, but as a Kubernetes CronJob. This saves a lot of resources, especially when the period between executions is high. When it’s time to run your integration code, a container starts, triggers the execution and then gracefully terminates. Everything is handled automatically by Camel K and Kubernetes.</p><p>There are cases when you don’t want this feature to be enabled, for example, when your code makes use of in memory caches that is better to keep between executions. In these cases, you can safely turn off the feature by passing the flag `-t cron.enabled=false` to the `kamel run` command.</p><p>The Cron feature does not only work with the `timer` component. We’ve also added a <a href="https://camel.apache.org/components/latest/cron-component.html">cron component</a> since Camel 3.1 that works really well in combination with the <a href="https://camel.apache.org/camel-k/latest/traits/cron.html">cron trait</a>.</p><p>So you can also write the cron expression in the route directly:</p><p>from(“cron:job?schedule=0/5+*+*+*+?”) <br> .to(this, “businessLogic”)</p><p>In this case, a new pod with a JVM is started every 5 minutes to execute your scheduled task. For the remaining 4+ minutes you don’t use any resource.</p><p><strong>Transparency</strong></p><p>Camel K does a lot of work for you when you run your integration code in the cluster and it’s possible that you put some errors in the code that can block the deployment process. We’ve added a lot of visibility on the deployment process that now communicates with the users via Kubernetes events that are printed to the console when you use the CLI.</p><p>This way you’re always notified of problems in the code and you can better understand what to fix to make your integration run.</p><p><strong>How to try Camel K 1.0</strong></p><p>The first step is to go to the <a href="https://dist.apache.org/repos/dist/release/camel/camel-k/1.0.0/">Apache Camel K release page</a>, download the kamel CLI for your OS and put it in your system path.</p><p>Installation is done usually using the `kamel install` command, but, depending on the kind of Kubernetes cluster you’re using, you may need to execute additional configuration steps.<br> The Camel K documentation contains a section about <a href="https://camel.apache.org/camel-k/latest/installation/installation.html">installing it on various types of Kubernetes clusters</a>.</p><p>If you have trouble or you need to install it on a particular cluster that is not listed, just reach out in the <a href="https://gitter.im/apache/camel-k">Gitter chat</a> and we’ll do our best to help you.</p><p><strong>Future</strong></p><p>We’ve reached version 1.0.0 and this is a great milestone for us. But we are not going to stop now: we’ve big plans for the future and we’ll continue to develop awesome new features.</p><p>We need your help to improve Camel K and we love contributions!</p><p>Join us on:</p><p>- Gitter: <a href="https://gitter.im/apache/camel-k">https://gitter.im/apache/camel-k</a><br> — GitHub: <a href="https://github.com/apache/camel-k">https://github.com/apache/camel-k</a></p><p><em>Originally published at </em><a href="http://www.davsclaus.com/2020/06/apache-camel-k-10-is-here-why-should.html"><em>http://www.davsclaus.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=42e574b2a508" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Tech Talk tomorrow (friday) — What’s new with Apache Camel 3?]]></title>
            <link>https://medium.com/@davsclaus/tech-talk-tomorrow-friday-whats-new-with-apache-camel-3-852a67e72cd0?source=rss-a1d083b8ed87------2</link>
            <guid isPermaLink="false">https://medium.com/p/852a67e72cd0</guid>
            <category><![CDATA[apache-camel]]></category>
            <category><![CDATA[webinar]]></category>
            <dc:creator><![CDATA[Claus Ibsen]]></dc:creator>
            <pubDate>Thu, 04 Jun 2020 08:22:13 GMT</pubDate>
            <atom:updated>2020-06-04T08:22:13.644Z</atom:updated>
            <content:encoded><![CDATA[<h3>Tech Talk tomorrow (friday) — What’s new with Apache Camel 3?</h3><p>Tomorrow myself and Andrea Cosentino is presenting a tech talk whats new in Apache Camel 3.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/430/1*fzfC_wuucxSWkKMHcpZioQ.png" /></figure><p>Date: June 5, 2020<br> Time: 13:00 UTC / 15:00 CET / 9:00 AM EDT</p><p><a href="https://camel.apache.org/">Apache Camel</a> is a leading open source integration framework that has been around for more than a decade.</p><p>With the release of Apache Camel 3, the Camel family has been extended to include a full range of projects that are tailored to popular platforms including Spring Boot, Quarkus, Kafka, Kubernetes, and others; creating an ecosystem.</p><p>Join this webinar to learn what’s new in Camel 3 and about Camel projects:</p><ul><li>Latest features in Camel 3</li><li>Quick demos of Camel 3, Camel Quarkus, Camel K, and Camel Kafka Connector</li><li>Present insights into what’s coming next</li></ul><p><a href="https://developers.redhat.com/devnation/tech-talks/apache-camel-3/?sc_cid=7013a000002DYICAA4">Registration required at following link</a>.</p><p><em>Originally published at </em><a href="http://www.davsclaus.com/2020/06/tech-talk-tomorrow-friday-whats-new.html"><em>http://www.davsclaus.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=852a67e72cd0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Best Practices for Middleware and Integration Architecture Modernization with Apache Camel]]></title>
            <link>https://medium.com/@davsclaus/best-practices-for-middleware-and-integration-architecture-modernization-with-apache-camel-7c1e4ac57f42?source=rss-a1d083b8ed87------2</link>
            <guid isPermaLink="false">https://medium.com/p/7c1e4ac57f42</guid>
            <category><![CDATA[knative]]></category>
            <category><![CDATA[integration]]></category>
            <category><![CDATA[kubernetes]]></category>
            <category><![CDATA[quarkus]]></category>
            <category><![CDATA[apache-camel]]></category>
            <dc:creator><![CDATA[Claus Ibsen]]></dc:creator>
            <pubDate>Wed, 25 Mar 2020 08:42:09 GMT</pubDate>
            <atom:updated>2020-03-25T08:42:09.722Z</atom:updated>
            <content:encoded><![CDATA[<p>Yesterday I gave the following virtual talk at the <a href="https://www.meetup.com/Stockholm-FullStack-SecDevOps-Engineering-Meetup/events/269204017/">Stockholm Meetup</a>.</p><p><strong>Best Practices for Middleware and Integration Architecture Modernization with Apache Camel</strong></p><blockquote><em>What are important considerations when modernizing middleware and moving towards serverless and/or cloud native integration architectures? How can we make the most of flexible technologies such as Camel K, Kafka, Quarkus and OpenShift. Claus is working as project lead on Apache Camel and has extensive experience from open source product development.</em></blockquote><p>I thank the organizers Forefront Consulting for inviting me. Unfortunately there was a glitch with the talk yesterday. As I could not be in person then the talk was pre-recorded and was cut half way. So I promised to post a blog today and upload the talk to <a href="https://www.youtube.com/watch?v=d1Hr78a7Lww">youtube</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/682/1*xkWgyUBG-6BmzLD4buU_HA.png" /><figcaption><a href="https://www.youtube.com/watch?v=d1Hr78a7Lww">https://www.youtube.com/watch?v=d1Hr78a7Lww</a></figcaption></figure><p>The title and abstract of the talk was somewhat given to me, and so was the session length of 30 minutes. As I am so heavily invested in Apache Camel, then I focused the talk about Camel and its evolution over the last 10 years as introduction and then using the latest innovations from Camel K, Camel Quarkus and Camel Kafka Connectors as the meat of the talk, and with 3 demos.</p><p>The talk can be <a href="https://www.youtube.com/watch?v=d1Hr78a7Lww">watched on youtube</a> and the <a href="https://www.slideshare.net/davsclaus/best-practices-for-middleware-and-integration-architecture-modernization-with-apache-camel">slides are here</a>.</p><p><em>Originally published at </em><a href="http://www.davsclaus.com/2020/03/best-practices-for-middleware-and.html"><em>http://www.davsclaus.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7c1e4ac57f42" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Upcoming Webinar — What’s new in Apache Camel 3]]></title>
            <link>https://medium.com/@davsclaus/upcoming-webinar-whats-new-in-apache-camel-3-416d2186d1ca?source=rss-a1d083b8ed87------2</link>
            <guid isPermaLink="false">https://medium.com/p/416d2186d1ca</guid>
            <category><![CDATA[apache-camel]]></category>
            <category><![CDATA[webinar]]></category>
            <dc:creator><![CDATA[Claus Ibsen]]></dc:creator>
            <pubDate>Thu, 27 Feb 2020 10:19:06 GMT</pubDate>
            <atom:updated>2020-02-27T10:19:06.810Z</atom:updated>
            <content:encoded><![CDATA[<h3>Upcoming Webinar — What’s new in Apache Camel 3</h3><p>On March 3rd, at 3pm CET (Central European Timezone) I will co-host, together with Andrea Cosentino, a webinar session for 1 hour, where we cover all the great new features that are in the Apache Camel v3 release.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/691/1*_p6mYEPtfZJrbkrDip99pw.png" /></figure><p>Andrea and I will cover in more details the high level goals of Apache Camel 3, and focus on the key elements about making Camel smaller, lighter, and faster for the cloud native world. So you will find details about what we have done internally to make this happen.</p><p>We also cover and introduce Camel K, Camel Quarkus and Camel Kafka Connector where we have 4 live demos ready for you. And finally we present the roadmap for the upcoming releases.</p><p>At the end we have Q&amp;A session where we will assist and answer as many questions you may have.</p><p>The webinar is free to attend, but requires registration, as the webinar is run by professional media company.</p><p><a href="https://www.redhat.com/en/events/webinar/apache-camel-3-here-whats-new?sc_cid=7013a000002DMQhAAO">More details and registration here</a>.</p><p>PS: Yes we will cover details up till the latest Camel 3.1 release which is going to be released today ;)</p><p><em>Originally published at </em><a href="http://www.davsclaus.com/2020/02/upcoming-webinar-whats-new-in-apache.html"><em>http://www.davsclaus.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=416d2186d1ca" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Apache Camel 3.1 — More camel-core optimizations coming (Part 2)]]></title>
            <link>https://medium.com/@davsclaus/apache-camel-3-1-more-camel-core-optimizations-coming-part-2-d29c16046e87?source=rss-a1d083b8ed87------2</link>
            <guid isPermaLink="false">https://medium.com/p/d29c16046e87</guid>
            <category><![CDATA[apache-camel]]></category>
            <dc:creator><![CDATA[Claus Ibsen]]></dc:creator>
            <pubDate>Fri, 31 Jan 2020 08:23:48 GMT</pubDate>
            <atom:updated>2020-01-31T08:23:48.217Z</atom:updated>
            <content:encoded><![CDATA[<h3>Apache Camel 3.1 — More camel-core optimizations coming (Part 2)</h3><p>I have previously <a href="https://medium.com/@davsclaus/apache-camel-3-1-more-camel-core-optimisations-coming-d1cbb9d2c5ba">blogged about the optimizations we are doing in the next Camel 3.1 release (part 1).</a></p><p>Today I wanted to post a status update on the progress we have made since, about 4 weeks later.</p><p>We have focused on optimizing camel-core in three areas:</p><ul><li>unnecessary object allocations</li><li>unnecessary method calls</li><li>improve performance</li></ul><p>In other words we are making Camel create less objects, calling fewer methods, and improving the performance during routing.</p><p>To help identify these issues in camel-core we were using a simple Camel route:</p><p>And other times we focused on longer routes:</p><p>Or the focus on the bean component:</p><p>And so on. We also added an option to the timer component to not include metadata so the message dont contain any body, headers or exchange properties. This allowed us to focus on the pure routing engine and its overhead.</p><p>So all together this has helped identify many smaller points for improvements that collectively gains a great win.</p><p><strong>tl:dr — Show me the numbers</strong></p><p>Okay let’s post some numbers first and then follow up with details what has been done.</p><p><strong>Object Allocations — (5 minute sampling)</strong></p><ul><li>Camel v2.25 — 2.9 M objects created</li><li>Camel v3.0 — 55.0 M objects created</li><li>Camel v3.1 — 1.8 M objects created</li></ul><p>Okay we have to admit that Camel 3.0 has an issue with excessive object allocations during routing. There are no memory leaks but it creates a lot of unnecessary objects. And I will get into details below why.</p><p>However what is interesting is the gain between Camel 2.25 and 3.1 (40% less objects created).</p><p><strong>Method Calls — (5 minute sampling)</strong></p><ul><li>Camel v2.25 — 139 different Camel methods in use</li><li>Camel v3.0 — 167 different Camel methods in use</li><li>Camel v3.1 — 84 different Camel methods in use</li></ul><p>The bullet list above lists the number of methods from Camel that Camel calls during routing. The data does not include all the methods from the JDK. As we cannot optimize those, but we can optimize the Camel source code.</p><p>As you can see from the table we have improvement. Camel 3.1 uses less than half of 3.0, and 40% less than Camel 2.2.5.</p><p>Okay so Camel 3.0 has a problem with using too much memory. A big reason is the new reactive executor which now executes each step in the routing via event looping, by handing over tasks to a queue and having workers that execute the tasks. So this handoff now requires creating additional objects and storing tasks in queue etc.</p><p>Some of the biggest wins was to avoid creating TRACE logging message which unfortunately was always created regardless if TRACE logging level was enabled. Another big win was to avoid creating toString representation of the route processes with child elements. Instead Camel now only output the id of the process which is a fast operation and dont allocate new objects.</p><p>Another problem was new code that are using java.util.stream. This is both a blessing and a curse (mostly a curse for fast code). So by using plain for loops, if structures, and avoiding java.util.stream in the critical parts of core routing engine we reduces object allocations.</p><p>Camel 3 is also highly modularised, and for example in Camel 2.x we had all classes in the same classpath and could use instanceof checks. So in Camel 3 we had some code that performed poorly doing these kind of checks (java util streams again).</p><p>Another problem was the reactive executor which was using a LinkedList as its queue. So if you have tasks going into the queue and workers processing them in the same pace, so the queue is empty/drained, then LinkedList performs poorly as it allocates/deallocates the object constantly. By switching to a ArrayQueue which has a pre-allocated size of 16 then there is always room in the queue for tasks and no allocation/deallocation happens.</p><p>There are many more optimisations but those mentioned above where likely the biggest problems. Then a lot of smaller optimisations gained a lot combined.</p><p><strong>Many smaller optimisations</strong></p><p>The UUID generator of Camel is using a bit of string concat which costs. We have reduced the need for generating UUIDs in the message and unit of work so we only generate 1 per exchange.</p><p>The internal advices in the Camel routing engine (advice = before/after AOP). Some of these advices has state which they need to carry over from before to after, which means an object needs to be stored. Before we allocated an array for all advices even for those whom do not have state and thus storing a null. Now we only allocate the array with the exact number of advices that has state. (very small win, eg object[6] vs object[2] etc, but this happens per step in the Camel route, so it all adds up.). Another win was to avoid doing an AOP around UnitOfWork if it was not necessary from the internal routing processor. This avoids additional method calls and to allocate a callback object for the after task. As all of this happens for each step in the routing then its a good improvement.</p><p>Some of the most used EIPs has been optimized. For example allows you to send the message to an endpoint using a different MEP (but this is rarely used). Now the EIP detects this and avoids creating a callback object for restoring the MEP. The pipeline EIP (eg when you do to -&gt; to -&gt; to) also has a little improvement to use an index counter instead of java.util.Iterator, as the latter allocates an extra object</p><p>Camel also has a StopWatch that used a java.util.Date to store the time. This was optimized to use a long value.</p><p>Another improvement is the event notification. We now pre-calculate if its in use and avoid calling it all together for events related to routing messages. BTW in Camel 3.0 the event notifier was refactored to use Java 8 Supplier’s and many fancy APIs but all of that created a lot of overhead. In Camel 3.1 we have restored the notifier to be like before in Camel 2.x and with additional optimisations.</p><p>So let me end this blog by saying that …. awesome. Camel 3.1 will use less memory, execute faster by not calling as many methods (mind that we may have had to move some code which was required to be called but doing this in a different way to avoid calling too many methods).</p><p>One of the bigger changes in terms of touched source code was to switch from using an instance based logger in ServiceSupport (base class for many things in Camel), to use a static logger instance. This means that there will be less Logger objects created and it’s also better practice.</p><p>Other improvements is that we have moved some of the internal state that Camel kept as exchange properties to fields on the Exchange directly. This avoids storing a key/value in the properties map, but we can use primitives like boolean, int etc. This also performs better as its faster to get a boolean via a getter than to lookup the value in a Map via a key.</p><p>In fact in Camel 3.1 then during regular routing then Camel doesnt lookup any such state from exchange properties which means there is no method calls. There are still some state that are stored as exchange properties (some of those may be improved in the future, however most of these states are only used infrequently). What we have optimized is the state that are always checked and used during routing.</p><p><strong>Exchange getProperty(5 minute sampling)</strong></p><ul><li>Camel v2.25<br>572598 getPropety(String)<br>161502 getPropety(String, Object)<br>161502 getPropety(String, Object, Class)<br>141962 getPropeties()</li><li>Camel v3.0<br>574944 getProperty(String)<br>167904 getPropety(String, Object)<br>167904 getPropety(String, Object, Class)<br>91584 getPropeties()</li><li>Camel v3.1<br>0 getProperty(String)<br>0 getPropety(String, Object)<br>0 getPropety(String, Object, Class)<br>0 getPropeties()</li></ul><p>As you can see Camel 2.25 and 3.0 lookup this state a lot. And in Camel 3.1 we have optimized this tremendously and there are no lookup at all — as said the state is stored on the Exchange as primitive types which the JDK can inline and execute really fast.</p><p>The screenshot below shows Camel 2.25 vs 3.1. (The screenshot for 3.1 is slightly outdated as it was from yesterday and we have optimised Camel since). See screenshot below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/0*Xm1D57e-Dd7eYdDq.png" /></figure><p>Okay there are many other smaller optimizations and I am working on one currently as I write this blog. Okay let me end this blog, and save details for part 3.</p><p><em>Originally published at </em><a href="http://www.davsclaus.com/2020/01/apache-camel-31-more-camel-core_30.html"><em>http://www.davsclaus.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d29c16046e87" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Apache Camel 3.1 — More camel-core optimisations coming]]></title>
            <link>https://medium.com/@davsclaus/apache-camel-3-1-more-camel-core-optimisations-coming-d1cbb9d2c5ba?source=rss-a1d083b8ed87------2</link>
            <guid isPermaLink="false">https://medium.com/p/d1cbb9d2c5ba</guid>
            <category><![CDATA[apache-camel]]></category>
            <dc:creator><![CDATA[Claus Ibsen]]></dc:creator>
            <pubDate>Fri, 03 Jan 2020 19:31:21 GMT</pubDate>
            <atom:updated>2020-01-03T19:31:21.605Z</atom:updated>
            <content:encoded><![CDATA[<h3>Apache Camel 3.1 — More camel-core optimisations coming</h3><p>Hope all is good and you had a safe entry into 2020.</p><p>The Camel team is already busy working on the next Camel 3.1 version. One of the goals is to continue optimize camel-core, and this time we have had some time to look into finding some hot spots in the routing engine.</p><p>One of the aspects we have looked at is also the object allocations that occurs per message that Camel routes. The JVM itself is great at allocation objects and garbage collecting them when they are no longer in use. However there are room for improvements if you can identify a number of objects that is unnecessary per EIP in the route.</p><p>So today I found several of these by just running a basic Camel route that is</p><blockquote>from(timer:foo?period=1&quot;)<br>.to(“log:foo”);</blockquote><p>Which basically routes 1000 messages per second. And prints each message to the log.</p><p>One of the bigger culprits in object allocations turned out to be human logging for the reactive executor which logs at TRACE level. So by avoiding this we can reduce a great deal of allocations, and string building for logging messages.</p><p>Other aspects we have optimised is the to EIP (the most used EIP) which is now smarter in its startup to avoid creating caches that was not necessary. And this goes together with areas where we now lazy creates some features in Camel that were very rarely in use that would otherwise also setup and create some caches.</p><p>We also identified as part of the Camel 3 work, then the LRUCache was not pre warmed up as early as before, which meant Camel would startup a bit slower than it otherwise are capable of. So by moving this warmup to an earlier phase then Camel can startup faster by doing concurrent work on startup until the LRUCache is warmed up (its caffeine cache that needs this).</p><p>The log component has also been optimised to reduce its object allocations which building the logging message.</p><p>So all together a great day and if we compare startup up a Camel 3.0.0 vs 3.1.0-SNAPSHOT with the Camel route as shown above, then we have an awesome reducing in object allocations per second (thanks to YourKit for profiler).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*b6MujtxqjqV8k9BRCtZXHw.png" /></figure><p>The profile says that in Camel 3.0.0 then Camel would roughly generate about 22.000 objects per second (routing 1000 messages). And that has been reduced to about 6.000 objects per second in Camel 3.1. That is fantastic, and is almost a 4x reduction.</p><p><em>Originally published at </em><a href="http://www.davsclaus.com/2020/01/apache-camel-31-more-camel-core.html"><em>http://www.davsclaus.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d1cbb9d2c5ba" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Apache Camel in numbers 2019]]></title>
            <link>https://medium.com/@davsclaus/apache-camel-in-numbers-2019-84eedfdfd29a?source=rss-a1d083b8ed87------2</link>
            <guid isPermaLink="false">https://medium.com/p/84eedfdfd29a</guid>
            <category><![CDATA[integration]]></category>
            <category><![CDATA[apache-camel]]></category>
            <category><![CDATA[open-source-software]]></category>
            <dc:creator><![CDATA[Claus Ibsen]]></dc:creator>
            <pubDate>Wed, 01 Jan 2020 09:45:53 GMT</pubDate>
            <atom:updated>2020-01-01T09:45:53.620Z</atom:updated>
            <content:encoded><![CDATA[<p>It’s the time of the year where we take a look back at 2019, and compile a brief summary of the <a href="https://camel.apache.org/">Apache Camel</a> project.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*i-xUyWiqnjd5Ap0UvtaSTQ.jpeg" /></figure><p>The big news of 2019 was the much anticipated release of <a href="https://camel.apache.org/blog/Camel3-Whatsnew/">Apache Camel </a>3.</p><h3>Family of projects</h3><p>It was also in 2019 that the Camel project became a family of projects by introducing:</p><ul><li>Camel K</li><li>Camel Quarkus</li></ul><p>Making Apache Camel a trilogy. But it does not stop there; in early 2020 three will become five when we release:</p><ul><li>Camel Kafka Connector</li><li>Camel Spring Boot (moved out from main repository)</li></ul><h3>Camel 2019 in Numbers</h3><p>Number of Camel releases in 2019: <strong>21</strong></p><p>Number of Camel K and Camel Quarkus releases in 2019: <strong>15</strong></p><p>Number of posts on Camel user forum in 2019: <strong>1305</strong></p><p>Number of gitter chat users at end of 2019: <strong>691</strong></p><p>Number of commits in 2019: <strong>6734</strong> [1]</p><p>Total number of JIRA tickets created at end of 2019: <strong>14340</strong></p><p>Number of JIRA tickets created in 2019: <strong>1306</strong></p><p>Number of JIRA tickets resolved in 2019: <strong>1379</strong></p><p>Stackoverflow number of questions at end of 2019: <strong>9311</strong></p><p>Stackoverflow number of watchers at end of 2019: <strong>2.1k</strong></p><p>Number of stars on github at end of 2019: <strong>3031</strong></p><p>Total number of commits at end of 2019: <strong>41164</strong></p><p>Total number of contributors on github at end of 2019: <strong>555</strong></p><p>Number of individual committers doing commits in 2019: <strong>218</strong> [2]</p><p>Number of closed pull requests at end of 2019: <strong>3434</strong></p><p>Number of closed pull requests in 2019: <strong>482</strong></p><p>Number of <a href="https://twitter.com/ApacheCamel">Twitter followers</a> at end of 2019: <strong>1033</strong></p><p>The Apache Software Foundation recently posted a summary of the most active projects in 2019 and Apache Camel was ranked in the top 5 by commits and github traffic.</p><p>Happy New Year and 2020 is going to be a great year for Apache Camel with Camel Kafka Connector, Camel K and Camel Quarkus all in the works and to be released as production ready 1.0 releases.</p><blockquote>#1 git shortlog -ns — since 2019–01–01 — until 2020–01–01 | cut -c1–7 | awk ‘{ SUM += $1} END { print SUM }’<br>#2 git shortlog — since 2019–01–01 — until 2020–01–01 -ns | wc -l</blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=84eedfdfd29a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Top 10 of What’s New in Apache Camel 3]]></title>
            <link>https://medium.com/@davsclaus/top-10-of-whats-new-in-apache-camel-3-aafb9c5593ae?source=rss-a1d083b8ed87------2</link>
            <guid isPermaLink="false">https://medium.com/p/aafb9c5593ae</guid>
            <category><![CDATA[knative]]></category>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[quarkus]]></category>
            <category><![CDATA[apache-camel]]></category>
            <category><![CDATA[integration]]></category>
            <dc:creator><![CDATA[Claus Ibsen]]></dc:creator>
            <pubDate>Mon, 02 Dec 2019 00:00:00 GMT</pubDate>
            <atom:updated>2019-12-02T19:19:22.755Z</atom:updated>
            <content:encoded><![CDATA[<p><a href="https://camel.apache.org/blog/release-3-0-0.html">Apache Camel 3 was released last thursday November 28th 2019</a>, which also happens to be the day of the US Thanksgiving. This was not intentionally but we can say its a big thanks from us to the community with a brand new major version of Camel — this does not come by often. In fact it’s 10 years since Camel 2 hit the streets. So this 3rd generation is long overdue.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*9HqgFzk0e7-sZhhd.png" /></figure><p>This blog post highlights the noteworthy new features and improvements in Camel v3.</p><h3>1) Camel is now a family of projects</h3><p><a href="https://camel.apache.org/">Apache Camel</a>, is now a family of projects (3 at this time of writing).</p><ul><li><a href="https://github.com/apache/camel">Camel 3</a>: <strong>Integration Framework<br></strong><em>Swiss knife of integration</em></li><li><a href="https://github.com/apache/camel-k/">Camel K</a>: <strong>Lightweight Serverless Integration Platform<br></strong><em>Camel on Kubernetes &amp; Knative</em></li><li><a href="https://github.com/apache/camel-quarkus">Camel Quarkus</a>: <strong>Camel extensions for Quarkus<br></strong><em>Optimised JVM &amp; Native compiled Java (GraalVM)</em></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*1LK23ZBMgD5yJQv2.png" /></figure><p>The Camel code-base is very large, and we have setup sub-projects for new innovative projects using Camel. The first sub-project was to run Camel as cloud-native on Kubernetes in a serverless manner which became Camel K. Then Camel Quarkus came to make Java and Camel with very fast startup and very small memory footprint primary for container based deployments.</p><h3>2) New Website</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*INmEgZb9KzhnIV_T.png" /></figure><p>A major goal for Camel 3 was to finally revamp the old website to use modern technologies and be able to auto-generate content from the source code. This has taken years to get to this point as we have built tools over the last many Camel 2.x releases that could take us closer. At end of 2019 then the Camel community and others stepped up and provided the new art-work, logo, and look and feel for the new website — thank you very much!.</p><p>For Camel 3.x we will continue to improve the website and the documentation. This is much easier for us to do, and also for people to contribute changes as its just a regular github PR to provide updates. We love contributions.</p><p>Zoran had some fun with the new look and feel and he added a little gem; if you stare at the front page, then you should see a little animation of the curved bezel ;)</p><h3>3) Java 11</h3><p>Camel 3 is the first official release that supports Java 11. Java 8 will still be supported for the first number of 3.x releases, but is expected to be dropped later in 2020. However we wanted to provide Java 8 support to help migrate Camel 2.x users whom may be restricted to Java 8 for some time to come.</p><h3>4) Modularized camel-core</h3><p>The camel-core has been modularized from 1 JAR to 33 JARs. The core functionality has been split up into:</p><p>camel-api<br>camel-base<br>camel-caffeine-lrucache<br>camel-cloud<br>camel-core<br>camel-core-engine<br>camel-core-osgi<br>camel-core-xml<br>camel-endpointdsl<br>camel-headersmap<br>camel-jaxp<br>camel-main<br>camel-management-api<br>camel-management-impl<br>camel-support<br>camel-util</p><p>For Camel end users then only a few JARs is relevant.</p><p><strong>camel-api</strong> contains the public API for Camel (eg interfaces such as CamelContext, Endpoint, Exchange, Message, and son on).</p><p><strong>camel-support</strong> contains the base classes and RouteBuilder which you would use to build Camel routes and applications. This JAR is also contains necessary base classes for building custom Camel components, and other kinds of plugins.</p><p>The components that resided in camel-core has also be externalized into individual components:</p><p>came-bean<br>camel-log<br>camel-stub<br>camel-browse<br>camel-mock<br>camel-timer<br>camel-controlbus<br>camel-properties<br>camel-validator<br>camel-dataformat<br>camel-ref<br>camel-vm<br>camel-direct<br>camel-rest<br>camel-xpath<br>camel-directvm<br>camel-saga<br>camel-xslt<br>camel-file<br>camel-scheduler<br>camel-zip-deflater<br>camel-language<br>camel-seda</p><p>Camel end users can then pick and choose exactly only what they need, or keep using everything.</p><p>Therefore we have camel-core and camel-core-engine as two starting dependencies. You can use camel-core which gives you all the JARs which is similar to Camel 2.x. When you use camel-core-engine you get the minimum set of JARs that makes a functional Camel.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*rwhefQT9gnhGUPBC.png" /></figure><p>camel-core contains 33 JARs and camel-core-engine contains 12 JARs.</p><h3>5) Faster startup and lower footprint</h3><p>We have reduced the size of core Camel and the number of classes loaded. For example in Camel 2 about 5200 classes was loaded, which has been reduced to about 4300 loaded classes in Camel 3.</p><p>We have also done many smaller optimizations in the core, to reduce the number of allocated Java objects, and speeup initialization and other means. We have used JVM profiling tools to assist and find the bottlenecks.</p><p>Another area of improvement is to reduce Java reflections. In Camel 2 then all the configuration of Camel components, endpoints, and routes are reflection based. In Camel 3 we have source code generated Java code for configuration that allows us to use direct Java calls instead of reflections.</p><p>Another similar area is Camel’s type converters which in Camel 2 are Java reflection based (you could build custom type converts that was not reflection based. In Camel 3 we also generate Java source code which means that type converting is direct Java calls at runtime.</p><p>We have also moved initialization logic to earlier phases when it was possible. For example there is a new build phase which allows Camel to do special initialization during building your project (this requires Camel Quarkus).</p><p>All this optimization improves the startup performance of Camel and reduces the memory overhead. With Camel Quarkus you can native compiled your Camel application and make it startup in 30 milli seconds and consume only 10mb of memory (RSS) with a full blow HTTP REST server and health-checks and metrics.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*nacjOuiztabZZf1c.png" /></figure><p>There are still a few items still on the agenda that we want to work on in Camel 3.x to further optimize Camel core.</p><h3>6) Type Safe Endpoint DSL</h3><p>Camel end users whom has configured endpoints using URI strings, would all have experience the problem when you make a configuration mistake in the endpoint, which then makes Camel fail on startup.</p><p>In Camel 3, we have a new type-safe DSL for endpoints which you can use in Java routes. You can continue to use the classic URI strings, but if you want to try the endpoint DSL, then you need to add camel-endpointdsl to your classpath. Then you should extend EndpointRouteBuilder instead of RouteBuilder to access the endpoint DSL.</p><p>Here is a basic example without and with the endpoint DSL:</p><pre>from(&quot;timer:click?period=3000&amp;fixedRate=true&quot;)<br>    .to(&quot;seda:foo?blockWhenFull=true&quot;); </pre><pre>from(timer(&quot;click&quot;).period(3000).fixedRate(true))<br>    .to(seda(&quot;foo&quot;).blockWhenFull(true));</pre><p>You can also find a <a href="https://github.com/apache/camel/tree/master/examples/camel-example-cafe-endpointdsl">little example</a> in the source code.</p><h3>7) Reactive Routing Engine</h3><p>The routing engine in Camel has internally been reactive’fied and all EIPs has been retrofitted to work in a reactive manner. However this is internal only, and the Camel API for both end users and component developers are based on existing callback behavior.</p><p>We will later introduce and work on a client-side facing reactive API after we have jumped to Java 11 as minimum version (then we can support Java 9 flowable API).</p><p>Camel already have integration with reactive frameworks such as Vert.X, RxJava and Reactor Core in the dedicated Camel components.</p><h3>8) Camel Main</h3><p>We have introduced camel-main as a standalone JAR that makes it easier to run just Camel. There are a <a href="https://github.com/apache/camel/blob/master/examples/camel-example-main/readme.adoc">couple of examples</a> with the source code that demonstrates how to do that.</p><p>We also use camel-main to have common code to configure and bootstrap Camel for standalone, Spring Boot, Camel K, and Camel Quarkus. This allows us to share the same code, and configuration options.</p><h3>9) Camel Microprofile</h3><p>Camel 3 now integrates better with Eclipse Microprofile and we have Camel components for Microprofile configuration, metrics, health checks, and fault tolerance (on the way).</p><p>More components to come in upcoming Camel releases. These microprofile components are also used by Camel Quarkus.</p><h3>10) Miscellaneous improvements</h3><p>Camel 3 now supports JUnit 5 for unit tests, with the test components that has -junit5 as suffix.</p><p>The Camel Registry is now also writeable, so you can add beans to the registry at runtime, or from unit tests etc.</p><p>You can also configure endpoints (producer) to lazy start. By default Camel works in a fail-fast mode, which means that Camel components that fails to connect to external systems during startup may cause the route to fail on startup. For Camel 3 you can now configure these endpoints to lazy start, which means the route will startup and they will first fail when a message is routed to the endpoint.</p><p>Camel also allows to configure your routes to be supervised during startup, which allows Camel to more intelligently start routes in a more safe manner, by restarting routes that failed.</p><h3>11) Migrating to Camel 3</h3><p>We have of course cleaned up the code base, such as removing all deprecated APIs and components. We have also adjusted some APIs to make them easier to use from end users, and more Java 8 lambda friendly.</p><p>Internally we have also adjusted the route model, to make it easier to extend into new DSLs; and there is a YAML DSL on the way which was initiated in Camel K.</p><p>In terms of backwards compatibility then Camel 3 is mostly compatibility for regular Camel applications. However if you are using some of the more advanced and other plugins in Camel then migration is needed. Also custom components must be migrated and recompiled. There are other adjustments such as Spring Boot users must use org.apache.camel.springboot as groupId instead of org.apache.camel etc. All details can be seen in the <a href="https://camel.apache.org/manual/latest/camel-3-migration-guide.html">migration guide</a>.</p><p>Good luck with your migration if you decide to continue your Camel journey. And for new users to Camel then good luck getting onboard.</p><p><em>Originally published at </em><a href="https://camel.apache.org/blog/Camel3-Whatsnew/"><em>https://camel.apache.org</em></a><em> on December 2, 2019.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=aafb9c5593ae" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Upcoming Tech Event in Copenhagen — What does the system integration toolbox anno 2019 looks like]]></title>
            <link>https://medium.com/@davsclaus/upcoming-tech-event-in-copenhagen-what-does-the-system-integration-toolbox-anno-2019-looks-like-9fe30363dd15?source=rss-a1d083b8ed87------2</link>
            <guid isPermaLink="false">https://medium.com/p/9fe30363dd15</guid>
            <category><![CDATA[apache-camel]]></category>
            <category><![CDATA[conference]]></category>
            <category><![CDATA[kafka]]></category>
            <category><![CDATA[copenhagen]]></category>
            <category><![CDATA[integration]]></category>
            <dc:creator><![CDATA[Claus Ibsen]]></dc:creator>
            <pubDate>Mon, 07 Oct 2019 09:14:17 GMT</pubDate>
            <atom:updated>2019-10-07T09:14:17.857Z</atom:updated>
            <content:encoded><![CDATA[<h3>Upcoming Tech Event in Copenhagen — What does the system integration toolbox anno 2019 looks like</h3><p>On October 24th 2019, I am presenting at a <a href="https://techevent.nemtilmeld.dk/1/">full day tech event in Copenhagen</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/1*in1YFSx5fyCY_TIPHPKqbg.png" /></figure><p>My session is the first of the day, with a total of 90 minutes covering all the latest about <a href="https://camel.apache.org/">Apache Camel</a> 3, Camel K, and Camel Quarkus. I will have up to date slides, and demos ready for the talk.</p><p>The event also hosts other speakers such as <a href="https://www.linkedin.com/in/jeppecramon/">Jeppe Cramon</a> whom will talk about EDA and microservices. And I have been told that we should look forward to Syed Shaaf’s session where he has a big tech demo with many moving parts.</p><p>In the afternoon you can choose to listen to breakout sessions or attend a full 2,5 hours hands-on workshop. The breakout sessions will among others cover use-cases with Apache Camel and Apache Kafka from the real world.</p><p>You can find more details about the <a href="https://techevent.nemtilmeld.dk/1/">event, the location, and how to register here</a>.</p><p>Hope to see you there.</p><p><strong>Cloud-native integration with Apache Camel on Kubernetes</strong></p><p>Cloud-native applications of the future will consist of hybrid workloads: stateful applications, batch jobs, microservices, and functions, wrapped as Linux containers and deployed via Kubernetes on any cloud.</p><p>In this session, we will explore key challenges with function interactions and coordination, addressing these problems using Enterprise Integration Patterns (EIP) and modern approaches with the latest innovations from the Apache Camel community:</p><ul><li>Apache Camel 3</li><li>Camel K</li><li>Camel Quarkus</li></ul><p>Apache Camel is the Swiss army knife of integration, and the most powerful integration framework. In this session you will hear about the latest features in the brand new 3rd generation.</p><p>Camel K, is a lightweight integration platform that enables Enterprise Integration Patterns to be used natively on any Kubernetes cluster. When used in combination with Knative, a framework that adds serverless building blocks to Kubernetes, and the subatomic execution environment of Quarkus, Camel K can mix serverless features such as auto-scaling, scaling to zero, and event-based communication with the outstanding integration capabilities of Apache Camel.</p><p>We will show how Camel K works. We’ll also use examples to demonstrate how Camel K makes it easier to connect to cloud services or enterprise applications using some of the 300 components that Camel provides.</p><p><em>Originally published at </em><a href="http://www.davsclaus.com/2019/10/upcoming-tech-event-in-copenhagen-what.html"><em>http://www.davsclaus.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9fe30363dd15" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Upcoming Webinar — Integration Patterns in a Serverless World]]></title>
            <link>https://medium.com/@davsclaus/upcoming-webinar-integration-patterns-in-a-serverless-world-105210a141f3?source=rss-a1d083b8ed87------2</link>
            <guid isPermaLink="false">https://medium.com/p/105210a141f3</guid>
            <category><![CDATA[webinar]]></category>
            <category><![CDATA[serverless]]></category>
            <category><![CDATA[apache-camel]]></category>
            <category><![CDATA[integration]]></category>
            <category><![CDATA[knative]]></category>
            <dc:creator><![CDATA[Claus Ibsen]]></dc:creator>
            <pubDate>Fri, 04 Oct 2019 08:02:57 GMT</pubDate>
            <atom:updated>2019-10-04T08:02:57.106Z</atom:updated>
            <content:encoded><![CDATA[<h3>Upcoming Webinar — Integration Patterns in a Serverless World</h3><p>Next Thursday, October 10th, I am giving a 35 minutes <a href="https://www.redhat.com/en/events/webinar/develop-deploy-deliver-continuously?sc_cid=701f2000000uI48AAE">webinar about Serverless Integration </a>(yeah it covers <a href="https://camel.apache.org/">Apache Camel</a>, Camel K, Knative and Quarkus).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/479/1*LWDIy59nY9p6KnJK3FzuUw.png" /></figure><p>The webinar is part of a full day event (virtual event) where there are keynotes and a parallel tracks with 12 breakout sessions.</p><p>My talk is focused purely on the upstream work we do at Apache Camel with the next generation Camel 3.</p><h3>The abstract for my talk</h3><p>Cloud-native applications of the future will consist of hybrid workloads: stateful applications, batch jobs, microservices, and functions, wrapped as Linux containers and deployed via Kubernetes on any cloud.</p><p>In this session, we’ll explore the key challenges with function interactions and coordination, addressing these problems using classic integration patterns and modern approaches with the latest innovation from the Apache Camel community: Camel K, a lightweight integration platform that enables enterprise integration patterns to be used natively on any Kubernetes cluster.</p><p>When used in combination with Knative, a framework that adds serverless building blocks to Kubernetes, and the subatomic execution environment of Quarkus, Camel K can mix serverless features such as auto-scaling, scaling to zero, and event-based communication with the outstanding integration capabilities of Apache Camel.</p><p>We will show how Camel K works. We’ll also use examples to demonstrate how Camel K makes it easier to connect cloud services or enterprise applications using some of the 250+ components that Camel provides.</p><h3>Registration</h3><p>The event is free to attend, and you can <a href="https://www.redhat.com/en/events/webinar/develop-deploy-deliver-continuously?sc_cid=701f2000000uI48AAE">signup using this link</a>.</p><p>Date: October 10th 2019<br>Time: 5 pm CEST (event starts with keynotes)</p><p><em>Originally published at </em><a href="http://www.davsclaus.com/2019/10/upcoming-webinar-integration-patterns.html"><em>http://www.davsclaus.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=105210a141f3" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>