Cafe Example
This example shows how to use Camel to implement a Cafe use case.
First It uses the splitter to dispatch the order, then sends the orders to barista by checking if the coffee is hot or cold. When the coffee is ready, we use a aggregate to gather the drinks for waiter to deliver.
Here is the route builder code for it.
public void configure() {
from("direct:cafe")
.split().method("orderSplitter").to("direct:drink");
from("direct:drink").recipientList().method("drinkRouter");
from("seda:coldDrinks?concurrentConsumers=2").to("bean:barista?method=prepareColdDrink").to("direct:deliveries");
from("seda:hotDrinks?concurrentConsumers=3").to("bean:barista?method=prepareHotDrink").to("direct:deliveries");
from("direct:deliveries")
.aggregate(new CafeAggregationStrategy()).method("waiter", "checkOrder").completionTimeout(5 * 1000L)
.to("bean:waiter?method=prepareDelivery")
.to("bean:waiter?method=deliverCafes");
}
Running
You will need to compile this example first:
The example should run if you type:
To stop the server hit ctrl + c
Sample output
When the client is running it outputs all requests and responses on the screen.
Camel thread 4: seda:Camel thread 3: seda:Camel thread 1: seda:Camel thread 2: seda:-----------------------
Order #2
Iced ESPRESSO, 2 shots.
Hot MOCHA, 2 shots.
Hot CAPPUCCINO, 4 shots.
Hot LATTE, 4 shots.
-----------------------
See Also