【发布时间】:2018-02-09 19:39:06
【问题描述】:
下面是我为一个主题设置的 bean 示例。请记住,有多个 bean...每个消息类型一个
通过为每个消息类型设置一个路由,我已经能够成功接收和处理我的所有消息类型,但我想简化上下文文件,因此我只需要一个接收我所有主题的路由。
这是我的路线设置的样子...
<route id="Netty7001Route">
<from uri="netty4:tcp://192.168.200.3:7001…"/>
<to uri=”seda:ProcessRoute”/>
</route>
<route id=”ProcessRoute”/>
<from uri=”seda:ProcessRoute”/>
<setHeader headerName="LOGMESSAGE"><simple>A10::Entering endpoint for track message ${in.header.MSGNAME} via netty4</simple></setHeader>
<to uri="log:messageLogger?level=ERROR"/>
<setHeader headerName="LOGMESSAGE"><simple>A11::Leaving endpoint for track message ${in.header.MSGNAME}</simple></setHeader>
<to uri="log:messageLogger?level=ERROR"/>
<setHeader headerName="LOGMESSAGE"><constant>A14::Entering Mediation</constant></setHeader>
<to uri="log:messageLogger?level=ERROR"/>
**<process ref="DDS_C2_NewSystemReferencePointMediationBean"/>**
<setHeader headerName="MSGNAME"><constant>C2_TM_NewSystemReferencePoint</constant></setHeader>
<setHeader headerName="MSGTYPE"><constant>C2_NewSystemReferencePoint</constant></setHeader>
<setHeader headerName="LOGMESSAGE"><constant>A15::Leaving Mediation</constant></setHeader>
<to uri="log:messageLogger?level=ERROR"/>
<setHeader headerName="LOGMESSAGE"><constant>A17::Sending message to DDS domain 4</constant></setHeader>
<to uri="log:messageLogger?level=ERROR"/>
<to uri="dds://4/C2_TM_NewSystemReferencePoint?typeName=C2_NewSystemReferencePoint"/>
</route>
所以,上面的 process ref= 行是我想要动态的,因为在我查看标题中的 MSGNAME 之前,我不知道要调用哪个 bean 处理器。我尝试使用收件人列表失败,因为它们不是端点,而是处理器 bean,我尝试仅使用 ref:DDS_C2_{$in.header.MSGNAME}MediationBean,但骆驼不会启动并抱怨这里的简单标签.有没有办法在骆驼弹簧配置中做到这一点?
我尝试了一种解决方法,方法是使用检查 MSGNAME 然后调用相应的处理器 bean 的标记,但我需要为每种消息类型设置条件。这很有效,但与每个主题都有一条路线相比,效率极低。
我考虑过编写一个处理器,它会在 java 代码中调用适当的 bean 处理器,但我不确定这是否是满足我需要的正确方法,以及它是否比使用标记。
感谢您的帮助。
【问题讨论】:
-
澄清一下,我说的是代码中的进程 ref= 标签。此外,为我编写一个处理器来确定 bean 调用将在消息类型更改或添加时强制更新代码,因此我需要基于 spring 的解决方案。
-
“我考虑过只写一个处理器,它会在 java 代码中调用适当的 bean 处理器”我相信这将是一种方法(不管安全问题,提供一个类来调用 http 标头..) 直接和点在启动时进行评估,因此您不能动态提供“ref”
-
你为什么不使用choice().when(header==''whatever") 然后调用你的进程?注意我说的是使用choice/when 功能。 xml dsl。
-
我尝试使用选择/何时,但我有 96 种不同的消息类型,并且在测试期间性能比我为每个主题有一个路由时慢得多。
标签: spring apache-camel javabeans processor