Camel in Action 2nd edition - To be done by start of January 2018

We just wanted to share the latest status of the Camel in Action 2nd edition book here a few days before Christmas.

We had hoped the book would have been done today. However there has been unexpected holdup due to the indexing of this big book is causing longer time to process than usual. In light of this Manning has pushed the schedule so the book is expected to be done by end of first week in January 2018.

This gives us, the authors, an extra opportunity to review all the pages of the book, yet one more time, which would be our 5th review. It's unusual that a book has as many final reviews as we end up doing with this book. Its all good in the end as it means that higher quality and that we will correct cosmetic details that may otherwise have been missed.

For example we spotted a glitch in figure 17.9, where the dashed box is not 100% horizontal in the bottom as shown in the following before vs after screenshots.

Figure 17.9 - Before with the glitch in the dashed line in the bottom not being 100% horizontal line
Figure 17.9 - After with the dashed lined in the bottom fixed

Manning has told us that they expect the page total in the print book to be around 900. In addition we have two bonus chapters that are available for download of readers, which are 26 and 18 pages long. All together is nearly a double of the number of pages of the first edition which was already a big book.

So hold on a little longer and we will be on a great start of 2018 with a up-to-date modern book covering all aspects of Apache Camel. The book uses the latest Camel release 2.20.1 at this time of writing, and we have some tips, what is coming in Camel 2.21 release, whenever relevant to our readers.

Merry x-mas and happy new-year

Claus Ibsen
Jonathan Anstey


Camel in Action 2nd edition - First layout done for print book chapters

I just wanted to capture a blog with the news that the Camel in Action 2nd edition book, first 19 chapters and 2 appendixes (the content for the print book) now has passed the 1st layout phase.

I took a screendump of the last page of chapter 19, which has the page count of 822. That means you get 822 pages of extensive details about Apache Camel in a single book.

Last page of chapter 19 with page count 822

At this moment Jonathan and myself are doing our author reviews on every single page of the those 822 pages to ensure code formatting, figures, technical errors, adding minor TIPs about upcoming/very latest Camel change, updating to Camel 2.20.1 release, updating screenshots in high-res resolution etc. All together to make sure you get the latest information in your hands, and that we have done our best all the way. I currently need to review chapter 18, 19 and 1 which is the outstanding, then I have read every single chapter from cover-to-cover for the N'th million time.

There is more content as we have 2 bonus chapters that will follow layout phase as well and made freely available on the book's website when the book is finished.

So we are on track to finish the book before x-mas, just in time for you to ask your significant other to buy you the best present ever to put under the tree ;)

Also we appreciate if you consider following the advice that we put at the end of the last page (see screenshot) on chapter 19.


List of people to thank for help with our book Camel in Action 2nd edition

The Camel in Action 2nd edition book is getting real close soon. Today the first three chapters just returned from the first layout process.

Here is a screenshot of the first page of chapter 1:

In the book we want to say thank you to people whom have helped us on the way in any form of shape, such as by sending us emails with reviews, feedback, or submitted fixes to the source code etc.

We have gathered a provisional list of people to thank.

The following people have been in direct touch with us about reviewing and feedback on the early access material:

  • Antoine Dessaigne
  • Bilgin Ibryam
  • Christian Posta
  • Clement Escoffier
  • Grzegorz Grzybek
  • Jospeh Kampf
  • Kevin Earls
  • Lars Heinemann
  • Luca Burgazzoli
  • Nicola Ferraro

The following people have helped with the book's source code:

  • Aurelien Pupier
  • Babak Vahdat
  • Christoph Deppisch
  • Grzegorz Grzybek
  • Kevin Earls
  • Luca Burgazzoli
  • Morten Erik Banzon
  • Ryota Sato
  • Scott Cranton
  • Willem Jiang

During the development of the book, Manning held 3 official reviews where anonymous readers provided feedback. At this time of writing we, the authors, do NOT have this list of persons. However Manning will insert the names of the reviewers in the final book.

In case you have provided us with help over the last 2,5 years of work on the 2nd edition book, then you are welcome to reach out to us so we can ensure to include your name as well. And we are sorry if we haven't included your name from the beginning, but we only started gathering these names over a year ago.

You are also welcome to contract us if you have helped us, but do not want to have your name included in the final book.

Claus Ibsen and Jonathan Anstey


Working with large messages using Apache Camel and ActiveMQ Artemis improved in upcoming Camel 2.21 release

Historically the Apache ActiveMQ message broker was originally created in a time where large messages was measured in MB and not in GB as you may do today.

