• 最新论文
  • ben(best-effort-notify),基于最大努力通知的分布式事务解决方案 滨州市人民医院李凯述获评“山东省十佳医师” 兰州西南处,被誉为高原上的明珠之称的,你知道是哪里吗? 中原大战后“光杆司令”宋哲元为何能成为西北军残兵首领 图克塔米舍娃改变了短节目音乐 兰州西南处,被誉为高原上的明珠之称的,你知道是哪里吗? Redmi K20 Pro详细评测:“刀法精湛”的水桶机? 5G安全怎么办?专家称监管还是有很大挑战 中原大战后“光杆司令”宋哲元为何能成为西北军残兵首领 中原大战后“光杆司令”宋哲元为何能成为西北军残兵首领 5G安全怎么办?专家称监管还是有很大挑战 ben(best-effort-notify),基于最大努力通知的分布式事务解决方案 图克塔米舍娃改变了短节目音乐
  • 推荐论文
  • ben(best-effort-notify),基于最大努力通知的分布式事务解决方案 滨州市人民医院李凯述获评“山东省十佳医师” 兰州西南处,被誉为高原上的明珠之称的,你知道是哪里吗? 中原大战后“光杆司令”宋哲元为何能成为西北军残兵首领 图克塔米舍娃改变了短节目音乐 兰州西南处,被誉为高原上的明珠之称的,你知道是哪里吗? Redmi K20 Pro详细评测:“刀法精湛”的水桶机? 5G安全怎么办?专家称监管还是有很大挑战 中原大战后“光杆司令”宋哲元为何能成为西北军残兵首领 中原大战后“光杆司令”宋哲元为何能成为西北军残兵首领 5G安全怎么办?专家称监管还是有很大挑战 ben(best-effort-notify),基于最大努力通知的分布式事务解决方案 图克塔米舍娃改变了短节目音乐
  • 热门标签
  • 日期归档
  • ben(best-effort-notify),基于最大努力通知的分布式事务解决方案

    来源:www.jch10086.com 发布时间:2019-09-17

    BEN(尽力而为通知)是基于尽力而为通知的分布式事务解决方案。

    架构图

    流程描述

    假设两个业务系统的两个业务AB。基于BEN的分布式事务处理过程如下:

    上层服务系统完成服务处理后,向消息中间件发送通知消息。 BEN系统侦听通知消息队列,并在收听通知消息后向数据库添加通知记录。根据系统配置的通知时间设置通知任务执行时间,并将其放入DelayQueue。在通知任务到达执行时间之后,Http请求被发送到下层服务系统。将通知日志添加到数据库。

    异常处理

    Http请求异常:网络波动或下级服务系统Down机器(Http请求超时或响应代码为5xx)。底层服务处理失败:下层服务系统未返回处理成功。

    1.通知记录将被标记为相应的状态,并将添加通知日志。然后,通知任务将根据系统配置的通知间隔设置下一个通知时间,并将其放入DelayQueue继续通知。

    2.基础业务系统要求先前业务的幂等性

    3.当通知数超过最大系统配置数时,通知记录将被标记为通知失败,并且不会继续通知。可以在通知管理子系统中进行手动干预(删除或重新通知)。

    通知监控子系统

    内存监控

    服务主动方(通知消息生成器)生成消息的速率超过服务被动方(通知消息消费者)的消耗速率,这导致消息驻留在存储器中。为了防止内存溢出等,预先发送警报消息。

    计算公式

    JVM剩余内存<;JVM最大内存*系统配置阈值百分比

    应对策略

    发送通知邮件。通知任务只保存一次到数据库。无论通知成功与否,都要将通知结果更新到数据库,并从内存中释放任务信息。内存监听器将休眠一段时间,并重新计算内存情况,直到内存足够,并且在从数据库读取期间没有通知成功为止。通知记录,继续通知。

    通知监控

    监控系统堆叠和发送警报邮件的通知任务数

    如果业务被动方(通知消息使用者)关闭,并且业务主动方(通知消息生产者)继续生成通知消息,则由于通知异常,大量通知任务可能会驻留在内存中。为了防止内存溢出,提前发送警报消息。

    计算公式

    堆叠任务数>;系统配置阈值数;每分钟新堆叠任务的速率>;系统配置阈值速率

    初始化Ben数据库

    下载项目源代码并解压缩,执行“Ben数据库初始化SQL脚本”。通常,数据库(cn-ben)将自动创建,并生成七个表(两个核心表t-notify-record、t-notify-log、其他基本信息表,如账户、资源、后台管理所需的角色)。Ben数据库初始化SQL脚本“路径是:

    /cn-ben/sql/ben初始化.sql

    编译并运行Ben

    编译源代码

    根据Maven格式将源代码导入到IDE中,并使用Maven进行编译。

    Maven模块描述

    模块名称描述ben-service-api基本通知服务接口,系统工具类,实体类封装ben-service基本通知服务接口实现,通知管理子系统服务接口实现ben-cms-api通知管理子系统服务接口,实体类封装本 - 通信。了解管理子系统,提供管理后台资源数据库访问层的通知记录和通知日志:SQL语句

    本服务的配置和操作

    配置ben-service

    配置文件路径:

    /cn-ben/ben-service/src/main/resources/application-dev.yaml

    配置文件描述:

    春天:

    #数据库连接配置

    数据源:

    URL: JDBC: MySQL: //127.0.0.1: 3306/cn-ben? UseUnicode=true&amp; characterEncoding=utf-8

    用户名: root

    密码: xxxx

    驱动程序类名称: com.mysql.jdbc.Driver

    Hikari:

    连接测试查询: SELECT 1

    #ActiveMQ连接配置

    Activemq:

    Broker-url: tcp: //127.0.0.1:

    用户:管理员

    密码:管理员

    #boxage配置

    邮件:

    主机: smtp.163.com

    用户名:

    密码: xxxx

    #adiver

    接收器:

    属性:

    邮件:

    Smtp:

    验证:是真的

    Starttls:

    启用: true

    必需:是真的

    #DubboConfiguration

    达博:

    申请表:

    名称: ben-service

    记录器: slf4j

    注册表:

    地址: zookeeper: //127.0.0.1: 2181

    协议:

    名称: dubbo

    端口:

    扫描:

    基础包: com.cn.ben.service.impl

    #通知任务处理器配置

    任务:

    处理程序:

    核心池大小: 10

    最大池大小: 100

    保持活动时间:

    队列容量: 10

    处理程序 - 执行程序 - 睡眠: 5000

    间隔:

    - 0

    - 1

    - 4

    - 10

    - 30

    - 60

    - 120

    - 360

    - 900

    #系统监控配置

    监视器:

    #Memory Monitoring

    记忆:

    低百分比: 15

    睡眠时间:

    #通知监控

    通知:

    未完成计数: 1000

    加速率: 20

    运行ben-service

    该模块基于SpringBoot构建,可以使用Maven命令(mvn包)作为jar包(java -jar)运行。

    调试阶段可以直接在IDE中运行ServiceApplication。文件路径是:

    /cn-ben/ben-service/src/main/java/com/cn/ben/service/ServiceApplication.java

    群集(可选)

    由于该项目是基于Dubbo框架构建的,因此该项目默认支持集群部署,只需要在不同的服务器上运行ben-service模块jar包。可以完成ben-service集群。

    Ben-cms配置,运行(可选)

    配置ben-cms

    档案路径:

    /cn-ben/ben-cms/src/main/resources/application-dev.yaml

    简介描述:

    #ben-cmsRun端口和访问根路径,可以根据自己的条件配置

    服务器:

    端口:

    Servlet:

    上下文路径:/ben-cms

    #DubboConfiguration

    达博:

    申请表:

    名称: ben-cms

    记录器: slf4j

    注册表:

    地址: zookeeper: //127.0.0.1: 2181

    消费者:

    检查:错误

    运行ben-cms

    该模块基于SpringBoot构建,可以使用Maven命令(mvn包)作为jar包(java -jar)运行。

    在调试阶段,可以直接在IDE中运行CmsApplication。文件路径是:

    /cn-ben/ben-cms/src/main/java/com/cn/cms/service/CmsApplication.java

    业务系统对接BEN

    Maven依赖

    在业务系统的pom文件中引入最新版本的ben-api:

    #中央仓库:

    Com.gitee.nuliing

    本-API

    $ {最新稳定版}

    发送通知

    步骤进行:

    构造通知参数BenNotify以将通知对象发送到消息队列(队列名称:notify.queue,定义为静态变量BenNotify.QUEUE)

    SpringBoot示例代码:

    /CN-BEN /奔引导样本/

    导入org.springframework.jms.core.JmsMessagingTemplate;

    导入com.cn.ben.api.model.BenNotify;

    http://web.wangyuan.org.cn

    友情链接: