我们可以在mule中代理流的中间使用JMS

时间:2014-01-30 07:58:59

标签: jms jax-ws activemq mule esb

实际上我们已经生成了JAX-WS Web服务,并且它运行良好。但现在我们想要使用Mule ESB的JMS。但是我无法配置它。

我已经尝试过Mule的代理服务器,它运行良好。但我们正试图将JMS置于HTTP端点之间。但肥皂的身体不能转移到另一端(即我们的服务) JMS服务器是ActiveMQ。

提前致谢,

从评论中复制流程 -

<flow name="finalFlow1" doc:name="finalFlow1">
    <http:inbound-endpoint exchange-pattern="request-response"
        host="localhost" port="8888" contentType="text/xml" doc:name="HTTP" />
    <jms:outbound-endpoint exchange-pattern="request-response"
        queue="servicesQueue" doc:name="JMS" connector-ref="Active_MQ" />
    <http:outbound-endpoint exchange-pattern="request-response" 
        method="POST" address="localhost:5050/MyServices" ; mimeType="text/xml"
        contentType="text/xml" doc:name="HTTP" />
</flow>

2 个答案:

答案 0 :(得分:1)

在您发布的流程中,您正在通过基于HTTP的入站端点使用该消息。如果您只想从JMS使用此消息并将其发送到另一个HTTP端点,则需要使用JMS入站

<flow name="finalFlow1" doc:name="finalFlow1">
    <jms:inbound-endpoint exchange-pattern="request-response"
        queue="servicesQueue" doc:name="JMS" />
    <logger level="INFO" doc:name="Logger" />
    <http:outbound-endpoint exchange-pattern="request-response"
        host="localhost" port="5050" method="POST" doc:name="HTTP" path="MyServices"
        mimeType="text/xml" />
</flow>

但是,这只会按原样发送有效负载,而不会将其转换为SOAP有效负载。如果要将从JMS消耗的消息转换为SOAP有效负载,则需要使用CXF

<flow name="finalFlow1" doc:name="finalFlow1">
    <jms:inbound-endpoint exchange-pattern="request-response"
        queue="servicesQueue" doc:name="JMS" />
    <logger level="INFO" doc:name="Logger" message="#[payload]" />

    <logger message="SOAP call started" level="INFO" doc:name="Logger"/>

    <http:outbound-endpoint 
        mimeType="text/xml" doc:name="HTTP" exchange-pattern="request-response" method="POST" path="MyServices" host="localhost" port="5050">
        <cxf:proxy-client payload="body"
            enableMuleSoapHeaders="false">
            <cxf:inInterceptors>
                <spring:bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
            </cxf:inInterceptors>
            <cxf:outInterceptors>
                <spring:bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
            </cxf:outInterceptors>
        </cxf:proxy-client>
    </http:outbound-endpoint>

    <logger message="SOAP call completed" level="INFO" doc:name="Logger"/>

</flow>

如果您只是想通过HTTP启动JMS消费,您可以使用Seba建议使用MuleRequester - https://github.com/mulesoft/mule-module-requester/blob/master/mulerequesterdemo/src/main/app/MuleRequesterDemo.xml

答案 1 :(得分:1)

如果您需要在流中间使用队列中的消息,您应该看一下:http://blogs.mulesoft.org/introducing-the-mule-requester-module