【问题标题】:Using an expression in a JMS Selector in Mule 3在 Mule 3 的 JMS 选择器中使用表达式
【发布时间】:2023-03-16 05:28:01
【问题描述】:

我要排队:

<jms:inbound-endpoint connector-ref="jmsConnector" queue="queue.dev" >
<jms:selector expression="JMSCorrelationID='353'"/>
</jms:inbound-endpoint>

它有效,但我想在选择器中使用表达式:

<jms:inbound-endpoint connector-ref="jmsConnector" queue="queue.dev" >
<jms:selector expression="JMSCorrelationID='#[header:OUTBOUND:codeReport]'"/>
</jms:inbound-endpoint>

没有用。

【问题讨论】:

    标签: activemq mule


    【解决方案1】:

    这没有意义:您试图在入站端点中使用出站属性。这行不通。

    codeReport 的值应该来自哪里?如果是属性文件,则使用${codeReport}

    编辑:事实证明,基于 OP 的 cmets,解决方案是在 JMS 队列上使用请求者,而不是入站端点。以下代码演示了在队列为空之前请求消息并在java.util.List 中返回它们:

    <scripting:component>
        <scripting:script engine="groovy"><![CDATA[
            def jmsMessages = []
    
            for (def muleMessage = muleContext.client.request("jms://out.queue.dev?selector=JMSCorrelationID%3D'"+ message.getInboundProperty('codeReport') +"'", -1L);
                 muleMessage != null;) {
              [] << muleMessage.payload
            }
    
            jmsMessages
        ]]></scripting:script>
    </scripting:component>
    

    【讨论】:

    • 变量 codeReport 是来自 rest 的参数(是一个动态变量)。它不能是财产。 jms:selector 是入站端点的属性。 http://www.mulesoft.org/documentation/display/current/JMS+Transport+Reference#JMSTransportReference-ExampleConfigurations.
    • 流程有一个http:inbound-endpoint,并使用client.send("http://localhost:8177/customerUpdate?codeReport=351", "", prop);从我的测试中运行它
    • Mmmh 好的,但我希望您编辑您的问题并显示带有 HTTP 和 JMS 端点的完整流程。完全不清楚的是,您想对来自 JMS 入站端点的消息做什么?
    • 我想放入我的组件并执行业务逻辑。
    • 总而言之:HTTP 请求将提供codeReport 并且还将启动一个JMS 侦听器。之后,JMS 队列上接收到的所有与选择器匹配的消息都将由组件处理。如果第二个 HTTP 请求进来会发生什么?你想开始另一个听众吗?即使codeReport是一样的?
    猜你喜欢
    • 2016-01-11
    • 1970-01-01
    • 2013-08-30
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多