🗄快速开始(Etcd)
版本支持:v2.16.1+
# Step 1:引入依赖
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-spring-boot-starter</artifactId>
<version>2.16.1</version>
</dependency>
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-rule-db-etcd</artifactId>
<version>2.16.1</version>
</dependency>
# Step 2:写配置
这里要定两件事:插件用哪个客户端连etcd,以及规则记在哪个隔离名下。两者没有关联。
先说连接。项目里已经有io.etcd.jetcd.Client的话,复用它:
liteflow.rule-db.etcd.client-bean-name=etcdClient
和zk一样,etcd后端只按bean名查找,不做按类型的自动查找,想复用就必须显式写上这一行。配了它之后,下面所有的连接、认证、TLS配置都不再生效;bean不存在则启动报错。
不复用的话,配上endpoints让插件自己建,其余用默认值即可:
liteflow.rule-db.etcd.endpoints=https://127.0.0.1:2379
# 多个endpoint逗号分隔,必须带scheme,且不允许混用http/https
# root-path默认/liteflow,超时与keepalive参数通常不用改
liteflow.rule-db.etcd.user=your-user
liteflow.rule-db.etcd.password=your-password
生产环境请用https://并配上鉴权,user和password要成对配置。TLS的细节见下面一节。
再说隔离名。liteflow.rule-db.application-name和root-path一起构成规则key的前缀,不同取值互相看不到。它只管隔离,和用哪个客户端无关。
Spring Boot下它留空时会取spring.application.name:
spring.application.name=your-app
两个都没配会回落成default,多个应用共用一套etcd时请确保取值不同。Solon插件没有这个回落,需要显式配liteflow.rule-db.application-name。这个值还要和Step 3里Publisher的applicationName(...)一致。
# Step 3:发布第一条规则
规则的增删改都走Publisher API,不用手工写key,也不用自己拼编码。meta和content在一个Txn里原子写入。
import com.yomahub.liteflow.publisher.PublishChainRequest;
import com.yomahub.liteflow.publisher.RulePublisher;
import com.yomahub.liteflow.publisher.RulePublisherFactory;
import com.yomahub.liteflow.repository.etcd.EtcdPublisherConfig;
try (RulePublisher publisher = RulePublisherFactory.create(
EtcdPublisherConfig.builder()
.endpoints("http://127.0.0.1:2379")
.rootPath("/liteflow")
.applicationName("your-app")
.build())) {
publisher.publishChain(PublishChainRequest.builder()
.chainId("orderChain")
.el("THEN(a, b)")
.build());
}
etcd用KV revision作变更序号,watch按revision区间订阅。etcd对历史revision有compaction上限,所以watch有可能因为revision已被compact而失败,这时候会自动降级成全量对账,之后再把watch续上。
# TLS / mTLS
etcd后端的TLS由endpoint的scheme决定:
- 单向TLS:endpoints全部用
https://,如果是私有CA,用ca-certificate指定;不配就用JVM默认的信任库。 - 双向TLS(mTLS):在单向TLS的基础上,成对配置
client-certificate和client-key。
下面这些配置错误都会在启动时直接抛ConfigErrorException:
- http和https的endpoint混用
user和password只配了一个client-certificate和client-key只配了一个- endpoints是
http://,却配了证书 - 证书文件不存在或者读不了
- 超时或keepalive参数小于等于0
完整的配置项见配置项参考。
# Step 4:执行
和前面一样,照常调flowExecutor.execute2Resp(...)。



