Spring integration spring integration dsl配置幂等接收器以识别重复项

Spring integration spring integration dsl配置幂等接收器以识别重复项,spring-integration,spring-integration-dsl,Spring Integration,Spring Integration Dsl,在使用队列中的消息时,我使用DUPS_OK_确认模式,我需要检测重复消息并忽略它们 .from(Jms.messageDrivenChannelAdapter(activeMQConnectionFactory) .destination(sourceQueue) .configureListenerContainer(spec -> {

在使用队列中的消息时,我使用DUPS_OK_确认模式,我需要检测重复消息并忽略它们

.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;
}
我有两件事要做

  • 如何在中配置/调用此建议 Jms.messageDrivenChannelAdapter
  • 如果我需要元数据存储在oracle/mysql中,那么该表与任何示例链接的外观如何

  • 幂等接收器肯定是消费者的问题,而不是生产者的问题,即
    Jms.messageDrivenChannelAdapter()
    。当然,在Spring集成方面

    如果不想将副本传递给下游,则需要在
    Jms.messageDrivenChannelAdapter()之后在使用者上配置这样一个
    建议。在您的例子中,它是
    .transform(orderTransformer)
    。因此,代码可能如下所示:

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

    oracle/mysql
    MetadataStore
    就在这里-
    JdbcMetadataStore
    因为
    5.0

    拥有
    .handle(idempotenReceiverInterceptor()).transform(orderTransformer)
    和你的建议
    有什么区别???
    幂等接收器侦听器
    不是
    消息处理程序
    。这是一个AOP
    建议
    。因此,它只能应用于其他一些消息处理组件。是什么让你有不同的想法?我现在明白了,让我思考的原因是
    .transform(orderTransformer,e->e.advice(idempotenReceiveInterceptor())
    给出了编译错误,我花了一段时间才将其修复到
    .transform(orderTransformer,“methodName”,e->e.advice(idempotenReceiveInterceptor())
    是的。。。您的代码不清楚
    orderTransformer
    是什么类型。很高兴看到您找到了解决方案。谢谢,我还能够为我的ms sql设置元数据存储