1

メッセージを RabbitMQ にパブリッシュしています。RabbitMQ がダウンしたときのエラーを追跡したいと思います。このため、リカバリ コールバックを追加RetryTemplateしましたが、リカバリ コールバックはこのメソッドのみgetLastThrowable()を提供し、詳細を提供する方法がわかりません。 RabbitMQ がダウンしたときに失敗したメッセージ。(ドキュメントRecoveryCallbackによると、「再試行コンテキストにはフィールドのみが含まれているという点で多少制限されてい lastThrowableます。より洗練されたユースケースでは、外部を使用し て、コンテキストの属性を介してRetryTemplate追加情報を伝えることができRecoveryCallbackます」)しかし、私はしません誰かが素晴らしい例で私を助けることができれば、それを行う方法を知っています.

ウサギのテンプレート

public RabbitTemplate rabbitMqTemplate(RecoveryCallback publisherRecoveryCallback) {
    RabbitTemplate r = new RabbitTemplate(rabbitConnectionFactory);
    r.setExchange(exchangeName);
    r.setRoutingKey(routingKey);
    r.setConnectionFactory(rabbitConnectionFactory);
    r.setMessageConverter(jsonMessageConverter());

    RetryTemplate retryTemplate = new RetryTemplate();
    ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy();
    backOffPolicy.setInitialInterval(500);
    backOffPolicy.setMultiplier(10.0);
    backOffPolicy.setMaxInterval(10000);
    retryTemplate.setBackOffPolicy(backOffPolicy);
    r.setRetryTemplate(retryTemplate);
    r.setRecoveryCallback(publisherRecoveryCallback);
    return r;
    }

回復コールバック

@Component
public class PublisherRecoveryCallback implements RecoveryCallback<AssortmentEvent> {
    @Override
    public AssortmentEvent recover(RetryContext context) throws Exception {
        log.error("Error publising event",context.getLastThrowable());
        //how to get message details here??
        return null;
    }
}

AMQP 送信アダプタ

return IntegrationFlows.from("eventsChannel") .split() .handle(Amqp.outboundAdapter(rabbitMqTemplate) .exchangeName(exchangeName) .confirmCorrelationExpression("payload") .confirmAckChannel(ackChannel) .confirmNackChannel(nackChannel) ) .get();

4

1 に答える 1