Jms 如何在Mule中设置ActiveMQ消息头?

Jms 如何在Mule中设置ActiveMQ消息头?,jms,activemq,mule,Jms,Activemq,Mule,我正在使用MuleStudio 3.5.0并尝试创建一个向ActiveMQ队列发送消息的流。该队列由一个旧的现有服务(用.Net编写)使用,我想将其集成到我的工作流中。该服务要求将消息的头类型设置为“DoStuff”。我怎样才能做到这一点 我尝试了以下流程。请注意,出于测试目的,我通过DoStuff类手动设置ActiveMQ消息的有效负载,HTTP连接器仅用于触发工作流: <jms:activemq-connector name="Active_MQ" brokerURL="tcp://l

我正在使用MuleStudio 3.5.0并尝试创建一个向ActiveMQ队列发送消息的流。该队列由一个旧的现有服务(用.Net编写)使用,我想将其集成到我的工作流中。该服务要求将消息的
类型设置为“DoStuff”。我怎样才能做到这一点

我尝试了以下流程。请注意,出于测试目的,我通过
DoStuff
类手动设置ActiveMQ消息的有效负载,HTTP连接器仅用于触发工作流:

<jms:activemq-connector name="Active_MQ" brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ"/>
<spring:beans>
    <spring:bean id="DoStuffBean" name="DoStuffBean" class="foo.DoStuff"/>
</spring:beans>
<flow name="Flow1" doc:name="Flow1">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8199" path="activemq" doc:name="HTTP"/>
    <component doc:name="Java" class="com.kws.mule.DoStuff"/>
    <json:object-to-json-transformer doc:name="Object to JSON"/>
    <jms:outbound-endpoint queue="MyServiceQueue" connector-ref="Active_MQ" doc:name="JMS">
        <jms:object-to-jmsmessage-transformer name="ObjectToJmsMessage" />
        <message-properties-transformer>
            <add-message-property key="Type" value="DoStuff" />
        </message-properties-transformer>
    </jms:outbound-endpoint>
</flow>

MEL
中,您可以

<set-property propertyName="Type" value="Set your value here"/>

这将在
Mule消息上设置一个出站属性,该属性将被
JMS队列
接收为入站属性

此流应工作:

<flow name="Flow1" doc:name="Flow1">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8199" path="activemq" doc:name="HTTP"/>
    <component doc:name="Java" class="com.kws.mule.DoStuff"/>
    <json:object-to-json-transformer doc:name="Object to JSON"/>
    <jms:outbound-endpoint queue="MyServiceQueue" connector-ref="Active_MQ" doc:name="JMS">
        <jms:object-to-jmsmessage-transformer name="ObjectToJmsMessage" />
        <expression-transformer returnSourceIfNull="true"
            doc:name="Expression"
            expression="#[payload.setJMSType(&quot;DoStuff&quot;); return payload]" />
    </jms:outbound-endpoint>
</flow>


谢谢您的回答!不幸的是,这设置了消息的属性
Type
,但没有设置我想要的标题。我猜我的答案不够清楚,所以我更新了一点。当你试图检索这个属性时,你会得到什么。尝试使用
入站端点
创建另一个流作为此活动MQ,并在那里检索此属性。如果我使用Mule构建一个新的消费
入站端点
,那么我将获得该属性。但是,已经存在的使用ActiveMQ队列的服务不是使用Mule构建的,而是一个旧的.Net应用程序,它希望填充类型头。不幸的是,我无法访问ActiveMQ消费源代码,因为这部分是专有的,因此我想设置JMS消息的头。
是设置头的最佳方法。您应该尝试查看.Net应用程序的类型。可能是它得到了正确的类型。它无法解析消息,因为.Net应用程序不知道存在这样的自定义属性,它仍然需要标头:(如果我通过ActiveMQ broker管理器控制台发送自定义消息并设置类型标头,则.Net应用程序将改为工作。
<flow name="Flow1" doc:name="Flow1">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8199" path="activemq" doc:name="HTTP"/>
    <component doc:name="Java" class="com.kws.mule.DoStuff"/>
    <json:object-to-json-transformer doc:name="Object to JSON"/>
    <jms:outbound-endpoint queue="MyServiceQueue" connector-ref="Active_MQ" doc:name="JMS">
        <jms:object-to-jmsmessage-transformer name="ObjectToJmsMessage" />
        <expression-transformer returnSourceIfNull="true"
            doc:name="Expression"
            expression="#[payload.setJMSType(&quot;DoStuff&quot;); return payload]" />
    </jms:outbound-endpoint>
</flow>