Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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
Java 使用Amazon SWF限制下游服务上的TPS_Java_Spring_Amazon Swf - Fatal编程技术网

Java 使用Amazon SWF限制下游服务上的TPS

Java 使用Amazon SWF限制下游服务上的TPS,java,spring,amazon-swf,Java,Spring,Amazon Swf,我正在使用AmazonSWF编写一个工作流,我想知道如何控制下游服务上的TPS 我有一个父工作流,它启动了几个并行运行的子工作流 My child工作流调用多个下游服务(每个服务位于不同的活动中),例如 如果成功继续,如果失败退出,则调用下游服务1 如果成功继续,如果失败退出,则调用下游服务2 等 我希望能够单独管理下游服务上的TPS 我如何限制下游服务的TPS?例如,理想情况下,我希望下游服务1的最大TPS为100。在非并发上下文中,我可以使用番石榴速率限制器之类的东西,但是这将在多个主机上运

我正在使用AmazonSWF编写一个工作流,我想知道如何控制下游服务上的TPS

我有一个父工作流,它启动了几个并行运行的子工作流

My child工作流调用多个下游服务(每个服务位于不同的活动中),例如

  • 如果成功继续,如果失败退出,则调用下游服务1
  • 如果成功继续,如果失败退出,则调用下游服务2
  • 我希望能够单独管理下游服务上的TPS

    我如何限制下游服务的TPS?例如,理想情况下,我希望下游服务1的最大TPS为100。在非并发上下文中,我可以使用番石榴速率限制器之类的东西,但是这将在多个主机上运行。我可以指定一次只运行100个给定活动的实例吗?我在flow框架中找不到相应的注释(我正在使用flow框架和Spring)。如果需要,我很乐意将子工作流分解为单独的工作流,并让父工作流逐个调用每个子工作流,例如

    子工作流:

    1. take entity id as input
    2. call dependent service 1 workflow
    3. return
    
    然后,如果上述操作成功完成,则父工作流将调用调用从属服务2的下一个子工作流,或者如果失败,则父工作流将退出

    是否可以对给定依赖服务工作流或给定活动的实例数设置并发限制?这是任务列表的良好/潜在用途吗?我可以通过工作主机的数量控制TPS吗


    谢谢你的建议

    我认为SWF本身不支持活动执行的速率限制,也不支持任务列表的最大任务交付速率

    另一种选择是在工人层面实施利率限制。已通过支持速率限制。如果一个工人可以维持呼叫率,那么选择这个工人作为主工人,并暂停所有其他工人通过解决问题。如果需要一个以上的工人,则多个主设备同时处于活动状态,每个主设备的费率仅限于总费率的一部分

    可以使用单独的SWF工作流选择工人作为主工作人员。主选举工作流的基本思想是有一个GetLock活动。执行它的主机被视为主机。这个活动应该有小的(比如说20秒)心跳超时和大的总超时。因此,拥有它的主机必须至少每20秒心跳一次才能保持锁。如果由于某种原因无法检测到心跳,工作流将获取故障并重新安排活动,以便其他主机捕获