An integration written in Kotlin looks very similar to a Java one except it can leverages Kotlin’s language enhancements over Java:
from("timer:tick")
.process { e -> e.getIn().body = "Hello Camel K!" }
.to("log:info")
You can run it with the standard command:
kamel run example.kts
Camel K extends the Camel Java DSL making it easier to configure the context in which the integration runs using the top level context block
context {
// configure the context here
}
At the moment, the enhanced DSL provides a way to bind items to the registry, to configure the components the context creates and some improvements over the REST DSL.
To register beans as you would do with a Camel registry you can use the Beans DSL
beans {
bean<org.apache.commons.dbcp2.BasicDataSource>("dataSource") { (1)
driverClassName = "org.h2.Driver"
url = "jdbc:h2:mem:camel"
username = "sa"
password = ""
}
bean("filterStrategy") { (1)
org.apache.camel.support.DefaultHeaderFilterStrategy()
}
processor("myProcessor") { (2)
it.getIn().body = "Hello"
}
predicate("myPredicate") { (3)
false
}
}
-
bind beans to the context for the database and filter strategy
-
define a custom processor to be used later in the routes by ref
-
define a custom predicate to be used later in the routes by ref
Components can be configured within the components block inside the camel one:
camel {
components {
component<SedaComponent>("seda") { //(1)
queueSize = 1234
concurrentConsumers = 12
}
component<SedaComponent>("mySeda") { // (2)
queueSize = 4321
concurrentConsumers = 21
}
component<LogComponent>("log") { // (3)
setExchangeFormatter {
e: Exchange -> "" + e.getIn().body
}
}
}
}
-
configure the properties of a component whit type SedaComponent and name seda
-
configure the properties of a component with type SedaComponent and name mySeda, note that as mySeda does not represent a valid component scheme, a new component of the required type will be instantiated.
-
configure the properties of the component whit name log
Note
|
As for Groovy, you can provide your custom extension to the DSL |
Integrations REST endpoints can be configured using the top level rest block:
rest {
configuration { // (1)
host = "my-host"
port = "9192"
}
path("/my/path") { // (2)
get("/get") {
consumes("application/json")
produces("application/json")
to("direct:get")
}
}
}
-
Configure the rest engine
-
Configure the rest endpoint for the base path '/my/path'