Rabbitmq 带有消息编号的camel头

Rabbitmq 带有消息编号的camel头,rabbitmq,apache-camel,load-balancing,Rabbitmq,Apache Camel,Load Balancing,使用ApacheCamel,我希望向rabbitmq exchange发送具有不同路由密钥的消息,以实现负载平衡(现在我有了具有4个路由密钥的exchange,将来还会有更多)。有没有一种简单的方法可以将不同的头(routing KEY.setHeader(“rabbitmq.routing_KEY”,envelope.getRoutingKey());)添加到消息中 更新: 我解决了处理器和${id}的问题: .setHeader("id", simple("${id}")) .process

使用ApacheCamel,我希望向rabbitmq exchange发送具有不同路由密钥的消息,以实现负载平衡(现在我有了具有4个路由密钥的exchange,将来还会有更多)。有没有一种简单的方法可以将不同的头(routing KEY.setHeader(“rabbitmq.routing_KEY”,envelope.getRoutingKey());)添加到消息中

更新:

我解决了处理器和${id}的问题:

.setHeader("id", simple("${id}"))
.process(new Processor() {
    public void process(Exchange exchange) throws Exception {
    String id = exchange.getIn().getHeader("id").toString();
    String newRoutingKey = ROUTING_KEY_PREFIX +
            (Integer.valueOf(id.split(":")[MESSAGE_NUMBER_IND]) % ROUTING_KEYS_NUMBER);
    exchange.getIn().removeHeader("id");
    exchange.getIn().setHeader("rabbitmq.ROUTING_KEY", newRoutingKey);
} }).to(rmqQueue)

是否存在任何隐藏问题?

您可以使用toD动态设置RabbitMq端点的路由密钥

XML语法:

其中header.routekey是要使用的动态键,它在header中设置

对于Java DSL,语法可能如下所示:

.toD(”rabbitmq://hostname[:port]/exchangeName?routingKey=${header.routekey}


问题是我必须使用自定义类(RMQEndpoint扩展DefaultEndpoint)。我不能轻易改变它。有没有其他方法可以通过更改头来设置路由密钥?您没有使用rabbitmq组件吗?那么我假设您可以使用rabbitmq组件RMQEndpoint impl。这里有两种选择。是否可以将RMQEndpoint更改为扩展RabbitMQEndpoint而不是默认端点?如果您可以发布路由和端点的一些代码片段,我们可以更好地帮助您。