This is not the case with the next generation broker Apache ActiveMQ Artemis (or just Artemis) which has much better support for large messages.

So its about time that the Camel team finally had some time to work on this to ensure Camel work well with Artemis and large messages. This work was committed this weekend and we provided an example to demonstrate this.

The example runs Camel with the following two small routes:

The first route just route files to a queue on the message broker named data. The 2nd route does the opposite, routes from the data queue to file.

Pay attention to the 2nd route as it has turned on Camel's stream caching. This ensures that Camel will deal with large streaming payloads in a manner where Camel can automatic spool big streams to temporary disk space to avoid taking up memory. The stream caching in Apache Camel is fully configurable and you can setup thresholds that are based on payload size, memory left in the JVM etc to trigger when to spool to disk. However the default settings are often sufficient.

Camel then uses the JMS component to integrate with the ActiveMQ Artemis broker which you setup as follows:

This is all standard configuration (you should consider setting up a connection pool as well).

The example requires to run a ActiveMQ Artemis message broker separately in a JVM, and then start the Camel JVM with a lower memory setting such as 128mb or 256mb etc which can be done via Maven:

  export MAVEN_OPTS="-Xmx256m"

And then you run Camel via Maven

  mvn camel:run

When the application runs, you can then copy big files to the target/inbox directory, which should then stream these big messages to the Artemis broker, and then back again to Camel which will then save this to the target/outbox directory.

For example I tired this by copying a 1.6gb docker VM file, and Camel will log the following:
INFO  Sending file disk.vmdk to Artemis
INFO  Finish sending file to Artemis
INFO  Received data from Artemis
INFO  Finish saving data from Artemis as file

And we can see the file is saved again, and its also the correct size of 1.6gb

$ ls -lh target/outbox/
total 3417600
-rw-r--r--  1 davsclaus  staff   1.6G Oct 22 14:39 disk.vmdk

I attached jconsole to the running Camel JVM and monitored the memory usage which is shown in the graph:

The graph shows that the heap memory peaked at around 130mb and that after GC its back down to around 50mb. The JVM is configured with a max of 256mb.

You can find detailed step by step instructions with the example how exactly to run the example, so you can try for yourself. The example is part of the upcoming Apache Camel 2.21 release, where the camel-jms component has been improved for supporting javax.jms.StreamMessage types and has special optimisation for ActiveMQ Artemis as demonstrated by this example.

PS: The example could be written in numerous ways, but instead of creating yet another Spring Boot based example we chose to just use plain XML. In the end Camel does not care, you can implement and use Camel anyhow you like.


Apache Camel 2.20 released - What's new

Apache Camel 2.20 has been released today and as usual I am tasked to write a blog about this great new release and what's the highlights.

The release has the following highlights.

1) Java 9 technical preview support

We have started our work to support Java 9 and this release is what we call technical preview. The source code builds and runs on Java 9 and we will continue to improve work for official support in the following release.

2) Improved startup time

We have found a few spots to optimise the startup time of Apache Camel so it starts 100 - 200 milli seconds faster.

3) Optimised core to reduce footprint

Many internal optimisations in the Camel routing engine, such as reducing thread contention when updating JMX statistics, reducing internal state objects to claim less memory, and reducing the number of allocated objects to reduce overhead on GC etc, and much more.

4) Improved Spring Boot support and preparing for Spring Boot 2

We have improved Camel running on Spring Boot in various ways.

We also worked to make Apache Camel more ready and compatible with the upcoming Spring Boot 2 and Spring Framework 5. Officially support for these is expected in Camel 2.21 release.

5) Improved Spring lifecycle

Starting and stoping the CamelContext when used with Spring framework (SpringCamelContext) was revised to ensure that the Camel context is started last - when all resources should be available, and stopped first - while all resources are still available.

6) JMS 2.0 support

The camel-jms component now supports JMS 2.0 APIs.

7) Faster Map implementation for message headers

If you include camel-headersmap component on the classpath, then Camel will auto detect it on startup and use a faster implementation of case-insenstive map (used by camel message headers).

8) Health-Check API

We have added experimental support for a new health-check API  (which we will continue to work on over the next couple of releases).  The health checks can be leveraged in in cloud environments to detect non healthy contexts.

9) Cluster API

Introduced an experimental Cluster SPI (which we will continue to work on over the next couple of releases) for high availability contexts, out of the box Camel supports: atomix, consul, file, kubernetes and zookeeper as underlying clustering technologies through the respective components.

10) RouteController API

