工作流引擎技术介绍-Flowable例子(五)

土豆仙

共 2971字,需浏览 6分钟

 · 2021-10-20



      初创公司,其首要任务是客户满意度。我们将构建一个软件解决方案,让用 户可以评价他们的满意度。客户就可以通过我们的网站提供评论。然后通过应用程序将此评论发送到 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 应用程序),启动客户案例以及客户的流程。将接收客户评价和发出分析请求并获取到评价分析结果。(这里我们只关心客户评价事件)


  • 公司后台任务管理(FlowableTaskApplicationFlowable - 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";

这一次的评价,随机判定为积极的评价,则不做处理。



(重新发送一条评价,并完成对应审核)

当判定为消极评价,我们会流转到应对消极评价的处理分支中去。



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

浏览 84
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报