如何在 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="&quot;Exception&quot;: &quot;Could not Render the Request. URL may be wrong&quot;"/>
                </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】:

我不明白为什么开始帖子中提出的解决方案不起作用?

如果你只是改变你的选择:

&lt;when evaluator="header" expression="INBOUND:http.request.path=/jcore/meta"&gt;

&lt;when evaluator="header" expression="INBOUND:http.request.path == /jcore/meta"&gt;

那么这些应该评估为真或假。

或者我在这里遗漏了什么?

【讨论】:

即使第一个表达式也在工作..!!..但是我必须在一个流程中做两次:一个用于检查有效 URL,然后在流程结束时将其路由到适当的 VM ...如果我有 20 个流,那么我的配置文件将太长(带有冗余代码)。所以我要求一个更好的解决方案..!!

以上是关于如何在 MULE 中的 Flow 结束时检查有效的 URL 并将其路由到 VM ..?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HTTP 请求中发送文件并通过 Mule 中的 FTP 将其上传到文件服务器

如何忽略 DataWeave Mule esb 中的空对象

EnjoyingSoft之Mule ESB基础系列第二篇:Mule ESB基本概念

带有 Active-MQ 的 Mule 发布/订阅模型。如何在 Active-MQ JMS 中的消息到达时以异步方式调用 tomcat-consumers

将 JSON 格式的文件发送到 Mule 3.8 中的 REST 服务

Mule ESB:无法使用流有效负载复制消息