带有消息号的骆驼头

时间:2018-12-18 15:27:41

标签: rabbitmq apache-camel load-balancing

我希望使用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)

有没有隐藏的问题?

1 个答案:

答案 0 :(得分:1)

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

XML语法:

  

<toD uri="rabbitmq://hostname[:port]/exchangeName?routingKey=**${header.routekey}**"/>

其中header.routekey是您打算使用的动态密钥,它在标题中设置。

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

  

.toD(“ rabbitmq://主机名[:端口] / exchangeName?routingKey = $ {header.routekey} ”);