流程任务调用处理设计

        最近在使用流程引擎时,面对了这样的需求,当系统发送流程节点监听的消息时,需要根据监听到的消息类型来决定调用哪个服务,并且处理调用服务的出差入参。

        设计如下:

        流程在执行过程中,可以携带对应的参数,首先,流程需要携带配置好的服务名称和方法名称,我依此来获取对应的服务在数据库的配置

方法配置设计包括:

id	bigint	
method_name	varchar	业务方法描述名称
service_code	varchar	服务code
match_param	varchar	映射关系
input_params	text	请求参数(需要的参数json)
output_params	text	输出需要的结果
call_url	varchar	调用地址
call_method	varchar	方法名
aware_type	varchar	消息类型
create_time	datetime	创建时间
update_time	datetime	更新时间

具体流程如下:

1.根据服务名和方法名查询到对应的如上配置

2.入参中将需要替换的变量用${"变量名"}来代替,此变量名为该参数在流程引擎设计中的变量名,另外,在match_param中存下该变量的变量名和变量类型

3.通过match_param中的变量名来从流程本身携带的上下文中获取到对应的变量值,然后通过操作json字符串来替换input_params所需要的值,封装入参。

示例:

input_params:

{
    "query":{
        "msg":"${searchMsg}",
        "id":"07b8d9504ed44976a6a85eefe0389463",
        "type":"text"
    }
}

match_param:
[
    {
        "match":"searchMsg",
        "type":"0"
    }
]

4.系统中注入RestTemplate来作为发送请求的工具,根据地址和请求方式以及入参来调用对应的服务。

        注:由于调用服务是系统外不确定因素,返回的时间无法确认,方法设计通过线程池来启动线程调用服务

5.获取出参,出参设计存所需字段的类型和所需字段在出参中的层级以及在流程引擎中的变量字段名称

示例:

output_params:
[
    {
        "data.messages":"searchResultContent",
        "type":"1"
    }
]

6.将获取到的参数以json格式储存,并且将此次会话的sessionId和感知类型aware_type发送到kafka中,由kafka来处理消费,保存到redis中并且发送给前端来展示服务调用的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值