Spring integration spring integration dsl配置幂等接收器以识别重复项
在使用队列中的消息时,我使用DUPS_OK_确认模式,我需要检测重复消息并忽略它们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 -> {
.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()
。当然,在Spring集成方面
如果不想将副本传递给下游,则需要在Jms.messageDrivenChannelAdapter()之后在使用者上配置这样一个建议。在您的例子中,它是.transform(orderTransformer)
。因此,代码可能如下所示:
.transform(orderTransformer, e -> e.advice(idempotentReceiverInterceptor()))
oracle/mysqlMetadataStore
就在这里-JdbcMetadataStore
因为5.0
:拥有.handle(idempotenReceiverInterceptor()).transform(orderTransformer)
和你的建议有什么区别???幂等接收器侦听器
不是消息处理程序
。这是一个AOP建议
。因此,它只能应用于其他一些消息处理组件。是什么让你有不同的想法?我现在明白了,让我思考的原因是.transform(orderTransformer,e->e.advice(idempotenReceiveInterceptor())
给出了编译错误,我花了一段时间才将其修复到.transform(orderTransformer,“methodName”,e->e.advice(idempotenReceiveInterceptor())
是的。。。您的代码不清楚orderTransformer
是什么类型。很高兴看到您找到了解决方案。谢谢,我还能够为我的ms sql设置元数据存储