Mule JMS主题和ActiveMQ配置

时间:2015-09-16 19:06:11

标签: mule activemq jms-topic

我正在使用Mule ESB来设计一个可以将消息发布到主题的过程。订阅者将收听该主题并接收消息。每个订阅者将对消息采取不同的行动。这里的目标是能够从HTTP向主题发布测试消息以测试订阅者。

以下是我如何配置JMS连接:

 <!-- JMS Topic connector -->
<jms:activemq-connector name="jmsTopicConnection" specification="1.1" brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ2" durable="true" numberOfConcurrentTransactedReceivers="2"/>

这是流程:

<flow name="auditJMSServiceFlow">
<http:listener config-ref="HTTP" path="/Audit/Activity" responseStreamingMode="ALWAYS" doc:name="HTTP"/>
<set-variable variableName="#['id']" value="#[message.inboundProperties['id']]" doc:name="set dynamic id"/>
<set-payload value="===TOPIC===" doc:name="Set Payload" />

 <request-reply storePrefix="mainFlow">
<jms:inbound-endpoint topic="Audit.Activity" connector-ref="jmsTopicConnection" doc:name="JMS Topic Audit.Activity" exchange-pattern="request-response" durableName="audit_activity">
    <jms:transaction action="ALWAYS_BEGIN" />
    <!-- Not required to explicitly have this element.  Mule will put this in implicitly. -->
    <!-- <jms:jmsmessage-to-object-transformer displayName="JmsMsg to Object"/> -->
</jms:inbound-endpoint>
</request-reply>

<json:object-to-json-transformer doc:name="transform JMS message to JSON"/>
<json:validate-schema schemaLocation="resource://AuditMsgSchema.json" doc:name="Validate Json Schema"/>
<component class="com.baml.panther.audit.service.impl.AuditServiceImpl" doc:name="Java"/>


<default-exception-strategy>
    <commit-transaction exception-pattern="com.foo.ExpectedExceptionType"/> 
    <jms:outbound-endpoint queue="dead.letter" connector-ref="jmsConnection"> 
        <jms:transaction action="JOIN_IF_POSSIBLE" />
    </jms:outbound-endpoint>
</default-exception-strategy>

<logger message="=== #[message.payload] received #[org.mule.util.DateUtiles.getTimeStamp('dd-MM-yyyy_HH-mm-ss.SSS')]" level="INFO" doc:name="Logger"/>

当我完成测试时,我收到以下错误:

enter image description here

任何建议都将不胜感激。

拉​​斯

2 个答案:

答案 0 :(得分:0)

问题是您不能将消息源作为请求 - 回复中的第一个消息处理器。请求回复允许您对JMS等异步协议进行一种同步调用。 如果要在放置请求 - 回复的位置向消息代理发送消息,只需放置一个JMS出站端点。 如果您要执行的操作是使用来自JMS主题的消息,则必须将JMS入站端点作为流中的第一个消息处理器。

答案 1 :(得分:0)

对于错误:您的@private范围缺少出站端点。您只有入站端点(jms:inbound-endpoint)。您还需要提供出站端点。

request-reply

不确定你的目标是什么,但如果只放置<request-reply storePrefix="mainFlow"> <jms:inbound-endpoint topic="Audit.Activity" connector-ref="jmsTopicConnection" doc:name="JMS Topic Audit.Activity" exchange-pattern="request-response" durableName="audit_activity"> <jms:transaction action="ALWAYS_BEGIN" /> <!-- Not required to explicitly have this element. Mule will put this in implicitly. --> <!-- <jms:jmsmessage-to-object-transformer displayName="JmsMsg to Object"/> --> </jms:inbound-endpoint> </request-reply> (而不是整个请求 - 回复块),则可以向JMS主题发送消息。