当前位置: 首页 > news >正文

云南网站设计公司江苏网站建设yijuce

云南网站设计公司,江苏网站建设yijuce,深圳西丽网站建设公司,品牌建设的思路1.幂等设计 1.1.定义 无论进行多少次相同的操作#xff0c;结果都保持一致的设计。 1.2.写操作的幂等性 1.2.1.Insert 指定唯一标识写#xff0c;是具有幂等性的。 不指定唯一标识写#xff0c;不具备幂等性。 1.2.2.Update 如果更新操作依赖于与历史状态#xff0c…1.幂等设计 1.1.定义 无论进行多少次相同的操作结果都保持一致的设计。 1.2.写操作的幂等性 1.2.1.Insert 指定唯一标识写是具有幂等性的。 不指定唯一标识写不具备幂等性。 1.2.2.Update 如果更新操作依赖于与历史状态则不是幂等的反之则幂等。 例 //无论执行多少次 count的值都为1 Update test_table set count 1 where id 1; //count的最终值取决于执行次数所以是非幂等的 Update test_table set count count1 where id 1;1.2.3.Delete 删除操作天然幂等因为删除之后数据就没了再删一次数据仍旧没了。 1.3.幂等性设计 1.3.1.唯一索引 通过给每一个操作一个requestId并将其记录到操作记录表中保证操作只会执行一次。如某个操作的requestId为1当其执行完了则将其插入操作记录表中。当再次执行该操作时其requestId在操作记录表中已经存在则不应再执行该操作。流程如下 1.3.2.有限状态机 有限状态机简称状态机表示有限个状态以及在这些状态之间的转移和动作等行为的模型。 2.领域事件 领域事件是聚合内已经发生的事实代表聚合内已经发生了业务操作或状态变化。领域事件通常由聚合根产生且因该是值对象或贫血对象。 领域事件可解耦领域对象之间的耦合度通过发布事件通知其他对象自身发生了某个事件代替直接调用。可实现夸聚合的数据一致性。 3.领域事件发布 例子 public class ApplicationSevice{AutoWiredDoMainService dmsAutoWiredDoMainEventPublisher publisherpublic void handleSomeThing(SomeCommand command){//领域服务完成某项业务,并返回领域事件ListDomainEvent eventList dms.doSomeThing(command);//推送领域事件publisher.publish(eventList);} }在上述例子中领域服务执行完事务后如果推送领域时间这一步执行失败会导致完整的业务流程没有执行成功。 为了解决这个问题可以将领域事件持久化并可靠地发布事件。 3.1.领域事件持久化 例 public class DomainRepository{ResourceEventRepository eventRepository;ResourceDataRepository dataRepository;Transactionalpublic void save(Entity entity){//获取领域事件ListDomainEvent events entity.getEvents();//将领域事件转换为持久化存储事件ListEvent eventList events.stream().map(s-{......}).collect(Collectors.toList());//持久化领域事件eventRepository.saveAll(eventList);//将实体转换为是数据库对应的数据模型DataModel d toDataModel(entity);//持久化数据模型dataRepository.save(DataModel);} }3.2.可靠发布领域事件 3.2.1.直接发布并补偿机制 1领域服务在实现具体的业务时应持久化保存领域事件并将领域事件的状态设置为未完成发布。 2当应用层调用领域服务完成业务逻辑处理之后将领域服务返回的事件直接发布。 3事件发布成功后将数据库中事件状态更新为发布成功。 4定时任务定时扫描最近一段时间范围内的状态为未发布成功的领域事件并将这些事件进行发布发布成功之后修改其状态为发布成功。 3.2.2.事物日志拖尾 频繁地轮训数据库可能会对数据库造成压力。此时可以考虑采用事务日志拖尾的方案。事务日志拖尾指监听数据库的事务日志以获取增量的新数据可通过CDC中间件来实现。常见的CDC中间件包括Debezium、Canal、Flink CDC等。 1)领域服务执行完业务逻辑之后持久化存储领域事件。 2)CDC中间件通过监听事务日志读取到增量的新数据。CDC中间件从数据中解析出事件发布到消息队列中。 4.领域事件订阅 领域事件订阅需要考虑幂等性设计。事件的发布和订阅可通过消息中间件kafka实现。 5.CQRS的概念 CQRS(Command Query Responsibility Segregation命令查询职责分离架构模式。通过不同的模型实现Command数据修改与Query数据查询分离。 6.为什么要引入CQRS 聚合根事是务一致性的边界。开发者在处理业务时为了保证业务的准确性需要完整的加载整个聚合根。而Query操作不一定需要完整的聚合根可能只需要聚合根的一部分状态且不会对状态进行修改此时将完整的聚合根加载到内存中可能因为读取的数据过多影响性能。所以需要将Query操作与Command操作分离开来。 在领域驱动设计的架构中可以直接在应用层调用基础设施层服务进行查询并返回查询条件而不用调用领域模型进行查询。 7.CQRS实现方式 7.1.方法级 一个方法要么执行Command要么执行Query不应在Command方法中返回View对象。 7.2.相同数据源CQRS Command操作处于DDD应用中Query操作处于三层贫血应用中。 7.3.异构数据源CQRS 数据的Command操作和Query操作可能使用不同的数据源。此时Command的应用仍采用DDD模型Query操作可采用三层贫血模型。但两个数据源之间应存在同步机制保证数据的一致性。可通过事件发布补偿机制或者事务日志拖尾的形式实现。
http://www.tj-hxxt.cn/news/139306.html

相关文章:

  • 做购物网站骗人做图片网站 解决版权
  • 购物网站排行中国移动和办公app下载
  • 衍艺网站建设设计企业网站主页图片
  • .net网站开发视频动易网站免费版
  • 关于动漫网站建设规划表平台推广是做什么
  • 用vs2010做网站网站媒体给房开做内容推广
  • 无锡门户网站制作服务莱芜网站建设流程
  • 牡丹江网站推广模拟登录 wordpress
  • 网站建设系统分析深圳市福田区656号
  • 购物网站建设需求模板下载如何建立自己的超市网站
  • 做视频免费模板下载网站专业网页设计哪家好
  • 手机网页设计制作网站wordpress 兔
  • 网站前端包括哪些企业logo设计软件
  • 吉林省高等级公路建设局网站做全屏的网站 一屛多高
  • 社保个人网站杭州网站建设方案
  • wordpress网站重新安装插件网站建设费属于研发费用吗
  • 济宁三合一网站建设东莞网站建设seo
  • 郑州网站推广公司电话平湖网站建设流程
  • 网站被k有什么表现在山东省建设监理协会网站
  • 快速建站完整版化学网站定制
  • 个人建站 wordpress1688网站建设
  • 网站前瞻性 新流量机会内容建设分析专做美容师招聘网站
  • 杭州专业的网站制作成功案例营销型网站建设论文
  • 手机网站制作的价格科技创新的魅力
  • 企业模板建站有哪些云南新建设国际小学网站
  • 网站关键词没被搜出来泰州做网站
  • 如何登录建设部网站电脑版长春火车站封闭了吗
  • 摄影作品投稿平台网站seo思路
  • 网站空间多少钱一年怎样做博客网站
  • 个人网站空间申请宁波最新发布