Как установить пользовательские заголовки в сообщении RabbitMQ, используя Apache Camel? - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь добавить пользовательские заголовки в свое сообщение, поэтому, когда возникает исключение и оно попадает в очередь недоставленных сообщений, я вижу, что это за исключение.Однако все мои попытки этого не увенчались успехом.

  • с использованием .setHeader ()
  • установочного заголовка для свойства установки outMessage
  • обмена

Установка исключения в качестве свойства в полезной нагрузке недопустима.

@Component
public class ProcessRoute extends RouteBuilder {
    ...
    @Override
    public void configure() throws Exception {
        onException(Exception.class)
                .log("Error for ${body}! Requeue")
                .redeliveryDelay(2000)
                .maximumRedeliveries(3)
                .handled(true)
                .setHeader("TEST", constant("TEST"))
                .process(e -> {
                    e.getOut().setHeader("TEST", "TEST");
                    e.setProperty("TEST","TEST");
                });

        from(SOME_ROUTE)
          .doSomeStuff()
          .to(RABBITMQ);
    }
    ...
}

RABBITMQ-string:

rabbitmq://foo
?exchangeType=topic
&addresses=localhost:1234
&routingKey=#
&autoDelete=false
&queue=bar
&autoAck=false
&deadLetterExchange=DLX
&deadLetterQueue=bar.dlq
&deadLetterExchangeType=direct
&deadLetterRoutingKey=#
&username=foo
&password=bar

Результирующее сообщение в очереди недоставленных писем: Resulting message on dead-letter-queue

1 Ответ

0 голосов
/ 16 мая 2019

Если вы используете ключ заголовка, следуя шаблону, установленному компонентом Camel RabbitMQ, ваш пользовательский заголовок будет получен при публикации сообщения в RabbitMQ.

Исходя из кода выше, вместо:

.setHeader("TEST", constant("TEST"))

Сделайте это:

.setHeader("rabbitmq.TEST", constant("TEST"))

Компонент Camel RabbitMQ, похоже, игнорирует все остальные не- "rabbitmq". * "заголовки, которые могут быть на бирже Camel, и, вероятно, по уважительной причине.Их может быть немало, и большинство из них не имеют смысла в контексте сообщения, опубликованного на RabbitMQ.

...