【问题标题】:Is there any bug in showing "Number Of Pending Messages" in ACTIVE MQ?在 ACTIVEMQ 中显示“待处理消息的数量”是否有任何错误?
【发布时间】:2014-03-04 12:18:11
【问题描述】:

我们正在使用带有 Mule ESB JMS 的活动 mq 来提供我们的 Web 服务。它工作正常。但问题是,即使请求从队列转发到我的服务,处理并返回响应,但仍然在 Active MQ Web 控制台中,待处理消息数显示请求总数。 网页控制台 ::

流程图,

Mule 中的流程是 ::

<jms:activemq-connector name="Active_MQ" brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ"/>
    <flow name="vbrtestmulejmsFlow1" doc:name="vbrtestmulejmsFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8888" doc:name="HTTP" path="AMServices">
         <set-property propertyName="Content-Type" value="text/xml"/>
        </http:inbound-endpoint>
        <object-to-string-transformer doc:name="Object to String" mimeType="text/xml"/>
        <jms:outbound-endpoint queue="servicesQueue" connector-ref="Active_MQ" doc:name="JMS" responseTimeout="1000000" mimeType="text/xml" >
        </jms:outbound-endpoint>

        <http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="5050" path="MyServices" method="POST" doc:name="HTTP" contentType="text/xml">
          <set-property propertyName="Content-Type" value="text/xml"/>
        </http:outbound-endpoint>
    </flow>

【问题讨论】:

  • 不确定我是否理解,您的流程只是将消息放入队列中,而您永远不会将它们删除。那么他们留在队列中不是正确的吗?
  • 不,它应该转发到位于 localhost:5050/MyServices 的 MyServices。但是现在请求被转发到 Myservices 并将响应返回给我的 SOAPUI。但它仍然显示在待处理的消息中
  • 调试这个是完全不可能的,因为您没有共享任何有关您的 JMS 使用者的信息。如果您将 JMS 使用者替换为 Mule JMS 入站端点,您是否会遇到同样的问题?

标签: java web-services activemq mule esb


【解决方案1】:

您的流程将入站 HTTP 端点接收到的消息发送到JMS 出站端点和 HTTP 出站端点。

所以预计servicesQueue 将包含6 条消息,同时MyServices 被调用6 次。

您的意图尚不清楚,但如果您想要让servicesQueue 充当入站和出站 HTTP 端点之间的中介,那么您需要将流程分成两部分:

<flow name="AMServiceToQueue">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost"
          port="8888" path="AMServices">
     <set-property propertyName="Content-Type" value="text/xml"/>
    </http:inbound-endpoint>
    <object-to-string-transformer mimeType="text/xml"/>

    <jms:outbound-endpoint queue="servicesQueue" connector-ref="Active_MQ"
         exchange-pattern="request-response" responseTimeout="1000000" />
</flow>

<flow name="QueueToMyServices">
    <jms:inbound-endpoint queue="servicesQueue" connector-ref="Active_MQ"
         exchange-pattern="request-response" />

    <http:outbound-endpoint exchange-pattern="request-response" host="localhost"
          port="5050" path="MyServices" method="POST" contentType="text/xml">
      <set-property propertyName="Content-Type" value="text/xml"/>
    </http:outbound-endpoint>
</flow>

【讨论】:

  • 这是解决我所有问题的单一解决方案。非常感谢@David Dossot。 :)
猜你喜欢
  • 2013-01-14
  • 2019-06-02
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 2014-09-24
  • 2016-11-20
  • 1970-01-01
相关资源
最近更新 更多