Original image by Toby Hudson CC BY-SA 3.0 via Wikipedia
The Apache Camel community celebrates the release 1.0.0 of Camel Quarkus!
What is Camel Quarkus?
Camel Quarkus brings the outstanding integration capabilities of Apache Camel to Quarkus - the toolkit for writing subatomically small and supersonically fast Java and Kotlin applications. In addition to memory consumption and start time improvements on stock JVMs, Quarkus also allows for compiling applications to native executables thus improving the performance characteristics even more.
Camel Quarkus is suitable not only for creating long living services and potentially short living serverless applications but also for command-style applications that execute some specific task (or wait for some specific condition) and exit.
Developer joy
Writing integrations has never been more joyful for developers than with Camel Quarkus:
- Easy to start with: either via code.quarkus.io or using
mvn quarkus:create
- The “live coding” feature, a.k.a.
mvn compile quarkus:dev
shortens your development iterations - check this 2 mins video - Easy to test using JUnit 5 extensions
- Hides the complexity of the native compilation using GraalVM or Mandrell
Check our User guide!
Camel components coverage
Since the early beginnings the number of supported Camel bits went up substantially. As of Quarkus 1.0.0 and Camel 3.4, Camel Quarkus supports:
- 155 out of 350 Camel components (44%)
- 27 out of 43 Camel data formats (63%)
- 13 out of 17 Camel languages (76%)
- 17 out of 42 miscellaneous Camel components (40%)
Some of these are supported in JVM mode only - please refer to the complete list for details.
Bootstrapping methods
There are two ways to bootstrap and configure Camel Quarkus:
- Bare
- With Camel Main
Both methods configure and start a Camel Context for you. The main difference is in how much the resulting Camel Context obeys the conventions known from Camel on other platforms. If you like to configure your routes using camel.component.*
properties, then you need to add the camel-quarkus-main
dependency and the properties will work as usual on Camel standalone or Camel Spring Boot. You may prefer this option if you used Camel before or if you are migrating from other platform.
If you rather come from the CDI side and you never wrote Camel integrations before, you may choose to use the bare bootstrap and configure your routes using CDI. You can configure Camel using CDI even if you have Camel Main in your application.
See the defining Camel routes section of the User guide for more details.
CDI
CDI plays a central role in Quarkus and Camel Quarkus offers a first class support for it too. You may use @Inject
, @ConfigProperty
and other annotations e.g. to inject beans and configuration values to your Camel RouteBuilder’s. See the CDI section of the User guide for more details.
Native mode
As mentioned above, Quarkus brings the option to compile an application to native executable. Compared to running on JVM, native applications start faster, require less memory at runtime and are also smaller on disk.
However, the native compilation with GraalVM is all but easy and straightforward. First, there are limitations for what your code and all your dependencies may or may not do. Second, the native compiler needs to be configured through many options that may not be easy to figure out and maintain.
Quarkus isolates application developers from most of those subtleties. The native compilation is driven by extensions which configure the native compiler in a way suitable for the given aspect of the application.
On Camel Quarkus, the extensions roughly correspond to camel components - i.e. if you need camel-sql
you add the camel-quarkus-sql
extension as a dependency to your application and it takes care for both pulling the camel-sql
artifact and configuring the native compiler. Extension pages document any further configuration that needs to be done by the application developer. E.g. in case of the SQL extension, the quarkus.camel.sql.script-files
property needs to be set.
Check the Native mode section of the Camel Quarkus User guide and Quarkus Native guide for more details about the native compilation on Quarkus.
Who is using Camel Quarkus?
While we mostly have only indirect information about the usage via GitHub issues, there is one prominent user, we are especially proud of: Camel K. As of Camel K 1.0, Camel Quarkus is one of the two supported runtimes and “is expected to be the default underlying runtime in the next release”.
Highlights of the release 1.0.0
General:
- Camel 3.4.2
- Quarkus 1.7.0.Final
New extensions:
What’s next?
- More extensions - upvote or even better contribute!
- Even less reflection with Camel 3.5
We wish you a lot of joy with Camel Quarkus and we look forward to your feedback and participation!