Introduced an experimental Route Controller SPI (which we will continue to work on over the next couple of releases) aimed to provide more fine-grained control of routes, out of the box Camel provides the following implementations:

  • SupervisingRouteController which delays startup of the routes after the camel context is properly started and attempt to restart routes that have not been starter successfully.
  • ClusteredRouteController which leverages Cluster SPI to start routes only when the context is elected as leader.

11) More components

As usual there is a bunch of new components for example we have support for calling AWS lambda functions in the camel-aws component. There is also a new json validator component, and camel-master is used with the new Cluster API to do route leader election in a cluster. There is 13 new components and 3 new data formats. You can find more details in the Camel 2.20 release notes.

We will now start working on the next release 2.21 which is scheduled in start of 2018. We are trying to push for a bit quicker release cycle of these bigger Camel releases, so we can go from doing 2 to 3 releases per year. This allows people to quicker pickup new functionality and components etc.

Also we want to get a release out that officially support Java 9, Spring Boot 2 and all the usual great stuff we add to each release, and what the community contributes.


Apache Camel route coverage tooling on the way

Last weekend I found some time to hack on new tooling for doing Apache Camel route coverage reports. The intention is to provide APIs and functionality out of the box from Apache Camel that other tooling vendors can leverage in their tooling. For example to show route coverage in IDEA or Eclipse tooling, or to generate SonarType reports, etc.

I got as far to build a prototype that is capable of generating a report which you run via the camel-maven-plugin. Having a prototype built in the came-maven-plugin is a very good idea as its neutral and basically just plain Java. And make its possible for other vendors to look at how its implemented in the camel-maven-plugin and be inspired how to use this functionality in their tooling.

I wanted to work on the hardest bit first which is being able to parse your Java routes and correlate to which EIPs was covered or not. We do have parts of such a parse based on the endpoint validation tooling which already exists in the camel-maven-plugin, which I have previously blogged about. The parser still needs a little bit more work however I do think I got it pretty far over just one weekend of work. I have not begun adding support for XML yet, but this should be much easier to do than Java, and I anticipate no problems there.

I recorded a video demonstrating the tooling in action.

I forgot to show in the video recording, that you can change the Camel routes, such as inserting empty lines, adding methods to the class etc, and when you re-run the camel-maven-plugin it will re-parse the route and output the line numbers correctly.

Anyway enjoy the video, its about 12 minutes long, so go grab a cup of coffee or tea first.

The plan is to include this tooling in the next Apache Camel 2.21 release which is scheduled in January 2018.

The JIRA ticket about the tooling is CAMEL-8657

Feedback is much welcome, and as always we love contributions at Apache Camel, so you are welcome to help out. The current work is upstream on this github branch. The code will be merged to master branch later when Apache Camel 2.20.0 is officially released.

When I get some more time in the future I would like to add support for route coverage in the Apache Camel IDEA plugin. Eclipse users may want to look at the JBoss Fuse tooling which has support for Apache Camel, which could potentially also add support for route coverage as well.


Camel in Action 2nd edition goes into production phase

We are moving forward with the Camel in Action 2nd edition book. Manning just informed us that they have moved the book into production phase.

All chapters and appendixes except for Ch21 have now completed the copyedit and review cycle and have moved into the proofreading and indexing stages of production.

The proofing is done by a professional, whom has not seen the material before (new fresh set of eyes). Once the proofreading and indexing stages are complete, the final Word manuscript chapters will be sent on to the typesetter for layout, along with prepped graphics from the illustrator.

When we react this stage Jonathan and myself have chances to review PDFs of the formatted book pages, to ensure all the code examples are formatted correctly and so on.

At present time Jonathan and I are now working on the front matter, and writing our preface and what else. We are also reaching out to the foreword writers to ensure they hand in their material (Gregor Hohpe and James Strachan are yet to return their forewords).

And when Henryk Konsek has provided his updates, then chapter 21 can move along and also be part of the book.

So it starts to look really good and we can start to see the finish line. Its been a long run this time which has taken us almost double the time to complete the 2nd edition than what we did for the 1st edition. But that is possible expected, we are getting older, and the book is also almost twice the size.

To celebrate this, Manning has the book as deal of the day. This means you get 50% discount if you order the book on September 24th using the couple code: dotd092417au

The book can be ordered from Manning website at: https://www.manning.com/books/camel-in-action-second-edition


Getting Started with Apache Camel and Java by Bennet Schulz

I just want to spread the word that Bennet Schulz yesterday posted a great short blog how to get started with Apache Camel with just Java. It shows you the basics of creating a new Camel project and with your first Camel route and how to run that with just plain Java.

