The purpose of this article is to help you get through some very quick and concise examples of microservices using Camel.
This might also be called a “bare bones” approach.
Before we start, I’ll try to clarify some potential confusion.
This may take more time than reviewing the code itself 🙁
Skip through, accordingly. The meat is in the bottom half.
Micro Service, Maximum Confusion:
Microservices are best characterized by what they are not. Which leads to confusion, because a microservice which is not anything, also fails to exist. So it has to be something. Stay with me here.
As soon as a microservice becomes something, the arguments begin. “I’ll use REST,” so someone blogs “Microservices suck because REST sucks.” Then you have to explain to the hater that microservices don’t require REST, which may only confuse him, because most, in fact, may use REST APIs. And so on, through every decision point. Exhausting.
It was tempting to name this blog “Haters Guide to Camel Microservices” but that would only serve my own frustrations with the human side of this puzzle.
Microservices Defined In This Context
In this context, I will approach microservices as an attempt to eliminate the ball and chain of required infrastructure. No hosting Tomcat or service bus … or …. whatever might be getting your dander up. It can be a long list. Every technology has it’s own haters. Go to any conference. Embarrassing, at least for the technology agnostic.
The approach here will be to eliminate everything possible – the bare bones approach – because that makes Camel microservices easiest to learn. This is actually a big win, because it is easier to learn how to add stuff back in, than learn what can be taken away after it is added. Or, so it was for me.
Next, a Spring Boot project will make up the second service. By adding the absolute minimum Camel code to this, you will quickly see the delta. Not much to see.
Debating Society Disclaimer
Given the impressive debating society around all things microservices… Please do not use these two projects as part of this debate. These example projects are learning tools only, and have no merit, other than a place to pick up how to information quickly.
Why So Difficult To Find a Bare Bones Example?
The last piece of confusion to resolve is this:
If Camel requires nothing more than a bare bones setup, why is there almost no prominent online example of same? Excepting for unit test projects, which might only confuse the novice? Even Claus Isben’s own Spring Boot Example seems to include layers of opinionated infrastructure, which can obfuscate how bare bones a Camel service might be.
You won’t have to think hard to answer this question. No one really believes you would ever want to deploy a bare bones service. “You’re at least going to need this and this and this.” Great for teaching this and this and this, not so great for learning the essential minimum.
About the Routes
All routes in this set of examples try to do as little as possible, other than prove that they are running.
It is assumed that you would or have learned about Camel routes elsewhere, and would insert your desired routes herein. One such modification would be to provide a serviceable camel endpoint such as REST or file or jms or … which neither of these services has 🙂
Two of Quadzillion Deployment Methods Provided For:
So many options! But not here. I run both projects with either of
- Shell script (java -jar etc)
What is not included? It is assumed that the reader either has his favorite microservice vendor – i.e. AWS – or he is being assaulted daily by many vendors who would like to be his favorite. Nearly any could such platform could be consumed, with 1 or 2 above, and a little extra account metadata.
Each project renames the jar which maven produces to make it easier to point the shell script or Dockerfile. This is done using <finalname> in the pom.xml.
Series Advertisement: Jammazwan
“Jammazwan” is Hindi for “camel keeper”.
This blog is part of that series.
If you are impatient or in a hurry, the 2 minute video might explain Jammazwan in the shortest amount of time.
Bare Bones Camel MicroService:
Little more than a main and a route. Just to show you how skinny it can get. Too skinny to be representative of a real service.
This is pretty much the only code in the project. Of these 24 lines, only 3 make this a Camel microservice:
Main main = new Main();
The rest of this code is just imports, a main(), and the RouteBuilder with a 1 line route, which you would expect in anything Camel, microservice or not.
Note that I also had to add the maven-shade-plugin to the pom.
I left some sample shell scripts to launch it as either a straight jar, or a docker image. Adjust scripts as needed to match your own file placements.
Other than that, the project is nearly empty. And now you know how to create the skinniest microservice imaginable.
Note also that no port is exposed in the Dockerfile, as this service has no endpoints.
Bare Bones, except adding Spring Boot
What would be the absolute minimum number of steps required to use Spring Boot as it comes right out of the box?
This project answers that question.
Here’s a screenshot of how I generated it. Spring makes start.spring.io useable for anyone to use:
So far, no camel code whatsoever, other than naming a dependency in the pom.xml (lower right). A 30 second operation, start to finish.
Look below, and you’ll see exactly what was added after downloading. Notice that the three highlighted lines are literally same as those in the BareBones example above. The route is the same, and the primary difference is the different wrapper to run those three lines from above, only in the boot application.
As with the previous project, the jar name was adjusted in the pom, and shell scripts and Dockerfile were added for deployment/running.
I’m hoping by now you would agree, there isn’t that much work to a Camel microservice, if you want to go bare bones. And repeating from above, any cloud vendor would be happy to take it from there. You can repeat this entire process in less time than it takes to read this blog, once the process is familiar.
Now That You Have Learned The Minimum:
You may now add back in whichever pieces of infrastructure technology that don’t get your dander up. I’m sure you have your own favorite list.
Most will make the right choice, and head towards something like Claus Isben’s adaptation of Spring Boot. If you do that now, you would at least be well informed. It’s not quite as well documented, but now you know the essential minimums.
Or, better yet, take full advantage of fabric8 and/or Openshift!
Go for it!