我希望使用Apache Camel将具有不同路由键的交换消息发送到Rabbitmq,以实现负载平衡(现在我已经交换了4个路由键,将来还会更多)。是否有一种简单的方法可以向邮件添加不同的标头(路由键.setHeader(“ rabbitmq.ROUTING_KEY”,信封.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)
有没有隐藏的问题?
答案 0 :(得分:1)
您可以使用toD将路由密钥动态设置为RabbitMq端点。
XML语法:
<toD uri="rabbitmq://hostname[:port]/exchangeName?routingKey=**${header.routekey}**"/>
其中header.routekey是您打算使用的动态密钥,它在标题中设置。
对于Java DSL,语法可能如下所示:
.toD(“ rabbitmq://主机名[:端口] / exchangeName?routingKey = $ {header.routekey} ”);