The blog is very good and I recommend new users to Apache Camel to read it, its short and a 5 minute read.


Upcoming Kubernetes and Apache Camel presentations in Aarhus Denmark

I have just been confirmed for attending and speaking at another Javagruppen event which takes place on October 11th from 16:30 to 19:00 in Aarhus Denmark.

The event is a "Gå Hjem Møde" which means it starts towards the end of the work day. We have two speakers. At first Helge Tesgaard will talk about getting started with highly available Kubernetes cluster. Then I follow up with my talk about agile integration with Apache Camel on Kubernetes.

After the event, then you are welcome to join for a coffee, beer or drink where some of us will head to the city to catch a few before heading home.

You can find more details about the event and how to register to attend.


YouTube video of my - Containerised Integration with Apache Camel - talk from Melbourne in August 2017

My talk at the Melbourne Kubernetes User Group was recorded and posted online on YouTube. I want to say thanks to Ben Griffin and Des Drury for organising this event and recording the talk.

I had a great time on my APAC tour and presented at 6 full day workshops and 3 after hours meetups.

The link to the video: https://www.youtube.com/watch?v=Xkg_AGLV32A&feature=youtu.be


The Camel guy going on APAC tour this August

Tomorrow I will be leaving for a tour in the APAC region where I am going to spread the words about agile integration using Apache Camel and Kubernetes and OpenShift.

I have plotted my destinations in the map below

The first stop is Tokyo where I will arrive on this Saturday August 5th (11 hour flight). I will then be jet-lagged and a bit tired so I will take it easy on Saturday.  On Sunday I plan to polish my presentations, and then visit some spots in Tokyo.

Monday and Tuesday are full day workshops. Red Hat has posted information about these workshops on the registration page for the Sydney and Melbourne events in case you are interested. I am not aware of any registration page for Tokyo which was quickly fully booked so we had to do a 2nd day as well.

On Wednesday I do have some time in the morning and afternoon to see a bit more of Tokyo before I will travel to Sydney (10h flight) where I arrive August 10th Thursday morning. In the evening I will attend and speak at the Sydney meetup. So if you are in this area you are very welcome to come by, as I love chatting with fellow developers and possible Camel users.  Then we have the full day workshop on Friday 11th.

On Saturday the 12th is my first leisure day where I have booked the bridgeclimb tour at 10am. If I am up early in the morning I will go see the opera house (as it was designed by a Danish architect) and the viewpoint of the harbour from the botanic garden. In the afternoon I will go to The Rocks for a cup of coffee and/or beer(s). I am in talks with a few Camel users from a Sydney office whom want to meet there for some drinks. You are welcome to join us there, you can reach out to me on my email or twitter etc.

On Sunday I travel to Melbourne. On Monday 14th I plan to run the F1 circuit track in Albert Park. If all goes well then I will run several rounds so I can do a half marathon distance. The following day we have a full day workshop in Melbourne. At this time of writing there is a potential meetup in Melbourne happening as well on the evening of Tuesday 15th. They are currently finding a venue.

On Wednesday I travel to Wellington where we have two full day workshops on Thursday and Friday.

Saturday 19th I have a full day in Wellington where I plan to walk the city and see various stuff. And see if I can recall some of the places I visited 15 years ago when I backpacked New Zealand and Australia.

I then fly to Auckland on Sunday 20th August and have a mini vacation there until Wednesday where I travel to USA (12 hour flight). If you are from around Auckland and want to have a cup of coffee or a drink somewhere then you are welcome to reach out to me via my email or twitter etc.

In USA I will visit an old friend whom I have not see in about 15 years, when he relocated to Seattle when he got a job at Microsoft. Among others he is taking me to my first live american football game where we are going to see Seattle Seahawks.

I will travel back to Denmark on Monday 28th and arrive back home in the afternoon on the 29th.
And then its back to Camel land and work from the 30th August.

My travel plan is as follows (where there is an empty space means traveling):

2017-08-05: Tokyo
2017-08-06: Tokyo
2017-08-07: Tokyo
2017-08-08: Tokyo
2017-08-10: Sydney
2017-08-11: Sydney
2017-08-12: Sydney
2017-08-14: Melbourne
2017-08-15: Melbourne
2017-08-17: Wellington
2017-08-18: Wellington
2017-08-19: Wellington
2017-08-21: Auckland
2017-08-22: Auckland
2017-08-24: Seattle
2017-08-25: Seattle
2017-08-26: Seattle
2017-08-27: Seattle
2017-08-29: Denmark


Webinar by me - Build distributed microservices using Apache Camel deployed on containers

