- 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/
如果我将我的个人 repo 转移到一个组织(由我创建),我将失去所有 见解 例如来自原始 Repo 的流量历史记录、拉取请求、贡献者、 fork 等? 最佳答案 拉取请求被保留:参见“About re
如何为解析 if-then[-else] 案例制定正确的规则?这是一些语法: { module TestGram (tparse) where } %tokentype { String }
如何为解析 if-then[-else] 案例制定正确的规则?这是一些语法: { module TestGram (tparse) where } %tokentype { String }
我读过有关mutex的信息,这些信息由线程拥有,并且只能由拥有的线程使用。在this answer中,该解决方案建议每个进程在发出互斥信号之前,必须拥有互斥锁的所有权。我必须在这里承认自己的愚蠢,不知
我只能从回调函数之一中想到 curl_close() 。 但是 php 抛出了一个警告: PHP 警告:curl_close():尝试从回调中关闭 cURL 句柄。 任何想法如何做到这一点? 最佳答案
带有冲突的语法的精简版本: body: variable_list function_list; variable_list: variable_list variable | /* empty
我创建了新的开发者帐户,然后将应用程序转移到新帐户。然后我在新帐户下创建了相同的标识符。并构建App并上传到AppStore。 I have got the warning with WARNING
我想像这样管理类主任的所有 Activity : 此外所有 Activity 都扩展基本 Activity 以使用公共(public) View 。 在这种情况下,我想处理传输 Activity ,例
使用 C 中的简单链表实现,我如何告诉 Splint 我正在转让 data 的所有权? typedef struct { void* data; /*@null@*/ void* ne
请参阅以下 yacc 代码。如果我删除生产因素:'!' expr,解析冲突消失。这里发生了什么? %{ #include #include %} %token TRUE %token FALSE
是否可以将 props 向下传输到子组件,其中 { ..this.props } 用于更简洁的语法,但是排除某些 props,如 className 或 id? 最佳答案 您可以使用解构来完成这项工作
如果我有以下数据框: date A B M S 20150101 8 7 7.5 0 20150101 10 9 9
我需要将一个 __m128i 变量(比如 v)移动 m 位,以便位移动所有变量(因此,结果变量表示 v*2^m)。执行此操作的最佳方法是什么?! 请注意 _mm_slli_epi64 分别移动 v0
我需要这样调用我的程序: ./program hello -r foo bar 我从 argv[1] 中打招呼,但我在使用值 bar 时遇到问题,我是否也应该将“r:”更改为其他内容? while((
我是新来的 Bison我在转换/减少冲突方面遇到了麻烦...我正在尝试从文件加载到 array data[] : struct _data { char name[50]; char sur
当然有很多关于解决移位/归约错误的文档和方法。 Bison 文档建议正确的解决方案通常是%期待它们并处理它。 当你遇到这样的事情时: S: S 'b' S | 't' 您可以像这样轻松解决它们: S:
我有以下(大量精简的)快乐语法 %token '{' { Langle } '}' { Rangle } '..' { DotDot } '::' { ColonC
我的 Bison 解析器中有很多错误,即使它运行良好,我也想了解这些冲突。代码如下: 词法分析器: id ([[:alpha:]]|_)([[:alnum:]]|_)* %% {id
在我的项目中,我有这样的情况,一个 Activity 应该将值(value)转移到另一个 Activity 。并且根据这个值应该选择需要的菜单元素。我试图在 bundle 的帮助下做到这一点,但我不知
我一直在阅读 NSIndexPaths 以获得 uitableviews 等。但是我很难操纵现有的索引路径。 我想在保留行的同时采用现有的索引路径递增/移动每个部分。因此 indexPath.sect
我是一名优秀的程序员,十分优秀!