- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 JMS 消息传递应用程序,其中有来自多个 JMS 目标的入站消息。消息有效负载是具有一些常见 header 的不同 JSON 表示形式。我依靠 ServiceActivators
处的 Spring 动态 Jackson 类型转换来转换为实际的 POJO。目前,路由很简单,因为 channel 本质上是按 JSON 有效负载类型划分的“数据类型” channel (它们都是 JSON 字符串有效负载,但 JSON 代表非常不同的对象类型)。
我想将全局验证逻辑应用于多个模式匹配 channel 的所有入站消息,例如"*input*"
并将无效消息转移到验证错误 channel 以供审核。无论消息有效还是无效,本地JMS事务都应该提交;如果消息无效,我不希望稍后重新发送无效消息。
我最初的想法是实现一个 ChannelInterceptor
来匹配应应用此逻辑的所有 channel ,但似乎无法在 中实现转移消息的功能 channel 拦截器
。看来我的 ChannelInterceptor
的两个选项是:
preSend
上返回 null 时回滚 JMS 事务,或者这些都不是期望的行为。 JMS 本地事务应始终提交(假设没有其他错误),并且消息要么发送到原始目的地,要么转移到无效的消息 channel 。
路由器
可能是一个不错的选择,但似乎没有办法将路由器应用于模式匹配的 channel 集,所以我相信我必须应用它分别到每个 channel 。我希望避免这种重复。
我想到的另一个选择是突破 AspectJ 并在 AbstractMessageSendingTemplate.convertAndSend(destination, Payload, postProcessor)
方法上实现 @Around
建议。这看起来有点侵入性,但看起来似乎可行。如果框架有更好的直接支持选项,我会很高兴听到。
如果我找不到全局应用此类路由逻辑的方法,那么另一个选择可能是通过单个 channel 路由所有入站 JMS 消息。可以将自定义路由器
应用于该入站 channel ,该入站 channel 使用负载类型 header 将消息定向到其正确的“数据类型” channel ,并将无效消息路由到验证错误 channel 。
非常感谢!
最佳答案
My initial thought was to implement a ChannelInterceptor that matches all the channels where this logic should be applied, but it does not appear that the capability to divert a message can be implemented in a ChannelInterceptor
是什么让你相信这一点? preSend()
可以返回 null
,从而有效地终止操作;只需将失败的验证发送到公共(public) channel 并返回 null
。
/**
* Invoked before the Message is actually sent to the channel.
* This allows for modification of the Message if necessary.
* If this method returns {@code null} then the actual
* send invocation will not occur.
*/
@Nullable
default Message<?> preSend(Message<?> message, MessageChannel channel) {
return message;
}
这将在入站适配器处导致 MessageDeliveryException
,但您可以简单地将其吸收到错误 channel 流中。
关于java - Spring Integration,全局将无效消息转移到不同的目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52786226/
我目前是一群学生的团队负责人,他们正在为一门类(class)的项目工作,该类(class)目前由电气和计算机工程专业的学生组成。我是一名电气工程专业的学生,我还没有开始研究该项目的软件组件。我觉得
我们对 spring-integration 非常满意,除非事情没有按预期工作。然后真的很难找出发生了什么(我们使用的是xml配置)。有人可以将我指向 spring 集成组件背后的 java 组件以便
我需要评估几个积分,我正在使用正常 (0,1) 密度来测试。 在 python 中 import scipy.integrate as integrate import scipy.stats imp
我想保留原始请求的原始有效负载并将其放在 xslt-transformer 或其他操作中。我丢失了它,因为我使用了 xslt-transformer,并且我只需要转换中的一些元素。所以我的场景是: 1
我想知道在 Spring Integration 中使消息不可变的原因是什么。 仅仅是因为多线程环境中的线程安全吗? 表现?当您每次要向现有消息添加某些内容时都必须创建新消息时,您不会受到性能惩罚吗?
我有一个偶尔会返回 503 错误的 http 网关调用。我想配置 retry advice围绕那个调用,但我不想为每个错误都这样做,只是 503s。 我已经配
我们正在使用 Spring Integration 4.2.3 聚合器组件和定义的组超时,并期望组在给定的超时值内超时,同时向组添加消息和发布大小标准不满足。 但我们看到了不同的结果,当我们向服务输入
我需要轮询邮件服务器。由于我的项目已经在 Spring 中,我使用 Spring-Integration 来轮询邮件服务器。我在这方面很成功。但现在我必须轮询多封电子邮件。有人可以告诉我该怎么做吗。
现在,我正在从事的项目已经达到了一个复杂的水平,需要完成多个步骤(实际上,它变得不可思议!)才能生产出完整/可用的产品。不幸的是,我们并不是从Continuos Integration的心态开始的,所
哪些指标表明应该使用企业集成模式框架?另一方面,哪些指标表明应该坚持使用简单的旧代码进行逻辑流? 就我而言,我们将 Spring Integration 应用于映射/处理应用程序,该应用程序从数据库读
我们在 XML 中有以下工作配置,并正在尝试转换为 DSL。不确定它们是否等效,也尝试使用 inboundAdapter。但是,我无法弄清楚如何在那里设置与并发相关的值。有人可以建议他们是否在 DSL
所以我在玩这个: factors :: Integral a => a -> [a] factors n = filter (\d -> n `rem` d == 0) . takeWhile (\d
我是 Spring 集成的新手,正在尝试建模一个流程,其中我通过 HTTP 进行同步请求和响应,但也是交付的同一流程的一部分将响应发送到队列,对其进行后处理,并让一个单独的进程使用该响应。所以从调用流
我有一个 Spring Integration Flow 项目,它公开了一个 Rest 网关,在收到 Rest POST 请求后,它会执行一些小逻辑。基于一些有效负载参数,我想动态激活另一个 Spri
我浏览了 Internet,在 Spring 论坛上发帖,并阅读了几乎全部在线文档,但我无法弄清楚 Spring Integration 是否可以在单个多资源 (JTA) 事务中处理多个消息。这对于我
我正在查看 spring-projects/spring-integration-samples 中的聚合器示例。 https://github.com/spring-projects/spring-
我正在查看 spring-projects/spring-integration-samples 中的聚合器示例。 https://github.com/spring-projects/spring-
我有一个 spring-integration接受 org.w3c.dom.Document 并返回域对象的转换器。这很好。如果缺少元素,我会引发应用程序异常。 但是,我想将该异常放到错误 chann
我显然已经通读了 documentation , 但我无法找到更详细的幕后情况描述。具体来说,有几个行为我很疑惑: 一般设置 import numpy as np from scipy.integra
我正在使用 Spring Integration 使用以下配置从目录中读取文件。但是,我希望在找到任何文件后停止轮询,直到服务不再重新启动为止。有什么方法可以在运行时更改轮询器延迟或在运行时启动/停止
我是一名优秀的程序员,十分优秀!