On thursday 20th July I am doing a live webinar:

For Java developers, it may be daunting to get started developing container applications that run locally on Kubernetes/OpenShift. 

In this session, we’ll build a set of Apache Camel- and Java-based microservices that use Spring Boot and WildFly Swarm. We’ll show how fabric8 Maven tools can be used to build, deploy, and run your Java projects on local or remote OpenShift clusters, as well as to easily perform live debugging. 

Additionally, we’ll discuss best practices for building distributed and fault-tolerant microservices using technologies such as Kubernetes Services, Netflix Hystrix, and Apache Camel Enterprise Integration Patterns (EIPs) for fault tolerance.

The webinar is on a timezone that is friendly to developers based in the asia/pacific region which is at 1:00 pm SGT (Singapore Time). That means I have to get up early in the morning ;)

The webinar is a mix between slides and live demos (5 demo sessions) so there is a lot of action going on. I have captured all the important information in the slides, so after attending the webinar you should be able to try this on your own, by just browsing the slides, and downloading the sample code.

You can register (for free) to the webinar with this link. I am not aware of any upper cap, but you may have to hurry to be safe to get a spot, because I was told there is already move than 1300 registations a couple of days ago.


Camel in Action 2nd edition is in pre-production

I just wanted to share a little status update on where we are with the Camel in Action 2nd edition book.

We recently completed the last round of reviews from a selected group of readers whom have provided anonymous feedback on the material.

Based on their feedback we were able to do some changes to the material before we handed it over to pre-production.

One point we knew and also have gather feedback about is the length of the book. For example the last MEAP release has staggering 996 pages in the PDF file.

We have identified up till about 100 pages that was the weakest content in the book, which we would then cut out from the final book. Out of those 100 pages we will made available the last two chapters as online bonus chapters, freely available for download. The IoT and Reactive chapters felt a bit out of place accordingly to reviewers. Don't despair these bonus chapters will go under the same scrutiny as all the other chapters to ensure the same high quality level you would expect from a Manning book.

At this point all the chapters are in pre-production phase, where they are undergoing technical review, proofing, etc.

As part of the pre-production phase, we will do the cut and any final post cleanup changes before the material is final and the book is handed over to type setting.

The dead-line for the pre-production is end of July, which means that the book will go into type setting afterwards and then getting much closer to be done. While the chapters are in type setting we will work on what is called the front matter, which is essentially all the other stuff. And when that work is complete, then we can sit back and just wait until the book is printed and we have it in out hands.


Apache Camel 2.19 Released - Whats new

Apache Camel 2.19 was released on May 5th 2017 and its about time I do a little blog about what this release includes of noteworthy new features and improvements.

Here is a list of the noteworthy new features and improvements.

1. Spring Boot Improvements

The Camel 2.19 release has been improved for Spring Boot in numerous ways. For example all the Camel components now include more details in their spring boot metadata files for auto configuration. This means tooling can now show default values, documentation etc for all the options on each component, language, and data format you may use, and configure in application.properties or .yml files.

The release is also up to date with latest Spring Boot 1.5.3 release.

Some component has improved auto configuration which makes it even easier to use, such as camel-servlet where you can easily setup the context-path from the application.properties file.

We have also made available to configure many more options on CamelContext as well so you can tweak JMX, stream caching, and many other options.

2. Camel Catalog Improvements

The Camel Catalog now includes fine grained details of every artifact shipped in the release, also for the other kinds such as camel-hystrix, camel-cdi etc.

The catalog now also include all the documentation in ascii doc and html format.

The catalog has specialized providers for Spring Boot and Karaf runtimes, which allows tooling to know which of the Camel artifacts you can use on those runtimes.

The Camel project uses the catalog itself, so we now use this to automatic generate and keep a full list of all the artifacts on the website, and when each artifact was added. You can therefore see whether its a new artifact in this release, or was introduced in Camel 2.17 etc.

There is a specialized runtime version of the CamelCatalog provided in camel-core RuntimeCamelCatalog, which allows you to tap into the catalog when running Camel. The offline catalog is camel-catalog which is totally standalone.

3. Camel Maven Plugin can now validate

There is a new validate goal on the camel-maven-plugin which allows you to check your source code and validate all your Camel endpoints and simple expressions whether they have any invalid configuration or options. I have previously blogged about this.

4. Auto reload XML files

If you develop Camel routes in XML files, then you can now turn on auto reload, so Camel will watch the XML files for changes and then automatic update the routes on the fly. I have previously blogged and recorded a video of this.

