Как опубликовать sh пользовательский объект в очереди DLQ, используя Camel OnException - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть что-то вроде ниже:

    onException(Exception.class)
        .maximumRedeliveries(2).redeliveryDelay(1000L).asyncDelayedRedelivery() 
        .log(LoggingLevel.ERROR, LOGGER, "Body before process ->> \"${body}\" for the cause of ->  \"${exception.message}\"")
        .process(new Processor() {
            @Override
            public void process(Exchange exchange) throws Exception {
                JSONObject obj = new JSONObject();
                obj.put("body", exchange.getIn().getBody());
                obj.put("errMsg", "testErrorMsg");
                exchange.getIn().setBody(obj);
            }
        })
        .log(LoggingLevel.ERROR, LOGGER, "Body after process ->> \"${body}\" for the cause of ->  \"${exception.message}\"")
        .setExchangePattern(ExchangePattern.InOnly).setFaultBody(constant(true))
        .setHeader(RabbitMQConstants.REQUEUE, constant(Boolean.FALSE)).handled(false);

Исходное сообщение:

{"key" : "123" }

, и я ожидаю, что пользовательское сообщение, как показано ниже, при отправке в DLQ:

{
  "body": {
    "key": "123"
  },
  "errMsg": "testErrorMsg"
}

В журналах я вижу, что тело преобразуется в соответствии с моими ожиданиями, но в очереди DLQ оно показывает исходное сообщение.

Можно изменить сообщение перед отправкой в ​​DLQ?

1 Ответ

0 голосов
/ 20 февраля 2020

Добро пожаловать в StackOverflow! Вы можете использовать EIP канала для письма по сделке с его onPrepareFailure для добавления пользовательского Processor, для изменения Exchange перед его доставкой в ​​DLQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...