EventBus

Axon 3.0.x 框架简介官方文档

守給你的承諾、 提交于 2020-04-27 20:46:10
因为需要用到,但是在网上对应的资料实在是很少,只有迎着头皮看官网文档并配合翻译器。如有误导多多包涵。 Axon 什么是 Axon Axon Framework 通过支持开发人员应用命令查询责任隔离(CQRS)架构模式来帮助构建可扩展和可维护的应用程序。它通过提供最重要的构建块(例如聚合,存储库和事件总线(事件的分发机制))的实现来实现。此外 Axon 提供注释支持,它使您可以构建聚合和事件侦听器,而无需将代码与 Axon 特定的逻辑绑定在一起。这使您可以专注于业务逻辑而不是管道,并可以使您的代码更易于独立测试。 并非每个应用程序都会从 Axon 中受益。不期望扩展的简单 CRUD 应用程序可能不会从 CQRS 或 Axon 中受益。然而,有各种各样的应用程序确实受益于 Axon。 可能受益于 CQRS 和 Axon 的应用: (系统功能需要频繁迭代新功能)应用程序很可能在很长一段时间内使用新功能进行扩展。例如,在线商店可能从订单模块进度的系统开始。在稍后阶段,这可以通过库存信息进行扩展,以确保库存在出售时得到更新。甚至在以后,会计可以要求记录销售的财务统计,等等。虽然很难预测软件项目在未来将如何发展,但大多数这类应用程序都是这样的。 (频繁读写的应用)应用程序具有高的读写比。这意味着数据只写几次,并多次读。由于查询的数据源与用于命令验证的数据源不同

Vue(小案例_vue+axios仿手机app)_购物车

霸气de小男生 提交于 2020-04-27 18:15:34
一、前言 1.购物车 二、主要内容 1、效果演示如下,当我们选择商品数量改变的时候,也要让购物车里面的数据改变 2、具体实现   (1)小球从上面跳到下面的效果   (2)当点击上面的“加入购物车按钮”让小球显示出来(这里需要用到vue中的动画过渡) 结构如下(这是在加入购物车这个页面) // 小球 <transition name= 'ball' @after-enter= 'afterEnter' > <div class = "ball" v- if = "isExist" >< / div> < / transition>   样式() .ball-enter-active { /* 给1s的时间让小球进入动画效果 */ animation : bounce-in 1s ; } .bass-leave { /* 元素进入以后,透明度0,整个动画都是0 */ /* 元素离开默认是1,所以会闪一下,设置为0 */ opacity : 0 ; } /* 这里是控制小球从上面跳到下面的动画 */ @keyframes bounce-in { 0% { transform : translate3d(0, 0, 0) ; } 50% { transform : translate3d(140px, -50px, 0) ; } 75% { transform : translate3d

Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作

て烟熏妆下的殇ゞ 提交于 2020-04-25 15:13:48
ChuanGoing 2019-09-10 距离上一篇近一个月时间,断断续续才把本篇码完,后面将加快进度,争取年度内把本系列基本介绍完成,同时督促本人持续学习。 本篇学习曲线: 1.初识Dapper 2.DbConnection 3.CommandBuilder实现单表操作(略) 4.演示 初识Dapper Dapper是一个轻量级/高性能的ORM,核心功能是利用Emit反射获取IDataReader中的数据。我们可以利用它的对象关系映射实现简单CURD操作,或者直接用SQL语句实现复杂场景的CURD操作。 DbConnection 顾名思义,数据库连接对象。Dapper提供DbConnection对象的扩展来操作数据库 public virtual int Execute( string sql, object param = null , int ? commandTimeout = null , CommandType? commandType = null ) { return _dbConnection.Execute(sql: sql, param: param, transaction: null , commandTimeout: commandTimeout, commandType: commandType); } public virtual

andorid jar/库源码解析

