最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客中也有大量介绍.EventStore是在Event Sourcing(下面简称ES)模式中,用于存储事件用的.从DDD的角度来说,每个聚合根在自己的状态发生变化时都会产生一个或多个领域事件,我们需要把这些事件持久化起来.然后当我们需要恢复聚合根的最新状态到内存时,可以通过ES这种技术,从EventS…
大家好,我叫汤雪华.我平时工作使用Java,业余时间喜欢用C#做点开源项目,如ENode, EQueue.我个人对DDD领域驱动设计.CQRS架构.事件溯源(Event Sourcing,简称ES).事件驱动架构(EDA)这些领域比较感兴趣.我希望把自己所学的知识能否分享给大家,所以,把这个领域里的一些知识串联了起来,整理了一个PPT,并为每张PPT配备注释,分享给大家.希望能对这个领域有兴趣的朋友有所帮助. 上面的提纲是今天主要分享的内容概要.开始之前想先说一下微服务架构和CQRS架构的区别和…
庐山真面目之八微服务架构 NetCore 基于 Dockerfile 文件部署 一.简介      从今天开始,不出意外的话,以后所写的文章中所介绍项目的部署环境都应该会迁移到Linux环境上,而且是基于Docker容器部署Net Core的项目.但是,也有可能写一些基于Windows环境的测试类型的文章,如果是这样,我会做特殊说明的.前几期有关微服务架构的文章都是基于Windows 环境搭建的,在正式的生产环境中肯定是不可取的,所以我们也要开始部署环境的迁移.今天这篇文章是作为打基础系列中的第…
Maven作为一个十分流行的项目管理工具,在我们的项目变得逐渐复杂的时候,可以有效的降低项目管理难度. 聚合工程就是当项目到达一定规模时,十分有效的管理子项目和模块的方法. 首先介绍一下,在大型项目中,maven管理的一种架构,如下图: pom类型的工程一般只负责整体的控制,如果你对pom工程进行install,你会发现maven不会下载你定义的jar,只会下载插件. 在上面的架构中,使用一个parent来控制所有的版本.有人可能会有疑问,为什么不直接在一个jar工程里把项目的共有依赖和版本信息…
一.实验背景 最近在考虑一个问题:“如果快速地向文件中写入数据”,java提供了多种文件写入的方式,效率上各有异同,基本上可以分为如下三大类:字节流输出.字符流输出.内存文件映射输出.前两种又可以分为带buffer及不带buffer. 二.实验目标 通过实验找出单线程场景下文件写入效率最高的方式,并量化各种文件写入方式在效率上的差距. 三.实验设计 为减少其他环节的影响,示例代码使用循环输出同一字符串多次的方式测试整个输出环节的耗时,通过耗时.服务器资源使用情况(cpu.内存使用)等指标评判各种…
一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已经完成,在通常的情况下,开发人中都是在使用者B所使用的程序之中写数据库轮循代码,这样就会产品一个很严重的两个问题,第一个问题是延迟,轮循机制要定时执行,必须会引起延迟,第二个问题是数据库压力过大,当进行高频度的轮循会生产大量的数据库查询,并且如果有大量的使用者进行轮循,那数据库的压力就更大了. 那么在这个时间,就需要一套能支持发布-订阅模式的分布式消…
1 为什么是使用swagger? 1-1 当后台开发人员开发好接口,是不是还要重新书写一份接口文档提给前端人员,当然对于程序员最不喜欢的就是书写文档(当然文档是必须的,有利于项目的维护) 1-2 当后台人员开发接口,当然后台开发者也是需要测试好接口是否可用,当参数少的时候测试还不是很麻烦,当参数有十多个的时候,就需要后台开发者一个一个的拼接参数,很是耗时间而且还容易写错参数名,swagger就很好解决了这个问题(当然也是可以借助其他插件:rest-client工具,PostMan) 2 搭建环境…
以下是一些依据经常使用java类进行组装的对文件进行操作的类,平时,我更喜欢使用Jodd.io中提供的一些对文件的操作类,里面的方法写的简单易懂. 当中jodd中提供的JavaUtil类中提供的方法足够我们使用,里面的方法写的很简练,比如append,read等方法,封装更好,更符合面向对象, 这里面我写的一些方法可多都是模仿jodd,从里面进行抽取出来的. /** * 获取路径目录下的全部文件 * @param path * @return */ public static File[] ge…
1.首先,File->new->project ,进入新增项目页面 或者在 2.勾选spring,然后点击下一步 3.修改项目名称和项目位置 进入页面后 5.创建一个spring配置文件 6.创建Person类 7.配置bean, <bean></bean>,name对应属性,value赋值 8.测试类,配置文件名和id不能错. 补充: 1.还有一种用构造器来配置的用法,这里会默认与实体类person中的构造方法一致,另外要注意使用构造器配置,实体类中需要有构造方法,否…