首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache中的状态函数容错消息分发

Apache中的状态函数容错消息分发
EN

Stack Overflow用户
提问于 2020-04-30 10:42:11
回答 1查看 165关注 0票数 2

我正在尝试使用apache有状态函数来实现消息传递场景。

通过设计,我需要从传入消息中计算出一些统计数据,并将它们存储在状态中。之后,函数将访问这些状态和消息,并在它们上运行业务规则。但是我们每条消息可能有几十个场景,每个场景都应该运行一次。

代码大致如下所示

代码语言:javascript
复制
@Override
    public void configure(MatchBinder binder) {
        binder
            .predicate(Transaction.class,this::updateTransactionStatAndSendToScenatioManager)
}

    private void updateTransactionStatAndSendToScenatioManager(Context context, Transaction transaction){
        // state update
        context.send(FnScenarioManager.TYPE,  String.valueOf(transaction.id()) , transaction);
    }

FnScenarioManager:

代码语言:javascript
复制
@Override
    public void configure(MatchBinder binder) {
    binder
        .predicate(Transaction.class,this::runTransactionScenarios);
}


private void runTransactionScenarios(Context context, Transaction transaction){
   context.send(Scenario1.TYPE,String.valueOf(transaction.id()),transaction);
   context.send(Scenario2.TYPE,String.valueOf(transaction.id()),transaction);
   context.send(Scenario3.TYPE,String.valueOf(transaction.id()),transaction);
   ...
   context.send(ScenarioN.TYPE,String.valueOf(transaction.id()),transaction);
}

我的问题是,如果集群在runTransactionScenarios中间崩溃,会发生什么?

  • 每个场景都会运行一次吗?如果不是,我如何确保这一点?
EN

回答 1

Stack Overflow用户

发布于 2020-04-30 13:27:22

有状态函数(一般是Apache )只支持一次状态语义。这意味着,在失败的情况下,运行时将始终如一地回滚状态和消息,从而模拟完全无故障的执行。

这意味着消息可能被重播,但内部状态将回滚到消息接收之前的时间点。只要您的业务规则只修改州立状态,并通过出口与外部世界交互,您就可以将系统视为只有一次属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61521554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档