流引擎的两种使用模式
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;
}