I have N message producers, N RabbitMQ instances, N message consumers and 1 service. Producers produce the same messages while consumers consume the same messages. Here is the problem. Consumers must agree on who calls the service API, since calling the service API twice with the same message leads to an error. And I don't know how could consumers decide who calls the service.
I had some ideas. We could create a RabbitMQ cluster (with a plugin that detects duplicates) and unite all the consumers with the cluster. Consumers could send messages to the same queue using "direct" routing which will lead to "round-robin" message processing. But I'm not sure if there is a reliable and well-tested plugin that detects duplicated messages in RabbitMQ clusters.
Is there any other technique to solve this problem? I have heard about Apache Camel, but I can't say if it can save my day.