package org.myeslib.example.hazelcast.routes;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import lombok.RequiredArgsConstructor;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import com.hazelcast.core.IQueue;
@RequiredArgsConstructor(onConstructor=@__(@Inject))
public class HzConsumeCommandsRoute extends RouteBuilder {
final String commandsDestinationUri;
final HzInventoryItemCmdProcessor inventoryItemCmdProcessor;
final IQueue<UUID> eventsQueue;
@Override
public void configure() throws Exception {
from(commandsDestinationUri)
.routeId("handle-inventory-item-command")
.setHeader("id", simple("${body.getId()}"))
.process(inventoryItemCmdProcessor)
.wireTap("direct:enqueueId")
.newExchangeBody(header("id"))
.end()
.setBody(constant(null))
;
from("direct:enqueueId")
.routeId("enqueueId")
.process(new Processor() {
@Override
public void process(Exchange e) throws Exception {
if (!eventsQueue.offer(body().evaluate(e, UUID.class), 100, TimeUnit.MILLISECONDS)){
log.error("error while enqueuing {}", body().evaluate(e, UUID.class));
}
}
})
;
}
}