- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 IdempotentReceiverInterceptor 来防止我的集成流发出它已经生成的消息。但是,IdempotentReceiverInterceptor#invoke 似乎只需要扩展 MessageHandler(在一定程度上)的组件或具有名为“handleMessage”的方法的组件,该方法的第一个参数是消息。我想对消息进行重复数据删除,如果失败,则执行一些额外的处理。
我的问题有两个:
我觉得我误解了 IdempotentReceiverInterceptor 的正确使用,我应该能够在几乎任何组件上使用它,但实现似乎与我不一致。我应该如何使用它是错误的还是我使用错误?我知道我可能只是将 MetadataStoreSelector 作为过滤器放入流程中,但我正在尝试按照 SI 的建议进行操作。
感谢任何帮助。这是我期望工作的示例流程。
return IntegrationFlows
.from(messageProducer)
.<String, UUID>transform(s -> UUID.fromString(s))
.claimCheckOut(messageStore)
.handle(
new AbstractReplyProducingMessageHandler() {
@Override
protected Object handleRequestMessage(final Message<?> requestMessage) {
return requestMessage;
}
},
spec -> {
spec.advice(idempotentReceiverInterceptor);
})
// do some more stuff
.transform(transformer)
.handle(loggingHandler)
.get();
这是显示它没有的日志消息
This advice org.springframework.integration.handler.advice.IdempotentReceiverInterceptor can only be used for MessageHandlers; an attempt to advise method 'toString' in 'org.springframework.integration.handler.AbstractReplyProducingMessageHandler$AdvisedRequestHandler' is ignored
编辑:对于那些来这里寻找解决方案的人来说,这几乎就是我最终所做的
return IntegrationFlows
.from(messageProducer)
.<String, UUID>transform(s -> UUID.fromString(s))
.claimCheckOut(messageStore)
.filter(metadataStoreSelector)
// do some more stuff
.transform(transformer)
.handle(loggingHandler)
.get();
最佳答案
根据Reference Manual :
This is an AOP Advice, which is applied to the
MessageHandler.handleMessage()
method and can filter a request message or mark it as a duplicate, according to its configuration.
源代码说:
boolean isMessageHandler = invocationThis != null && invocationThis instanceof MessageHandler;
boolean isMessageMethod = method.getName().equals("handleMessage")
&& (arguments.length == 1 && arguments[0] instanceof Message);
换句话说只有MessageHandler
IdempotentReceiverInterceptor
可能会影响实现.
就是一个。
你担心Transformer
, GenericHandler
不求返回。框架以特定的 MessageHandler
结束。无论如何包装,例如ServiceActivatingHandler
, MessageTransformingHandler
等等。所有这些只是因为它就像 Spring Integration 中的契约(Contract):channel -> endpoint -> messageHandler
.
那是两个。
自 IdempotentReceiverInterceptor
的主要前提是将逻辑准确地应用于消费者端点(请参阅其文档),您不能从 spec.advice()
中使用它,因为这正是 handleRequestMessage()
,如你所料。但这不适用于 IdempotentReceiverInterceptor
.
是的...不幸的是,没有通过 Java DSL 样式使用它的简单方法。虽然你可以通过消息 channel 区分你的流量并提取@ServiceActivator
( @Transformer
) 连同 @IdempotentReceiver
分开@Service
,直到我们找到“原始”Java 配置的解决方案。
欢迎提出 JIRA票就此事。我想ConsumerEndpointFactoryBean
应该区分IdempotentReceiverInterceptor
来自 advice
中的所有其他人并将其正确应用于 handleMessage
最后。因此,您预期的配置将起作用。
感谢您发现这一点!
关于java - Spring : IdempotentReceiverInterceptor can only be used on MessageHandlers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38150360/
我想将 JavaScript 变量传递给 Swift。我在 JavaScript 中遇到错误并搜索它,但没有得到任何结果。错误是: TypeError: Cannot read property 'm
我正在使用 Symfony Messenger,我想在处理程序中继续发送消息,直到它被发送多次。 我怎样才能跟踪它? 到目前为止,这是我的处理程序类的代码: class RetryTestHandle
我面临以下问题,但尚未找到有效的解决方案。我有 3 个不同的应用程序,它们应该相互通信: 用户界面部分(1) 后端应用程序(2) “云端”微服务(3) 后端应用程序为 UI 提供 Web 服务 (RE
我想通过拆分并行处理项目列表,将每个项目路由到它们适当的网关并聚合结果。但是,我的应用程序没有启动,出现以下错误: BeanCreationException: The 'currentCompone
我们有一组在 JAX-WS 中实现的 Web 服务和一个在 SOAP header 中添加控制属性的 SOAPHandler。今天,我们需要在我们创建的每个新服务中添加 @HandlerChain 注
我如何从 MessageHandler 中检索 ActionDescriptor? 我可以使用以下代码在 SendAsync 方法中获取 ContractDescriptor: var config
我正在尝试使用 IdempotentReceiverInterceptor 来防止我的集成流发出它已经生成的消息。但是,IdempotentReceiverInterceptor#invoke 似乎只
Tomcat 8.0.21 这个有效: session.addMessageHandler(new MessageHandler.Whole() { @Override
我试图通过事件从 web View 中执行 android 中的代码。所以我用 JavascriptInterface 实现了一个好方法,但是因为我有一个 iOS 应用程序,所以我想使用相同的方法。那
更新:错误在于使用 Action onSuccess对于实际任务并在没有 await 的情况下调用它。我们实际上正在传递一个 async回调作为 onSuccess ,因此它不会阻塞,它只是被解雇而不
在我的 pdf 中,在我的 onOpenAction 中,我有这个 js 代码: app.alert(this.hostContainer); try { this.hostContainer.
我花了相当多的时间试图弄清楚如何导入和使用来自 spring 框架 的 MessageHandler 接口(interface)。以下是我使用 IntelliJ Idea IDE 所做的事情: imp
我有一个简单的 Spring Integration 配置可以工作 @Configuration public class FTPIntegration { @Bean public MessageC
我有一个疯狂的问题。我对按钮、richedits、复选框进行了子类化,.. 一切似乎都工作正常。但是在我对 trackbar 进行子类化之后,我现在遇到了一些麻烦。问题是我的子类消息处理程序没有收到
我正在使用 WKWebView,我正在加载要显示的网页 (React)。但是我的 didFinish 触发得太早了。因此,当我的代表通知 didFinish 时,在加载实际数据之前,我只会看到几秒钟的
我正在使用 PDF.JS 加载 pdf。加载pdf时,我收到此错误, ERROR Error: Unknown action from worker: undefined at Worker.
是否可以仅为使用路由属性的特定 Controller 添加 MessageHandler? 如果它不包含某些 header ,我想在管道中更早地切断请求。我想要 提到: 我不能在 WebApiConf
我正在尝试使用 DSL 测试一些带有 spring-integration 的东西。到目前为止这只是一个测试,流程很简单: 创建一些消息 并行处理(记录)它们 聚合它们 记录聚合 除了聚合器,它工作正
我成功地将 Autofac 连接到我的 ASP.NET WebAPI 项目中,现在我想知道如何能够解析我的 MessageHandler 中的服务。 由于必须在应用程序启动时添加 MessageHan
我正在努力处理 Spring-WS 项目。 在我的 Endpoint 类中,如果我没有指定我正在接收/返回 JAXBElement,我会收到以下错误:No adapter for endpoint;您
我是一名优秀的程序员,十分优秀!