工作流引擎技术介绍-Flowable例子(五)
介绍目前开源工作流现状 介绍flowable 介绍BPMN2.0 比较flowable和activiti flowable例子(一)-工时申报流程 flowable例子(二)-请假流程 flowable例子(三)-保险索赔案例流程 flowable例子(四)-消息队列交互流程 flowable例子(五)-消费者评论分析流程 flowable不足及扩展 Flowable技术细讲 
      初创公司,其首要任务是客户满意度。我们将构建一个软件解决方案,让用 
户可以评价他们的满意度。客户就可以通过我们的网站提供评论。然后通过应用程序将此评论发送到 Kafka 
队列。在我们的主要客户应用程序中,我们为每个客户提供了一个 CMMN 
案例。这使我们能够对特定客户的所有评论进行分组,启动评价分析流程。如果我们收到差评,我们会为其中一名员工启动一项任务,以便他们能够纠正与客户的关系。
五、客户关系维护系统
需求描述:
每当注册新客户时,我们都会创建一个案例。此案例将在“活动订阅”阶段开始并等待相关的可能事件:(演示,我们只实现了“收到评论”事件)
收到评论
收到客户业务支持请求
定时器事件
收到停用
架构:

底部是一个 Kafka 事件流,负责传输所有事件。客户通过 React UI,将事件提交给审查服务。
UI客户端服务(Review Service – Spring Boot 应用程序),它使用 Spring WebFlux 从我们的 UI 接收评论并将它们传输到 Kafka。

评论将写入Kafka消息队列。
{"userId": "tdx","stationId": 5, //站点ID"rating": 5, //评分-5星好评"comment": "滑板车很好用!!!" //评论}
客户关系维护服务(CustomerRelationShipService – Flowable - Spring Boot 应用程序),启动客户案例以及客户的流程。将接收客户评价和发出分析请求并获取到评价分析结果。(这里我们只关心客户评价事件)

公司后台任务管理(FlowableTaskApplication – Flowable - Spring Boot 应用程序),连接到与客户关系维护服务相同的数据库,员工可以在其中与客户案例进行交互。当收到差评,我们会为其中一名员工启动一项任务,以便他们能够纠正与客户的关系。

评价分析服务 (SentimentAnalysisService – Flowable - Spring Boot 应用程序),使用一个流程来执行评论分析。

网关 Spring Cloud API Gateway – 用于将流量从 UI 重定向到适当的微服务。
建模分析:
1.案例模型中接收客户评价事件

同样需要配置Kafka参数映射到流程变量,以及条件过滤。

只有用户ID和启动案例模型用户ID相等的Kafka消息才会被消费。

2.消费到消息后,会执行评价分析流程。

这里将用户ID和评价作为参数

3.子流程启动被进入第一节点,发送评价分析请求,并等待分析结果

同样需要配置发送消息、接收触发消息事件
发送消息

发送消息-流程变量映射Kafka消息内容

接收触发消息

消息映射流程变量

消息过滤条件

4.评价分析服务
接收Kafka消息并启动流程

Kafka消息映射流程变量

将分析结果发送回Kafka

流程变量映射到Kafka消息内容

演示运行:
环境:
安装kafka
安装zookeeperdocker run --privileged=true -d--name zookeeper --publish 2181:2181 -d zookeeper:latest安装kafkadocker run -d --name kafka--publish 9092:9092 --link zookeeper--env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181--env KAFKA_ADVERTISED_HOST_NAME=localhost--env KAFKA_ADVERTISED_PORT=9092 wurstmeister/kafka安装kafkaManagerdocker run -d --name kafka-manager--link zookeeper:zookeeper --link kafka:kafka-p 9001:9000 --restart=always--env ZK_HOSTS=zookeeper:2181 sheepkiller/kafka-manager测试kafka是否安装成功//创建topicbin/kafka-topics.sh --create --zookeeper zookeeper :2181 --replication-factor 1 --partitions 1 --topic mykafka//查看topicbin/kafka-topics.sh --list --zookeeper zookeeper :2181//创建生产者bin/kafka-console-producer.sh --broker-list zookeeper :9092 --topic mykafka//创建消费者bin/kafka-console-consumer.sh --zookeeper zookeeper :2181 --topic mykafka --from-beginning
flowable配置

2.本来案例创建应该嵌入到用户注册逻辑中,由于是演示,我们以启动表单的形式指定案例归属于哪个用户。

这样,我们就启动了一个属于用户【土豆仙】的用户关系 维护案例,案例处在[激活订阅]这一阶段

3.UI界面提交评论,并将数据传输到kafka

kafka消息内容
{"userId":2,"stationId":1,"rating":5,"comment":"非常好用!"}
案例接收到消息,流转到[调用评价分析流程]节点

查看活动的流程,确实已经启动

3.完成对应任务,流转到[请求评价分析]节点,会自动向kafka发送一条消息

同时,评价分析会接收到kafka消息,启动分析流程,完成该任务审核

4.由于处理评价识别,我们是模拟的随机
random.nextBoolean() ? "negative" : "positive";这一次的评价,随机判定为积极的评价,则不做处理。

(重新发送一条评价,并完成对应审核)
当判定为消极评价,我们会流转到应对消极评价的处理分支中去。

  实际生产环境,可以去掉上面的两步审核,并完善针对评价语句的自动分析识别逻辑。这样,我们就完成了一套针对客户评价自动识别,并作出即时响应的客户关系维护系统。一旦识别到客户不满意,则会走人工联系处理。
