【问题标题】:Mule transactions - reliability patterns - Mule in Action 2Mule 交易 - 可靠性模式 - Mule in Action 2
【发布时间】:2016-03-19 19:30:36
【问题描述】:

我正在阅读 Mule in Action(非常好)并尝试列出 7.5 关于事务可靠性模式的清单,但它并没有像我预期的那样工作。 流程不会等待消息被放入队列并立即返回 http 消息。我错过了什么吗?这不应该被包装在异步块中吗?

<flow name="orderSubmission">
    <http:inbound-endpoint exchange-pattern="request-response"
          host="localhost" port="8081"
          path="order"/>
    <cxf:jaxws-service
         serviceClass="com.prancingdonkey.service.OrderSubmissionService"/>
    <component
        class="com.prancingdonkey.service.OrderSubmissionServiceImpl"/>
    <async>
        <jms:outbound-endpoint queue="order.submit">
            <jms:transaction action="ALWAYS_BEGIN"/>
        </jms:outbound-endpoint>
    </async>
</flow>

【问题讨论】:

    标签: mule


    【解决方案1】:

    您发布的配置类似于 Mule in Action(第 2 版)的清单 7.4。我同意,这是一本很棒的书。

    据我了解,这里发生的是异步范围创建消息的副本并继续处理。由于您在点击异步块时到达“行尾”,因此当消息在 JMS 出站端点中排队(尚未排队)时,您的流程将进入响应阶段。

    这里的想法是,您可以在继续进行可能很长的内部处理之前发送 HTTP 响应消息,从而使客户端在等待处理完成时可以执行更多工作。这本书提到了 Gregor Hohpe 的星巴克类比,这对我来说很好地解释了这一点。也许你可以再看一遍。

    您对流程如何描述其预期行为的观察,尽管未达到您的预期。如果您正在寻找一种纯粹的同步行为,即我们等待消息成功放入 JMS 队列,那么您应该删除异步范围。

    【讨论】:

    • 是的 7.4。原因是因为前面的文字说:“如果在队列中提交消息的 JMS 事务成功,则将包含订单 ID 的响应返回给移动设备。”这意味着如果排队失败,则不应发回任何 id。此外,这也不完全可靠,因为您无法保证消息已被放入队列。异步部分应该发生在从队列中提取的后端处理中。
    • 我相信你是对的。如果我们查看图 7.5,我们会看到 JMS 出站端点周围没有异步块。
    猜你喜欢
    • 2014-07-03
    • 2015-08-05
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    相关资源
    最近更新 更多