Spring интеграции DSL настроить идемпотентный приемник для выявления дубликатов - PullRequest
0 голосов
/ 18 мая 2018

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

.from(Jms.messageDrivenChannelAdapter(activeMQConnectionFactory)
                        .destination(sourceQueue)
                        .configureListenerContainer(spec -> {
                            spec.sessionTransacted(false);
                            spec.sessionAcknowledgeMode(Session.DUPS_OK_ACKNOWLEDGE);
                        }))
                .transform(orderTransformer)
                .handle(orderService, "save")
                .get();

У меня есть совет идемпотентного приемника.

@Bean
public IdempotentReceiverInterceptor idempotentReceiverInterceptor() {
    IdempotentReceiverInterceptor idempotentReceiverInterceptor = new IdempotentReceiverInterceptor(new MetadataStoreSelector(m ->
            (String) m.getHeaders().get("JMSMessageId")));
    idempotentReceiverInterceptor.setDiscardChannelName("ignoreDuplicates");
    idempotentReceiverInterceptor.setThrowExceptionOnRejection(false);
    return idempotentReceiverInterceptor;
}

Я застрял с двумя вещами

  1. Как мне настроить / вызвать этот совет в Jms.messageDrivenChannelAdapter?
  2. Если мне нужно хранилище метаданныхчтобы быть в oracle / mysql, как таблица выглядит как пример ссылки

1 Ответ

0 голосов
/ 18 мая 2018

Идемпотентный приемник определенно является вопросом потребителя , но не производителя , что составляет Jms.messageDrivenChannelAdapter().С точки зрения Spring Integration, конечно.

Если вы не хотите передавать дубликаты в нисходящий поток, вам необходимо настроить такой Advice для потребителя после этого Jms.messageDrivenChannelAdapter().В вашем случае это .transform(orderTransformer).Итак, код может выглядеть так:

.transform(orderTransformer, e -> e.advice(idempotentReceiverInterceptor()))

Оракул / mysql MetadataStore здесь - JdbcMetadataStore, поскольку 5.0: https://docs.spring.io/spring-integration/docs/5.0.5.RELEASE/reference/html/jdbc.html#jdbc-metadata-store

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