spider-node 快速入门
- 本章节介绍运行spider-node的系统要求,如何安装,启动一个集群,然后运行一个简单的HelloWorld示例
1:环境要求
jdk 8:
Elasticsearch 5.7/7~8
redis 不局限版本
MySQL 不限版本
硬件配置(最低2核心4G,系统支持epoll模型)
下载启动包 点击访问 spider-node
2: spider架构
2.1:架构图
2.1:架构讲解
gateway
- 作为访问spider能力的入口
ui
- 提供spider-node的页面访问能力(默认端口6140)
broker
- 作为spider-node的核心部分,他由多个角色组成 主要承载spider对业务功能,与业务功能实例的,全生命周期管理。
flow-node
- 执行实例的生命周期管理,流程引擎管理
scheduler
- 注册中心(服务端worker注册到scheduler中),跟worker进行通信,提供给 flow-node执行实例过程中,与服务端的worker进行通信
transaction
- 分布式事务管理-提供spider-node实例中需要事务的节点,进行对事务的 commit,rollback
controller
- 控制集群中的节点状态,提供选举leader,follower, 提供broker之前副本的规则,leader与follower的通信
area
- 领域功能生命周期的管理,提供给spider-node在执行流程实例过程中需要的领域信息
param-manger
- spider-node执行流程实例过程中,实例参数的生命周期管理。
log-manger
- 对spider-node执行过程中的节点,入参,返回参数,执行状态等信息,进行存储,主要提供给日志业务进行搜索,与重试功能。
3:spider-配置
spiderConf.properties
# 启动环境
environment = local
# 集群模式(zk/hazelcast)建议使用zk
cluster-type = hazelcast
spiderConf-local.properties redis
# 最大空闲连接数
redis-minIdle = 1
# 链接初始化新增连接心跳的配置
redis-pingConnectionInterval = 60000
# 核心连接数
redis-core = 15
# 最大等待时间
redis-maxWait = 3000
# redis连接地址
redis-host-name = xxxx,xxxx,xxxx
# redis-密码
redis-password = newhope
# redis-端口
redis-port =26379
# redis执行超时配置
redis-timeout =10000
# redis 集群模式(standAlone(单机)/sentinel(哨兵)/masterSlave(主从)/cluster(集群))
redis-type = sentinel
# redis的 master-name
redis-master-name = redisMaster
spiderConf-local.properties mysql
# mysql 的连接地址
mysql-host = xxxx
# 密码
mysql-password = xxxx
# 用户名
mysql-user = xxxx
# 端口号
mysql-port = 3306
# 库名
mysql-database = xxxx
spiderConf-local.properties 文件存储配置
### file type config MINIO/OSS(阿里云的OSS)
file_server_type = MINIO
# minio (spider-node提供玩的配置,可以选择自己公司的配置)
minio_url = http://47.109.67.130:1026
minio_access_key = s6ycDmJoFu7Y2nbDhJ9R
minio_secret_key = CHlubXwEhPSb0E9LkOLmgmrSa943pXEIGHtnWLPw
minio_bucket_name = spider-node
### 阿里云 oss配置
oss_endpoint = xxxxxx
oss_keyId = xxxxxx
oss_keySecret = xxxxxxx
oss_bucketName = xxxxxx
bpmn_path = bpmn
sdk_path = sdk
spiderConf-local.properties spider角色启动配置
# broker 包含 flow-node,gateway指的访问spider的入口,ui指的启动spider的访问界面
role = broker,gateway,ui
spiderConf-local.properties 限流配置
# 间隙
limitation-interval = 20
# 并发数
limitation-number = 600
spiderConf-local.properties zk配置(集群模式选择zk时需要配置)
zk-addr = xxxx(域名地址或者ip即可,不需要添加端口)
spiderConf-local.properties rocksdb路径配置(可自定义)
rocksdb_path =/usr/local/rocksdb/
spiderConf-local.properties es配置
# 日志使用的类型(es 8以下使用/esx 8包括8以上使用)
log_type = esx
# es的连接地址是否为https
https_credit = true
# es集群名称
es-cluster-name = elasticsearch
# es连接地址
es-ip-addr = xxxx:9200
# es连接名称
es-username = bms-spider
# es连接密码
es-password = gSqWkvnkV4lO1h0skOLG
spiderConf-local.properties 公共配置
# 该配置不能改- spider-node与业务服务之前的通信方式
rpc-type = grpc
# 界面访问端口
ui-port = 6140
# soider-node服务端口号
function-port = 8080
# 启动每个角色的实例数,默认使用1(尽量别动)
instance-number = 1
引入依赖
<!-- spider-worker端 mvn 依赖 -->
<dependency>
<groupId>cn.spider-node</groupId>
<artifactId>client</artifactId>
<version>1.0.2.2</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</exclusion>
<exclusion>
<groupId>cn.spider-node</groupId>
<artifactId>spider-mybatis-plugin</artifactId>
</exclusion>
<exclusion>
<groupId>cn.spider-node</groupId>
<artifactId>spider-transaction</artifactId>
</exclusion>
<exclusion>
<groupId>com.google.api.grpc</groupId>
<artifactId>proto-google-common-protos</artifactId>
</exclusion>
<exclusion>
<groupId>io.vertx</groupId>
<artifactId>vertx-hazelcast</artifactId>
</exclusion>
<exclusion>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
</exclusion>
<exclusion>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast-kubernetes</artifactId>
</exclusion>
<exclusion>
<groupId>io.vertx</groupId>
<artifactId>vertx-web-client</artifactId>
</exclusion>
<exclusion>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
</exclusion>
<exclusion>
<groupId>io.vertx</groupId>
<artifactId>vertx-codegen</artifactId>
</exclusion>
<exclusion>
<groupId>io.vertx</groupId>
<artifactId>vertx-service-proxy</artifactId>
</exclusion>
<exclusion>
<groupId>io.vertx</groupId>
<artifactId>vertx-grpc</artifactId>
</exclusion>
<exclusion>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
</exclusion>
<exclusion>
<groupId>io.vertx</groupId>
<artifactId>vertx-bridge-common</artifactId>
</exclusion>
<exclusion>
<groupId>io.vertx</groupId>
<artifactId>vertx-auth-common</artifactId>
</exclusion>
<exclusion>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-grpc</artifactId>
<version>4.3.7</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<version>4.3.7</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web-client</artifactId>
<version>4.3.7</version>
</dependency>
<!-- spider-sdk mvn 依赖 -->
<dependency>
<groupId>cn.spider-node</groupId>
<artifactId>annotation</artifactId>
<version>1.0.2</version>
</dependency>
worker服务的yaml新增spider配置
spider:
server:
ip: spider-node.spider-node
port: 8080
worker:
name: bms-plus
rpc-port: 9972
spider-node 启停
- 启动命令/停止命令
cd /spider-node/bin ./start.sh
cd /spider-node/bin ./stop.sh
spider-node sdk
- sdk包含 方法的入参 出参 接口 三个要素
接口
- 接口示例
@TaskComponent(name = "test_service", workerName = "bms_middle_platform")
public interface TestService {
@NoticeScope(scope = {ScopeTypeEnum.VARIABLE},target = "bill")
@TaskService(name = "query_bill_status")
Bill queryBill();
@TaskService(name = "update_bill_status")
UpdateBillStatusResult updateBillStatus();
@TaskService(name = "test_update_status")
void testUpdateStatus(TestBillStatusUpdateParam param);
}
入参
@Data
public class BuildPricingFailParam {
/**
* 基础信息
*/
@StaTaskField("sortInfo")
private InitSortInfoResult sortInfoResult;
/**
* 节点类型
*/
@ReqTaskField("checkpointEnum")
private String checkpointEnum;
/**
* 计费信息
*/
@ReqTaskField("input")
private WarehouseInput input;
@ReqTaskField("checkpoint")
private String checkpoint;
}
出参
@Data
public class UpdateBillStatusResult {
@NoticeVar(target = "bill.billStatus")
private String billStatus;
}
@Data
public class InitSortInfoResult {
/**
* 项目id
*/
private String projectId;
/**
* 项目名称
*/
private String projectName;
/**
* 应收结算主体
*/
private String payeeInfo;
/**
* 应付结算主体
*/
private String payerInfo;
/**
* 应收公司
*/
private String payee;
/**
* 应付公司
*/
private String payer;
/**
* 应收租户id
*/
private String payeeTenantId;
/**
* 应付租户id
*/
private String payerTenantId;
/**
* 合同编码
*/
private String contractCode;
/**
* 应付项目id
*/
private String payerProjectId;
/**
* 应付项目名称
*/
private String payerProjectName;
}
spider-node 注解
@TaskComponent 域组件的注解
@TaskComponent(name = "pricing_warehouse", workerName = "bms_middle_platform")
name 指的组件名称
workerName 指提供组件的服务名称
@TaskService 域组件中的-域功能注解
@TaskService(name = "pricing")
name 指的域功能名称
@NoticeSta 通知返回 sta域对象注解
@NoticeSta(target = "pricing_result")
target 指定返回到某个域对象
设置后,不允许修改-修改会抛出异常
返回到 sta参数域
作用于 接口的方法
@NoticeVar 通知返回 var域对象注解
@NoticeVar(target = "bill")
target 指定返回到某个域对象
设置后允许修改
返回到 var参数域
作用于 接口的方法
@NoticeVar
@NoticeVar(target = "bill.billStatus")
target 指定返回 bill域对象中,对billStatus进行修改
var 域允许修改
作用域 返回的参数实体字段上面
@NoticeSta
@NoticeSta(target = "bill.billStatus")
target 指定返回 bill域对象中,对billStatus进行修改
var域 不允许修改
作用域 返回的参数实体字段上面
@VarTaskField
@VarTaskField("bill.billStatus")
指定获取 sta域里面 bill域对象中的billStatus字段
作用域 接口入参的参数实体字段上面
@StaTaskField
@StaTaskField("pricing_result.costs")
指定获取 sta域里面 pricing_result域对象中的costs 字段
作用域 接口入参的参数实体字段上面
@ReqTaskField(执行域业务功能的入参)
@ReqTaskField("checkpointEnum")
指定获取 req域里面 checkpointEnum 字段
作用域 接口入参的参数实体字段上面
@NoticeResult
指定执行结果将被通知到StoryBus中的哪些作用域中,@NoticeResult说明,该方法执行结果将被通知到result域,最终作为Story的执行结果返回给调用方
作用于字段/方法
spider-node 参数映射
- 参数映射的设计初衷,当B域里面有个b1字段,在某个场景下,是A域中的 a1字段,在某个域业务功能执行过程中可以通过B.b1 = A.a1做隐射,自动获取a1的
- 示例
{"user.id":"req.userId","user.name":"req.userName","payBill.adjustedAmount":"req.adjustCostValue","payBill.cost":"adjustInfo.shippingOrderCosts"}
spider-node 数据流转
spider中存在 1个数据域(为每个执行流程实例分配一个域)
req 该域作为执行域业务功能的入参 (取请求参数值的时候,使用req.xxxx)
过程对象域 (取域对象值的时候使用,类似order.status 取到订单中的状态值)
spider-node 配置流程返回数据
spider_business_function_version 表中的字段 result_mapping 进行返回值配置
类似 {"result":"syncOilResp.result","msg":"syncOilResp.msg"}
解释 功能执行后,需要返回给调用者的字段为 result,msg ,result 的值来自于syncOilResp对象域中的 result值
spider-node bpmn模型
包含网关 + 判断网关
延迟节点
service_task_type = DELAY
delay_time = 15
轮询节点
service_task_type = POLL
poll_count = 10/10S
异步
参数转换
conversion_param = {"1":"AWAIT_VERIFY","0":"NOT_NEED_VERIFY"} 解释 把值为1的转成AWAIT_VERIFY