如何在 MULE 中的 Flow 结束时检查有效的 URL 并将其路由到 VM ..?
Posted
技术标签:
【中文标题】如何在 MULE 中的 Flow 结束时检查有效的 URL 并将其路由到 VM ..?【英文标题】:How to check for valid URL's and route it to VM at the end of Flow in MULE..? 【发布时间】:2012-02-09 09:08:48 【问题描述】:我在 Mule 中有一个流程。它包含一个监听端口号和地址的 HTTP 入站。现在根据 HTTP Inbound 的地址,我必须将它路由到另一个 VM。
这部分我做了如下:
<flow name="MetaService">
<http:inbound-endpoint address="http://localhost:8000/jcore/meta"
transformer-refs="HttpParams" responseTransformer-refs="JavaObjectToJson">
</http:inbound-endpoint>
<component>
<spring-object bean="MetaServiceBean"/>
</component>
<choice>
<when evaluator="header" expression="INBOUND:http.request.path=/jcore/meta">
<vm:outbound-endpoint path="ToJSON" exchange-pattern="request-response"/>
</when>
<when evaluator="header" expression="INBOUND:http.request.path=/jcore/meta.json">
<vm:outbound-endpoint path="ToJSON" exchange-pattern="request-response"/>
</when>
<when evaluator="header" expression="INBOUND:http.request.path=/jcore/meta.xml">
<vm:outbound-endpoint path="ToXML" exchange-pattern="request-response"/>
</when>
<otherwise>
<message-properties-transformer>
<add-message-property key="http.status" value="404"/>
</message-properties-transformer>
<expression-transformer>
<return-argument evaluator="string"
expression=""Exception": "Could not Render the Request. URL may be wrong""/>
</expression-transformer>
</otherwise>
</choice>
</flow>
发生的情况是,如果地址末尾有“.json”或“.xml”,那么我会将其路由到 VM 并在如果 URL 无效,我会引发 HTTP 404 错误。
但问题是:我必须在 Flow 的开头检查 Valid / Invalid URL,而不是在结尾。我还必须在最后路由它们(根据 URL 所示).. !!
我也可以在开始时使用 choice 组件,但是那将是多余的..!!
有什么好的选择吗??
【问题讨论】:
【参考方案1】: 在入站 HTTP 端点之后使用 message-properties-transformer 添加新的调用范围属性。 在此转换器中,使用 Groovy 表达式根据入站属性“http.request.path”为该属性赋予值“json”、“xml”或“error”。 然后在您选择的路由器中,将您的路由基于此调用属性。【讨论】:
我想你之前也发布了这个答案..但正如我告诉你的那样,它不起作用.. :-O ..我不知道你,但它在我的情况下不起作用..! ! ..任何其他建议..?? 我发布了一些类似的东西,因为它是一种常见的模式。所以没有其他建议:我很确定这会起作用,除非问题中缺少一些重要信息。 好的..我会再试一次..thanx..!!..会让你知道这是否有效..!!【参考方案2】:我不明白为什么开始帖子中提出的解决方案不起作用?
如果你只是改变你的选择:
<when evaluator="header" expression="INBOUND:http.request.path=/jcore/meta">
到
<when evaluator="header" expression="INBOUND:http.request.path == /jcore/meta">
那么这些应该评估为真或假。
或者我在这里遗漏了什么?
【讨论】:
即使第一个表达式也在工作..!!..但是我必须在一个流程中做两次:一个用于检查有效 URL,然后在流程结束时将其路由到适当的 VM ...如果我有 20 个流,那么我的配置文件将太长(带有冗余代码)。所以我要求一个更好的解决方案..!!以上是关于如何在 MULE 中的 Flow 结束时检查有效的 URL 并将其路由到 VM ..?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 HTTP 请求中发送文件并通过 Mule 中的 FTP 将其上传到文件服务器
EnjoyingSoft之Mule ESB基础系列第二篇:Mule ESB基本概念
带有 Active-MQ 的 Mule 发布/订阅模型。如何在 Active-MQ JMS 中的消息到达时以异步方式调用 tomcat-consumers