Mule ESB:如何在MULE ESB中实现典型的ReTry机制

时间:2014-09-08 02:57:33

标签: mule mule-studio mule-el mule-component

我需要在Retry上实现逻辑。入站端点将邮件推送到Rest(Outbound)。如果REST不可用,我需要重试一次并将其放入队列中。但是第二个即将发布的消息不应该重试,它必须直接将消息放入队列,直到REST服务可用。

一旦服务可用,我需要通过批处理作业将所有消息从QUEUE推送到REST服务(在订购中)。

问题:

  1. 我如何知道第二条消息的服务不可用?如果我使用直到成功,它会为每条消息重试并放入队列。 Plm是第二条消息不应该重试。

  2. 对于批处理,我想到了使用poll,但是如何告诉poll,何时服务可用于开始批处理。 (bcz,Poll更多的是配置时序来运行批处理)?

  3. 其他让我困惑的是 - 这里必须保留订购。一旦服务可用。队列消息(i,e Batch)必须先实时移动到REST服务。我怀疑它是否适用。

    实施逻辑的快速响应非常有用。

  4. 使用Mule:3.5.1

2 个答案:

答案 0 :(得分:1)

我可以尝试以下内容:使用流量控制

  1. 处理消息;如果异常或错误的响应代码,请设置一个变量/属性,如serviceAvailable = false。
  2. 后续消息处理将首先检查属性serviceAvailable以处理消息。如果property为false,则将消息排入队列,状态为= new / unprocessed
  3. 创建一个流/调度程序来按顺序处理来自DB的消息,但它不会检查属性serviceAvailable并调用其余服务。 如果service抛出异常,它将不会再次将消息存储在db中,但如果进程成功更改属性serviceAvailable = true并将消息解除队列或更改状态。如果db表中有更多消息,例如moreDBMsg = true,则添加另一个属性并将其设置为true。 在moreDBMsg = false之前,不应处理/使用新消息 再次更多DBMsg = false且serviceAvailable = true开始处理队列中的消息。

答案 1 :(得分:0)

对于超时,我仍然会查看响应代码并捕获超时以确定呼叫是成功还是需要重试。实际上你通常会做多线程,所以无论如何你都有多个并行调用。或者只是一个呼叫在另一个结束之前开始。 这很正常。

但你可以简单地在超时的队列中重试调用。经过x次超时后,您可以跳过"跳过"或推迟重试。

但所有这些都是使用实际的Mule流程组件完成的,如:

队列的一种可能性是将其持久保存在数据库中。 Mule有数据库连接器,有"民意调查"功能,请参阅:http://www.mulesoft.org/documentation/display/current/JDBC+Transport+Reference#JDBCTransportReference-PollingTransport