Solon v3.1.0

流引擎的两种使用模式

</> markdown

1、Solon 集成模式

在 solon 容器环境,会有一个 FlowEngine 单例,且会自动加载 solon.flow 配置的链资源。

  • 配置示例
solon.flow:
  - "classpath:folw/*" #内部资源
  - "file:folw/*" #外部文件
  • 代码应用
@Component
public class DemoCom implements LifecycleBean{
    @Inject 
    private FlowEngine flowEngine;
    
    @Override
    public void start() throws Throwable {
        //执行配置加载后 id=c1 的链
        flowEngine.eval("c1"); 
    }
}

2、非集成模式

就是自己构建引擎实例,自己加载链配置。

@Component
public class DemoCom implements LifecycleBean{
    @Override
    public void start() throws Throwable {
        FlowEngine flowEngine = FlowEngine.newInstance();
        
        //加载链
        flowEngine.load(Chain.parseByUri("classpath:flow/c1.chain.json"));
        
        //执行加载后 id=c1 的链
        flowEngine.eval("c1"); 
    }
}

3、流引擎接口参考

public interface FlowEngine {
    /**
     * 新实例
     */
    static FlowEngine newInstance() {
        return new FlowEngineImpl();
    }


    /**
     * 注册链驱动器
     *
     * @param name   名字
     * @param driver 驱动器
     */
    void register(String name, ChainDriver driver);

    /**
     * 注册默认链驱动器
     *
     * @param driver 默认驱动器
     */
    default void register(ChainDriver driver) {
        register("", driver);
    }

    /**
     * 注销链驱动器
     */
    void unregister(String name);

    /**
     * 加载链
     *
     * @param chain 链
     */
    void load(Chain chain);


    /**
     * 卸载链
     *
     * @param chainId 链Id
     */
    void unload(String chainId);

    /**
     * 评估
     *
     * @param chainId 链Id
     */
    default void eval(String chainId) throws Throwable {
        eval(chainId, new ChainContext());
    }

    /**
     * 评估
     *
     * @param chainId 链Id
     * @param context 上下文
     */
    default void eval(String chainId, ChainContext context) throws Throwable {
        eval(chainId, null, -1, context);
    }

    /**
     * 评估
     *
     * @param chainId 链Id
     * @param startId 开始Id
     * @param depth   执行深度
     * @param context 上下文
     */
    void eval(String chainId, String startId, int depth, ChainContext context) throws Throwable;

    /**
     * 评估
     *
     * @param chain 链
     */
    default void eval(Chain chain) throws Throwable {
        eval(chain, new ChainContext());
    }

    /**
     * 评估
     *
     * @param chain   链
     * @param context 上下文
     */
    default void eval(Chain chain, ChainContext context) throws Throwable {
        eval(chain, null, -1, context);
    }

    /**
     * 评估
     *
     * @param chain   链
     * @param startId 开始Id
     * @param depth   执行深度
     * @param context 上下文
     */
    void eval(Chain chain, String startId, int depth, ChainContext context) throws Throwable;
}