5. Service Call EIP improvements

Luca has been buys improving the Service Call EIP so it works better and easier with Camel on the cloud, such as kubernetes or spring-boot-cloud. 

Luca blogged recently about this.

6. Calling REST services is easier

If you want to use Camel to call RESTful services then its now easier as we add a producer side to the Rest DSL. This means you can call REST service using the rest component that can then plugin and use any of the HTTP based component in Camel such as restlet, http4, undertow etc.

For more information see the rest-producer example.

We also added a new camel-swagger-rest component that makes it even easier to call Swagger REST APIs, where you can refer to their operation id, and then let Camel automatic map to its API.

For more information see the rest-swagger example and the rest-swagger documentation.

7. CDI with JEE transactions

The camel-cdi component now supports JEE transactions so you can leverage that out of the box without having to rely on spring transactions anymore.

8. Example documentation improved

We now generate a table with all the examples and sorted by category. This allows users to find the beginner examples, rest, cloud etc. And also ensure that we keep a better documentation for our examples in the future as the generator tool will WARN if we have examples without documentation.

Also all examples have a readme file with information about the example and how to run.

9. Spring Cloud components

There is new Camel components that integrate with Spring Cloud and Spring Cloud Netflix. This makes it easy to use for example the ServiceCall EIP or Hystrix EIP with Spring Cloud Netflix or just Camel with Spring Cloud in general. You can find more information in the example.

10. Kafka improvements

The camel-kafka component has been improved to work more intuitively. This unfortunately means the uri syntax has changed in a backwards incompatible way. So if you are upgrading then make sure to change your uris. However the new syntax resemble how other messaging components does it by using kafka:topicName?options. 

Also the component can now automatic convert to the kafka serializer and deserializer out of the box, so you dont have to hazzle with that. We provide converts to the typically used such as byte[] and string types.

The component also has been upgraded to latest Kafka release and its now possible to store the offset state offline so you can resume from this offset in case you stop and later start your application.

Its also much easier to configure and use custom key and partition key which can be supplied as header values.

And there is a new Kafka idempotent repository.

11. Route Contracts 

We have added initial support for being able to specify an incoming and outgoing type to a Camel route (called transformer and validator inside Camel). This then allows both Camel at runtime, and Camel developers to know what payload the routes is expected as input and what it returns. For example you can specify that a route takes in XML and returns JSon. And with XML you can even specify the namespace. Likewise you can specify Java types for POJO classes. Based on these contracts Camel is able at runtime to automatic be able to type-covert the message payload (if possible) between these types if needed.

We will continue with more improvements in this area. For example we hope we can add such capabilities to Camel components so they will be able to provide such information so your Camel routes is more type-safe with the message payloads during during routing.

And tooling will also be able to tap into this formation and then for example "flag" users with hints about routes not being compatible etc.

You can find more details in this example (we have for CDI and XML as well) and in the documentation.

12. Reactive Camel

There is a new camel-reactive-streams component that makes Camel work as first-class with the reactive-streams API so you can easily use Camel components in your reactive flows, or call flows from your Camel routes.

For the next release there is a camel-rx2 component in the works which has improved support for Camel with the popular RxJava 2 framework.

For users that want to use reactive with vert.x then there is a camel-vertx and vertx-camel-bridge components in both projects. We plan to merge them together and bring the best features from each of them together in the future, when we get some time. However Claus is in talks with the vert.x team about this. 

You can find more information in some of this example. And the Camel in Action 2nd ed book contains an entire chapter 21 covering all of this.

13. Java 8 DSL improvements

And just on top of my head the Java 8 DSL has been slightly improved to allow using more of the Java 8 lambda and functional style in your Camel routes and EIPs. We will continue to improve this from time to time when we find EIPs that can be made more awesome for savvy Java 8 users. We are also looking for feedback in this area so if you are kneed deep in the Java 8 style then help us identify where we can improve the DSL.

14. Camel Connectors

We have introduced a new concept called Camel Connector. However its still early stages and we will over the next couple of releases further improve and refine what a Camel connector is.

The short story is that a Camel Connector is a specialized and pre-configured Camel Component that can do one thing and one thing only. For example if you need to known when someone mentions you on twitter, then you can use the camel-twitter component. But it can do 10 things and it can take time to understand how to use the component and make it work. So instead you can build a connector that can just do that, a camel-twitter-mention connector.  It's pre-build and configured to just do that. So all you need to do is to configure your twitter credentials and off you go. At runtime the connector is a Camel component, so from Camel point of view, they are all components and therefore it runs as first-class in Camel.