て烟熏妆下的殇ゞ 提交于 2020-04-24 12:48:26
前言   本篇作为开篇,会大体上说明,需要解读源码的,类库,或者jar。 序   原本,类库和jar的系列准备写到逆向系列课程的,但是那个东西,在写了两篇,就没有后续了,现在也不知道从哪里开始了, 只能等后期想好了,再开篇单独写吧。 目录:   EventBus、Dagger、okhttp、retrofit、butterknife、zxing、Bolts、RxJava   org.apache.commons.codec、org.apache.commons.lang、org.apache.commons.io   io.netty、io.fabric、cat.ereza、javax、msgpack、zip4j   com.davemorrissey.labs、com.daimajia.easing、com.arcsoft.livebroadcast、pl.droidsonroids.gif 厂牌库:   XXX 工具库:    来源: oschina 链接: https://my.oschina.net/u/4265622/blog/3685595

andorid jar/库源码解析 EventBus

一笑奈何 提交于 2020-04-24 12:48:10
目录: andorid jar/库源码解析 EventBus:   用于不同Activity,Service等之间传递消息(数据)。 A:onCreate定义 EventBus . getDefault ( ) . register ( this);   onDestroy定义 EventBus . getDefault ( ) . unregister ( this ) ; 添加public方法,一个Object参数(所有继承与Object的对象),用于接收消息通知。 B:使用 EventBus.getDefault().post(new 对象); 通知消息(这个时候,如果是同一个类型对象,A中的方法可以收到通知) 源码解读: EventBus . getDefault ( )   使用,双重判断,创建/获取一个EventBus对象。 . register (   注册当前类对象,到EventBus的缓存中,保存当前类,包含 Subscribe 注释的public方法且只有一个参数。 同时安装参数对象的种类,对数据进行在分类存储,便于查找。然后循环,当前类的父类,同样的操作,直到,父类 StartWith android.、androidx.、java.、javax.。 . unregister(   移除刚刚注册的对象,和方法信息,和注册的方法成员的类型对应的类信息。

eShopOnContainers 知多少[4]:Catalog microservice

我的未来我决定 提交于 2020-04-22 07:21:48
引言 Catalog microservice(目录微服务)维护着所有产品信息,包括库存、价格。所以该微服务的核心业务为: 产品信息的维护 库存的更新 价格的维护 架构模式 如上图所示,本微服务采用简单的数据驱动的CRUD微服务架构,来执行产品信息的创建、读取、更新和删除(CRUD)操作。 这种类型的服务在单个 ASP.NET Core Web API 项目中即可实现所有功能,该项目包括数据模型类、业务逻辑类及其数据访问类。其项目结构如下: 核心技术选型: ASP.NET Core Web API Entity Framework Core SQL Server Swashbuckle(可选) Autofac Eventbus Polly 实体建模 该微服务的核心领域实体是商品,其类图如下: 对于实体这一块,有两个小知识点需要说明一下: 进行数据库字段映射时,主键都使用了 ForSqlServerUseSequenceHiLo 指定使用 HI-LO 高低位序列进行主键生成。 使用NoTracking提升查询速度 在 CatalogController 的构造方法中,明确指定以下代码来进行查询优化,这一点也是我们值得学习的地方。 ((DbContext)context).ChangeTracker.QueryTrackingBehavior =

WebSocket学习总结

一曲冷凌霜 提交于 2020-04-18 19:39:53
   本文随便写了点自己对WebSoket通讯协议理解,在两种框架上玩的Demo,然后踩了几个坑还有没填上的坑(欢迎评论指导一下)。 WebSocket是什么?使用WebSocket的原因?   WebSocket是网络通讯协议的一种。   提到网络通讯协议,我第一个就想到了HTTP协议,但是HTTP协议的一些特性我想不用多说,大家也都是了解的,像无法保持长连接(由于功能需要,已有大佬整出保持长连接的方式);发起端只能是客户端;这些特性让我们在实际开发某些功能遇到了极大的麻烦,所以在HTML5推出WebSocket标准,让浏览器和服务器建立了无限制的双全工通信,双方可以互发消息。 WebSocket框架上使用   angular(7.2.2)+ ionic(4.0.0)   这是一个移动端应用程序,在angular框架中,我惯用服务(service)来处理业务,因此直接在服务管理的文件夹创建一个WebSocket的服务(ng generate service WebSocket)。WebSocket服务里包含创建连接,重连机制,心跳检测,计算运行时间等基础功能(详细写法可见代码)。    接下来可以在app全局新增一个WebSocket组件,ngOnInit生命钩子去建立连接,往组件中写入收发消息代码。会解决网页刷新导致WebSocket实例被清除

使用C#的计时器加观察者模式完成报警推送需求

人走茶凉 提交于 2020-04-18 12:01:57
前言 这两天面试了一个物联网公司高级研发,面试题是下面这样子 公司领导,部门主管,小组组长,组成员4级,假如有个 疫情预警,先通知组人员(对个人,主要有一个处理就算处理了) 如果3分钟没处理,就往组长发短信,如果组长3分钟没处理就往上级推送。一级一级的。 要求单程序并发至少支持1000tps预警事件 说实话上面需求在我做的过往项目里有过类似需求,我也只是依稀记得自己是怎么做的。类似于使用第三方任务调度框架完成上面的3分钟超时处理,然后至于分级发送则更简单了,再不济就是使用if、else这样的最原始验证即可。但是这样的题目丢到面试题上我是一下就不知所措了。自然最终的结果也不尽人意(我最终提交的代码就是采用一个事件总线实现报警的推送,但是并未对其进行超时分级发送) 这个自然是错误的,我其实当时也想过使用Timer,但是内心对Timer就是感觉用性能做代价去换取最终的结果。 解析需求 过了几天还是觉得要手纯撸代码将上面功能撸出来,不然如何成长呢! 拆分下需求可以得到的消息是有一个事件。这个事件就是报警事件,通过报警事件需要将消息推送给不同职位的工作人员,而且必须遵循岗位从下至上,但凡人员收到报警消息则表示报警通知已完成,其次就是有一个三分钟需要处理。 通过上面的需求分析可以知道我们必须要定义一个枚举,记录职称高低。 /// <summary> /// 工作级别 /// </summary

使用C#的计时器加观察者模式完成报警推送需求

孤街浪徒 提交于 2020-04-18 11:53:44
前言 这两天面试了一个物联网公司高级研发,面试题是下面这样子 公司领导,部门主管,小组组长,组成员4级,假如有个 疫情预警,先通知组人员(对个人,主要有一个处理就算处理了) 如果3分钟没处理,就往组长发短信,如果组长3分钟没处理就往上级推送。一级一级的。 要求单程序并发至少支持1000tps预警事件 说实话上面需求在我做的过往项目里有过类似需求,我也只是依稀记得自己是怎么做的。类似于使用第三方任务调度框架完成上面的3分钟超时处理,然后至于分级发送则更简单了,再不济就是使用if、else这样的最原始验证即可。但是这样的题目丢到面试题上我是一下就不知所措了。自然最终的结果也不尽人意(我最终提交的代码就是采用一个事件总线实现报警的推送,但是并未对其进行超时分级发送) 这个自然是错误的,我其实当时也想过使用Timer,但是内心对Timer就是感觉用性能做代价去换取最终的结果。 解析需求 过了几天还是觉得要手纯撸代码将上面功能撸出来,不然如何成长呢! 拆分下需求可以得到的消息是有一个事件。这个事件就是报警事件,通过报警事件需要将消息推送给不同职位的工作人员,而且必须遵循岗位从下至上,但凡人员收到报警消息则表示报警通知已完成,其次就是有一个三分钟需要处理。 通过上面的需求分析可以知道我们必须要定义一个枚举,记录职称高低。 /// <summary> /// 工作级别 /// </summary

2019前端面试系列——JS高频手写代码题

允我心安 提交于 2020-04-18 08:40:09
实现 new 方法 /* * 1.创建一个空对象 * 2.链接到原型 * 3.绑定this值 * 4.返回新对象 */ // 第一种实现 function createNew() { let obj = {} // 1.创建一个空对象 let constructor = [].shift.call(arguments) // let [constructor,...args] = [...arguments] obj.__proto__ = constructor.prototype // 2.链接到原型 let result = constructor.apply(obj, arguments) // 3.绑定this值 // let result = constructor.apply(obj, args) return typeof result === 'object' ? result : obj // 4.返回新对象 } function People(name,age) { this.name = name this.age = age } let peo = createNew(People,'Bob',22) console.log(peo.name) console.log(peo.age) 实现 Promise // 未添加异步处理等其他边界情况 //