Sorry for the very broad question: Can some one please throw some light
on how idempotent consumers actually work?
I would like to have my routes available in a cluster and hence I
am exploring the use of Hazelcase idempotent repository. To prototype
that I experimented with two routes in one context in a single node.
Both the routes consume from the same topic and use the same
hazelcast idempotent repository. When a message is received from
the topic both the routes process the message. Given that they use
the same repository how/why do both the routes process the message?
context().addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("activemq:topic:test")
.routeId("one")
.setHeader("foo", constant("bar"))
.idempotentConsumer(header("foo"), repository)
.log("Received ${body} in one");
}
});
context().addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("activemq:topic:test")
.routeId("two")
.setHeader("foo", constant("bar"))
.idempotentConsumer(header("foo"), repository)
.log("Received ${body} in two");
}
});
template().sendBody("activemq:topic:test", 12345);
template().sendBody("activemq:topic:test", 45678);
template().sendBody("activemq:topic:test", 90123);
In the above case, both the routes receive only the first
message (not really surprising given that the key is hard-coded)
once. So it appears idempotency is scoped to the route.
I would eventually like to have the routes deployed in a cluster with
each message being handled by only one of the routes in the
cluster (i.e. either route "one" in node 1 or route "one" in node 2).
Given the above observation I am confused how the same route
deployed in two nodes would not process the each message.
Thanks!
--
View this message in context:
http://camel.465427.n5.nabble.com/Understanding-Idempotent-Consumption-tp5718481.html
Sent from the Camel - Users mailing list archive at Nabble.com.