We have provided some connector examples in the source code.

15. Many more components

As usual there is a bunch of new components in every Camel release and this time we have about 20 new components. You can find the list of new components in the release notes, or on the Camel components website where you can search by the 2.19 release number.

For example there is a camel-opentracing component that allows to use Camel with distributed tracing. Gary Brown has blogged about this.

There is also a few new Camel components for IoT such as camel-milo that Jens Reimann blogged about.

There is a bunch of other smaller improvements which you can find in the release notes. For example the jsonpath language now allows to use embedded simple language, and you can define predicates in a much simpler syntax without too many of the confusing jsonpath tokens, in case you just want to say order.customer.id > 1000 etc.


Developing cloud-ready Camel microservice talk from Red Hat Summit 2017

I am sitting at Boston Logan Airport and having a Samuel Adams lager and checking up my twitter timeline, emails and whatelse is happening.

Two days ago I had my talk about developing cloud ready Camel microservices at Red Hat Summit 2017. The talk was video recorded and it is already online on you tube.

The source code and slides is posted on my github account at: https://github.com/davsclaus/minishift-hello

I had a great time at Red Hat Summit and enjoyed meeting up with fellow Red Hat co-workers and others whom I know from twitter or the open source communities.


Mine and other Camel talks at Red Hat Summit 2017

Next week I am giving a talk at Red Hat Summit 2017 in Boston.

S104668 - Developing cloud-ready Camel microservices

Its a talk how to get started as a Java developer to build Java based microserves that runs on Kubernetes or OpenShift. Its a talk that is a mix between slides and live demo where its all coded and running locally on my old laptop.  I am using three of my favorite Java stack with Apache Camel, Spring Boot, and WildFly Swarm in the demos.

The talk is on Tuesday May 2nd before lunch, eg 11:30 to 12:15pm so you can come and bild up an appetite.

On Wednesday from 3-5pm I am on boot duty at the Red Hat Community Central, so that's a chance for you to come find me and have a chat. I am actually not aware where that is located, but I would assume its in the exhibition hall.

I will be in Boston all week and attend Summit from Tuesday till Thursday. On Friday evening I am flying back home.

I have started running for the last year or so, so I am also signed up for the 5km Summit run which happens at 6 am on Wednesday. In my time zone that would be noon so I am up and awake already.

Other Camel Talks

There is a number of other talks that I plan to attend.

For example Rajith's talk with TD Bank where they talk how they are using Camel. I love to hear about what the real world does with Camel and Red Hat summit is a conference where also the customer stories are present.

S103873 - Migrating TD Bank's monolithic Java EE application to a microservices architecture

There is also the stuff I have been worked on lately a new product iPaaS that uses Camel under the hood. I am really looking forward to Keith and Hiram presenting this.

S101856 - Red Hat iPaaS—integration made easy

Christian Posta is always an inspiration. I always learn something when he give talks about microservices. He is out there in the field and see first hand what our customers want to do, and what they are doing/can do.

S101993 - The hardest part of microservices is your data

I have formerly worked in the health care industry and have a chance to hear Quinn Stevenson's talk. Quinn has been fantastic in the Camel community where he has contributed code patches, components and help Camel work better with OSGi and HL7.

S103149 - Deploying Red Hat JBoss Fuse in healthcare—notes from the field

I don't want to miss the chance to hear about how to migrate a monolith 10 year old system to a modern microservice based with Camel, Vert.X, and other cool technologies.

S99785 - How to handle the complexity of migrating to microservices from 10 years of monolithic code

There are more talks about Camel that I will try to attend. There are 12 sessions listed in the Red Hat Summit agenda.

If you are attending Red Hat Summit. Then I hope we get a chance to meet and say hi. I love the hallway conversations at conferences and also to hear the good, bad, and ugly. Apache Camel is not perfect, likely far from it. But its adaptive and very flexible, and we have a very active, vibrant and open community.

And btw Camel 2.19 is on the way. We are building the release candidate this week. So hopefully its released by Summit so I can tell Jim Whitehurst to announce that at the keynote ;)


Next phase with the Camel in Action 2nd edition book

This time its a longer ride for Jonathan and myself. Its about 2 years ago we started with the first words and edits for writing this book all over again.

Here 2 years later we have just handed in our last complete draft of all the chapters and appendixes. All 21 chapters are in the bank, and now we enter a new phase. The table of content at the Manning website has not yet been updated, so there is 2 additional chapters in the final book than listed currently. More for the money for you ;)

The book is going into pre-production. Here is roughly what will happen:

The newest 1/3 of the chapters will first have to go through a review procedure where a selected group of anonymous readers are providing feedback. And based on their feedback and what else may come to our attention we can freely do changes to these chapters. Then they join the rest of the chapters.

The other 2/3 of the chapters are already moving ahead and are under Mannings strict scrutiny of tech review and proofing. For example chapter 13 has already been through this process. The chapter has a thousand or so, small changes to fix up the grammar, flow of content and just make it enjoyable to read, instead of my 2nd-language english.

At the same time Apache Camel moves ahead and the upcoming 2.19.0 release is planned for end of April / start of May. This means that we will ensure all the content in the book is up to date with reference to this release. A big part of that is also to ensure all the accompanying source code is fully up to date as well.

Likewise Jonathan and I have a TODO list of small items we have noted over the time to go back into the previous chapters to do updates.

With all this combined we will ensure that all the content in the book is fully up to update and cover as much of Apache Camel as possible. For things that are not possible to cover we will add callouts or sidebars with details and references where you can find more material. And on the good days we will add an example with the source code etc.

So there is surely more work for us before we can see the finish line. As they say its not over until the fat lady signs.


Apache Camel first commit was 10 years ago on March 19th

Today marks a very special day as it was exactly 10 years ago the first commit of Apache Camel was done by its creator James Strachan.

Added Mon Mar 19 10:54:57 2007 UTC (10 years ago) by jstrachan
Initial checkin of Camel routing library

The project was created as a sub-project to Apache ActiveMQ and back then github did not exists, so its using good old subversion.

In summer 2007 the first release of Apache Camel was published, which happened on July 2nd so lets wait until the summer to celebrate it's 10 years birthday.


Wanna work on cool open source projects like Apache Camel and fabric8

Jonathan Anstey whom is lead in the JBoss Fuse sustaining team (and also co-author of the Camel in Action books) posted a tweet today about an opening in his team.

So if you want to work on cool open source projects upstream like Apache Camel, fabric8, and yeah also sometimes Apache Karaf, ServiceMix, CXF, hawtio, etc.

The position is: Senior Software Engineer
Location: Remote

You can find more details about the job at the Red Hat site.

If you want to apply then you can use apply directly from the Red Hat website. Or you can get in touch with me, where we can have a little talk, and then I can make a referrer from inside Red Hat which would put you one step ahead.


Complete overview of all Camel components and JARs

You can now see a complete overview of all Camel components, data formats, languages, and miscellaneous components at the Camel github website: https://github.com/apache/camel/tree/master/components#components

Also we now count the total number as well, so at this time of writing there are 218 Camel components.

The tables on that page are all auto generated from the Camel source code which ensures its always up to date.

This information is also available from the camel-catalog, which allows tooling to tap into this information as well. And we will also use this to ensure the new website / documentation is using this to build a up to date TOC as well for all the Camel documentation. 


Three Apache Camel talks in Aarhus on thursday 9th February

I am going to Aarhus to spread the word about Apache Camel. With me I have two other Camel riders whom will share their real life experience.

So you get 3 for the price of 1. Well its gratis to attend so the price is 0 :)

The event is hosted at Systematic and organized by Javagruppen. You can find more details about the event on their website at: http://javagruppen.dk/54-arrangementer/arrangementer-2016/363-javagruppemode-den-9-februar-hos-systematic-i-aarhus

The talks will be in english, and so will the source code being shown :)

After the talks I hope you may have time for a beverage, where we can share our Camel stories.


  • Introduction to Apache Camel - Ibsen
  • A practical example of applying Camel in homecare application - Therkildsen
  • Get started with Apache Camel Intellij plug-in - Harms
Systematic, Søren Frichs Vej 39, 8000 Aarhus

Date and time
9. February at16.30-19.30

Free to attend

You need to register for the event which you can find on the Javagruppen website.


Great podcast about Apache Camel from Java Pub House

Recently I listened to a podcast from Java Pub House posted on 7th of January 2017 where Freddy Guime and Bob Hollin talk about Apache Camel.

Episode 62. Hm, what's the best to travel this holiday? on Apache CAMEL, of course!

Freddy is new to Apache Camel, and Bob an experience user. I enjoyed listening to the podcast where they talk about what Camel is, where you can use Camel, and where you should not use Camel etc.

Freddy is good at asking all the right questions which new users would have, and together they are great at coming to good answers.

Bob also shares from his wisdom and experience with using Camel. So you get all the good, bad and ugly of Camel from real war stories.

If you have some time to spare then I recommend listening.

The podcast is episode and the link is up there in the top of this blog.