Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mule ESB:如何在Mule ESB中实现典型的重试机制_Mule_Mule Studio_Mule El_Mule Component - Fatal编程技术网

Mule ESB:如何在Mule ESB中实现典型的重试机制

Mule ESB:如何在Mule ESB中实现典型的重试机制,mule,mule-studio,mule-el,mule-component,Mule,Mule Studio,Mule El,Mule Component,我需要在重试时实现一个逻辑。入站端点将消息推送到Rest(出站)。如果其余部分不可用,我需要重试1次并将其放入队列。但是第二个即将到来的消息不应该进行任何重试,它必须直接将消息放入队列,直到REST服务可用 一旦服务可用,我需要通过批处理作业将所有消息从队列推送到REST服务(按顺序) 问题: 我如何知道第二封邮件的服务不可用?若我使用直到成功,对于每个消息,它都会重试并放入队列。Plm是第二条消息,不应重试 对于批处理,我考虑使用poll,但如何告诉poll,何时服务可以开始批处理过程。(bc

我需要在重试时实现一个逻辑。入站端点将消息推送到Rest(出站)。如果其余部分不可用,我需要重试1次并将其放入队列。但是第二个即将到来的消息不应该进行任何重试,它必须直接将消息放入队列,直到REST服务可用

一旦服务可用,我需要通过批处理作业将所有消息从队列推送到REST服务(按顺序)

问题:

  • 我如何知道第二封邮件的服务不可用?若我使用直到成功,对于每个消息,它都会重试并放入队列。Plm是第二条消息,不应重试

  • 对于批处理,我考虑使用poll,但如何告诉poll,何时服务可以开始批处理过程。(bcz,轮询更多的是配置运行批处理的计时)

  • 另一个让我困惑的问题是——这里的秩序必须得到保留。一旦服务可用。队列消息(即批处理消息)必须首先移动到REST服务,然后实时移动。我怀疑它是否适用

    这将有助于实现逻辑的快速响应


  • 使用Mule:3.5.1

    作为超时,我仍然会查看响应代码并捕获超时,以确定调用是否成功或是否需要重试。实际上,您通常都会执行多线程,因此您会有多个并行调用。或者只是一个电话在另一个电话结束之前开始。 这很正常

    但您只需在超时的队列中重试调用即可。在x次超时后,您可以“跳过”或推迟重试

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

    • 梅尔
    • 或流量控制:
    • 或者,例如,您引用一个Springbean并在本机Java代码中执行它

    队列的一种可能性是将其持久化到数据库中。Mule的数据库连接器具有“轮询”功能,请参阅:

    我可以尝试以下方法:使用流控制

  • 处理消息;如果出现异常或错误响应代码,请设置变量/属性,如serviceAvailable=false
  • 后续消息处理将首先检查可用于处理消息的属性serviceAvailable。如果属性为false,则将消息排队到状态为new/unprocessed的DB表中
  • 创建流/调度程序以按顺序处理来自DB的消息,但它不会检查属性serviceAvailable并调用rest服务。 如果服务引发异常,它将不会再次将消息存储在数据库中,但如果进程成功更改属性serviceAvailable=true并取消消息队列或更改状态。添加另一个属性,如果db表中有更多消息,如moreDBMsg=true,则将其设置为true。 在morebmsg=false之前,不应处理/使用新消息 再次,dbmsg=false和serviceavable=true开始处理来自队列的消息
    谢谢你的回复。这是一种帮助!谢谢你的光:)。这对我很有帮助。我正试着按照上面提到的方法来做。这里我有一个疑问,如果我在属性或会话变量中设置属性ServiceAvailable=false。第二个新事务是否能够看到我在mule流中为第一个事务设置的变量(bcz我认为所有属性都被擦除,并且对于即将到来的事务,属性应该是新的)。如果是这种情况,如何将属性设置为对所有即将到来的事务全局可见?请建议。提前谢谢