xwayway / weechang.github.io Goto Github PK
View Code? Open in Web Editor NEW千刀
Home Page: https://blog.weechang.xyz
千刀
Home Page: https://blog.weechang.xyz
https://blog.weechang.xyz/2018/07/30/java%E5%9F%BA%E7%A1%80-2%E2%80%94%E2%80%94HashMap%E7%B1%BB/
一、原理实现hashMap的本质是一个数组,数组中每一个元素称为一个Node,Node中存放的是hash值与链表(或红黑树)的键值对。hashMap的存储过程如下:根据 key 计算出它的哈希值 h。假设Node的个数为 n,那么这个键值对应该放在第 (h % n) 个Node中。
JGroupsConnectorJGroupsConnector使用(正如它的名字已经说明)JGroups作为底层发现和调度机制。描述JGroups的特性有太多的参考指南,请参阅JGroups用户指南以了解更多的细节。
https://blog.weechang.xyz/2018/08/21/AxonFramework%E5%91%BD%E4%BB%A4%E6%A8%A1%E5%9E%8B/
在一个基于CQRS的应用程序中,领域模型(由Eric Evans和Martin Fowler定义)可以是一个非常强大的机制,来驾驭在验证和执行状态的变化时所涉及的复杂性,虽然典型的领域模型提供了大量的构建块,但当在CQRS中应用命令处理时有一个构件起着主导性的作用:聚合。
https://blog.weechang.xyz/2018/07/30/Java%E9%9B%86%E5%90%88-0%E2%80%94%E2%80%94HashMap%E7%B1%BB/
一、原理实现hashMap的本质是一个数组,数组中每一个元素称为一个Node,Node中存放的是hash值与链表(或红黑树)的键值对。hashMap的存储过程如下:根据 key 计算出它的哈希值 h。假设Node的个数为 n,那么这个键值对应该放在第 (h % n) 个Node中。
与命令处理组件类似,saga有一个明确定义的接口:它们只对事件作出响应。另一方面,saga通常具有时间概念,并且可以作为事件处理过程的一部分与其他组件交互。Axon Framework的测试支持模块包含帮助你编写saga测试的固件。
https://blog.weechang.xyz/2018/08/27/AxonFramework%E4%BA%8B%E4%BB%B6%E5%A4%84%E7%90%86/
saga中的事件处理非常接近一个普通的事件监听器。上述的对于方法和参数解析的规则在这里是有效的。不过,有一个主要区别。虽然存在事件监听器只有单个实例处理所有传入事件,但也存在一个saga有多个实例,每个实例都对不同的事件感兴趣。例如,关于Order的id为1的管理业务Saga对Order“2”的事件不感兴趣,反之亦然。
https://blog.weechang.xyz/2018/08/31/AxonFramework-%E5%91%BD%E4%BB%A4%E6%80%BB%E7%BA%BF/
命令总线是将命令分发给各自的命令Handler的机制。每个命令总是被精确发送到一个命令Handler。如果没有可用的命令Handler为已分发的命令,将会抛出NoHandlerForCommandException异常。对同一命令类型订阅多个命令Handler将导致订阅互相取代。在这种情况下,最后一个订阅获胜。
https://blog.weechang.xyz/2018/08/29/AxonFramework%E6%B5%8B%E8%AF%95/#more
CQRS最大的好处之一,尤其是事件溯源就事件和命令而言,单纯地表达测试是可能的。这两个功能组件,事件和命令对领域专家或业务所有者都有明确的含义。这不仅意味着测试表达就事件和命令而言有明确的功能含义,这也意味着他们不依靠任何实现选择。
https://blog.weechang.xyz/2018/08/20/AxonFramework%E9%85%8D%E7%BD%AE/
获得一个默认的配置是非常容易的:Configuration config = DefaultConfigurer.defaultConfiguration().buildConfiguration();
神说要有光,于是便有了光写代码的,偶尔都想装点逼,想要自己写点博客。刚开始还能在各大社区写,比如说CSDN,开源**,博客园什么的。但是越写就会越觉得,那些博客平台都不是自己想要的,虽然大平台,能够提高在搜索引擎的收录,但是我看着别人的博客,我也想要有一个自建的博客系统。于是开始了自建博客的入坑之旅,在这儿给大伙分享一下我的自建博客历程。
https://blog.weechang.xyz/2018/07/31/java%E5%9F%BA%E7%A1%80-3%E2%80%94%E2%80%94HashTable%E7%B1%BB/
一、简介和HashMap一样,HashTable 也是一个散列表,它存储的内容是键值对(key-value)映射。HashTable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。HashTable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。此外,HashTable中的映射不是有序的。
除了存储一个聚合的当前状态,还可以根据过去发布的事件恢复一个聚合的状态。为此,所有状态的更改必须由一个事件来表示。
https://blog.weechang.xyz/2018/08/31/AxonFramework-EventStore%E5%AE%9E%E7%8E%B0/
事件溯源存储库需要一个事件存储(event store)从聚合中存储和加载事件。事件存储提供了一个事件总线的功能,增加了持久化已发布的事件,并能够基于聚合标识符检索事件。
https://blog.weechang.xyz/2018/08/20/AxonFramework%E5%B7%A5%E4%BD%9C%E5%8D%95%E5%85%83/
工作单元是Axon Framework的一个重要的概念,虽然在大多数情况下你可能不太直接与它交互。消息的处理被视为一个独立单元。工作单元的目的是在处理一条消息(命令或事件)期间去协调行为的执行。组件可以在工作单元每一个阶段执行注册行为,如onPrepareCommit或onCleanup。 你可能不太需要直接访问工作单元,主要使用Axon提供的构件来访问。不管出于什么原因,如果你需要访问它,有几种
https://blog.weechang.xyz/2018/08/17/AxonFramework%E7%AE%80%E4%BB%8B/
Axon是一个轻量级框架,能够帮助开发者通过在架构层面构建可扩展和可伸缩的应用。(注:以DDD面向领域驱动设计为基础的CQRS框架)
https://blog.weechang.xyz/2018/08/27/AxonFramework%E4%BA%8B%E4%BB%B6%E5%A4%84%E7%90%86/
saga中的事件处理非常接近一个普通的事件监听器。上述的对于方法和参数解析的规则在这里是有效的。不过,有一个主要区别。虽然存在事件监听器只有单个实例处理所有传入事件,但也存在一个saga有多个实例,每个实例都对不同的事件感兴趣。例如,关于Order的id为1的管理业务Saga对Order“2”的事件不感兴趣,反之亦然。
并不是每个命令都能够在一个ACID事务中完全执行。现金转账事务是一个很常见频繁出现的例子,用来作为论据。通常认为,把钱从一个账户转移到另一个账户,绝对需要原子性和一致性。其实并非如此,相反,这是完全不可能的。如果钱从A银行的帐户转移到B银行的帐户怎么办?A银行要获得B银行数据库的锁吗?如果转账正在进行的时候,A银行已经扣除了金额,但B银行并没收到它,这不是很奇怪吗?事实上不是,这是“正在进行”。另
消息传送的概念消息是Axon的核心概念之一。组件之间的所有通信都使用消息对象完成。这为这些组件提供了位置透明性,在必要时需要能够进行扩展和分发这些组件。 尽管所有这些消息都实现了消息接口,但不同类型的消息及其处理方式之间有明显的区别。所有消息包含payload、元数据和唯一标识符。消息的payload是消息的功能说明。该对象的类名组合与它所携带的数据,描述了消息的应用程序的含义。元数据允许你描述正
建议在包含处理状态命令的聚合中直接定义命令处理器,因为命令处理器有可能需要该集合的状态来执行其任务。
https://blog.weechang.xyz/2018/07/30/Java%E9%9B%86%E5%90%88-0%E2%80%94%E2%80%94HashMap%E7%B1%BB/
一、原理实现hashMap的本质是一个数组,数组中每一个元素称为一个Node,Node中存放的是hash值与链表(或红黑树)的键值对。hashMap的存储过程如下:根据 key 计算出它的哈希值 h。假设Node的个数为 n,那么这个键值对应该放在第 (h % n) 个Node中。
XStream序列化器XStream是完全可配置和可扩展的。如果你只使用一个无格式XStreamSerializer,有一些速效方案随时取用。
与命令处理组件类似,saga有一个明确定义的接口:它们只对事件作出响应。另一方面,saga通常具有时间概念,并且可以作为事件处理过程的一部分与其他组件交互。Axon Framework的测试支持模块包含帮助你编写saga测试的固件。
记录下ElasticSearch查询报错的解决方案,今天在java中查询ElasticSearch的数据发生报错。
https://blog.weechang.xyz/2018/08/31/AxonFramework-%E5%91%BD%E4%BB%A4%E6%8B%A6%E6%88%AA%E5%99%A8/
使用命令总线的优点之一,是能够基于所有传入的命令采取相应的行动。例子是,不论哪种命令类型,你都希望去做日志记录或身份验证。这是使用拦截器来完成的。
https://blog.weechang.xyz/2018/06/07/java%E5%9F%BA%E7%A1%80-0%E2%80%94%E2%80%94Object%E7%B1%BB/
从这篇文章起就正式开始Java学习之旅了。java中,万物皆对象,所以第一篇先学习Java的Object类,循序渐进。
最近需要做项目,遇到一个需要查询表中的某一列,其数据结构为多个id间用“,”隔开的字符串。需要判断是否包含某一个id,最开始想的是用like查询,但是转念一想,like查询会存在查询id为1的时候,11、12这样的数据也会被查询出来,后来开始寻找其他方法,找到了find_in_set(str, Strs)函数。然后就对MySql中字符串查询的函数一起做一个总结。
当有事发生时,很容易使一个saga采取行动。毕竟,有一个事件要通知saga。但是如果你想让你的saga,在什么事情都没发生的情况下做些什么呢?这就是最后期限。在发票中,通常是几周,而信用卡支付的确认可能在几秒钟内。
除了存储一个聚合的当前状态,还可以根据过去发布的事件恢复一个聚合的状态。为此,所有状态的更改必须由一个事件来表示。
https://blog.weechang.xyz/about/
我是耒耒耒耒耒(张未)。欢迎来到我的个人技术博客。目前主要做Java后端开发,同时兼顾一些Vue页面的开发,对领域驱动较为感兴趣。
https://blog.weechang.xyz/2018/08/31/AxonFramework-%E5%88%86%E5%8F%91%E4%BA%8B%E4%BB%B6/
在某些情况下,有必要发布事件到外部系统,比如消息broker。
事件需要被重定向到适当的saga实例。为此,一些基础设施类是必需的。最重要的组件是SagaManager和SagaRepository。
前言最近闲下来了,想要自己造点小轮子用,方便自己在不同项目使用,同时想偷懒,不想每次都在项目里面copy代码。于是想到了重要仓库这个东西,把自己的代码托管到github(虽然现在的github已经不再单纯),然后发布jar包到maven**仓库,以后每个项目都只用引入maven依赖就可以了。同时还能方便好基友们使用,万一哪一天好基友高兴就献身了呢,想想就有点小激动呢。好了废话不多说,下面正式开始手把手教学活动。
https://blog.weechang.xyz/2018/08/31/AxonFramework-%E5%AD%98%E5%82%A8%E5%BA%93/
存储库是提供对聚合访问的机制。存储库充当了用于保存数据的实际存储机制的网关。在CQRS中,存储库只需要能够根据他们的惟一标识符找到聚合。任何其他类型的查询,应该在查询数据库中执行。
https://blog.weechang.xyz/2018/06/08/java%E5%9F%BA%E7%A1%80-1%E2%80%94%E2%80%94String%E7%B1%BB/
一、简介1.1 成员变量 public final class String implements java.io.Serializable, Comparable, CharSequence { private final char value[]; private int hash; // Default to 0 private
当有事发生时,很容易使一个saga采取行动。毕竟,有一个事件要通知saga。但是如果你想让你的saga,在什么事情都没发生的情况下做些什么呢?这就是最后期限。在发票中,通常是几周,而信用卡支付的确认可能在几秒钟内。
并不是每个命令都能够在一个ACID事务中完全执行。现金转账事务是一个很常见频繁出现的例子,用来作为论据。通常认为,把钱从一个账户转移到另一个账户,绝对需要原子性和一致性。其实并非如此,相反,这是完全不可能的。如果钱从A银行的帐户转移到B银行的帐户怎么办?A银行要获得B银行数据库的锁吗?如果转账正在进行的时候,A银行已经扣除了金额,但B银行并没收到它,这不是很奇怪吗?事实上不是,这是“正在进行”。另
由于软件应用程序的不断变化的性质,很可能事件定义也随着时间而变化。由于事件存储被认为是只读和只追加(没有修改和删除)的数据源,所以应用程序必须能够读取所有事件,而不管它们何时添加。这时upcasting 出现了。
由应用程序生成的事件需要被分发到更新查询数据库的组件,搜索引擎或其他需要它们的资源:事件处理程序(Event Handlers)。事件总线(Event Bus)的职责是分发事件消息到所有感兴趣的组件。接收端,事件处理器(Event Processors)负责处理这些事件,其中包括相应的事件处理程序(Event Handlers)的调用。
由于最近想要将AxonFrameWork的官方英文文档翻译成中文。为了方便自己及广大爱好者浏览,决定制作成在线电子书的形式。于是想到了GitBook,在此将自己的GitBook制作之路记录下来,留给有需要的朋友。
https://blog.weechang.xyz/2018/08/31/AxonFramework-%E9%AB%98%E7%BA%A7%E5%AE%9A%E5%88%B6/
参数解析器你可以配置额外的ParameterResolvers,通过扩展ParameterResolverFactory类和创建一个名为/META-INF/service/org.axonframework.common.annotation.ParameterResolverFactory的文件,包含实现类的完全限定名称。
https://blog.weechang.xyz/2018/08/31/AxonFramework-SpringBoot%E8%87%AA%E5%8A%A8%E9%85%8D%E7%BD%AE/
Axon支持的SpringBoot自动配置是迄今为止开始配置Axon基础设施组件最简单的选择。只需添加axon-spring-boot-starter依赖性,Axon会自动配置基础设施组件(命令总线,事件总线),以及运行和储存聚合和Saga所需的任何组件。
https://blog.weechang.xyz/2018/08/31/AxonFramework-Snapshotting/
当聚合存活很长一段时间,它们的状态不断变化,它们会生成大量的事件。不得不加载所有这些事件去复原一个聚合的状态,可能会有很大的性能影响。快照事件是一个有着特殊用途的领域事件:它将任意数量的事件归纳为单个事件。通过定期创建和存储快照事件,事件存储不必返回长的事件列表。只返回最后一个快照事件和在快照之后发生的所有事件
https://blog.weechang.xyz/2018/08/17/AxonFramework%E6%9E%B6%E6%9E%84%E6%A6%82%E8%BF%B0/
CQRS本身是一个非常简单的模式。它只规定了处理命令的应用程序的组件应该与处理查询 的组件分离。 虽然这种分离本身非常简单,但它与其他模式结合时提供了许多非常强大的功能。Axon 提供的构件更容易实现不同的模式与CQRS的结合。
https://blog.weechang.xyz/2018/08/17/AxonFramework%E6%9E%B6%E6%9E%84%E6%A6%82%E8%BF%B0/
CQRS本身是一个非常简单的模式。它只规定了处理命令的应用程序的组件应该与处理查询 的组件分离。 虽然这种分离本身非常简单,但它与其他模式结合时提供了许多非常强大的功能。Axon 提供的构件更容易实现不同的模式与CQRS的结合。
https://blog.weechang.xyz/2018/08/31/AxonFramework-%E9%AB%98%E7%BA%A7%E5%AE%9A%E5%88%B6/
参数解析器你可以配置额外的ParameterResolvers,通过扩展ParameterResolverFactory类和创建一个名为/META-INF/service/org.axonframework.common.annotation.ParameterResolverFactory的文件,包含实现类的完全限定名称。
建议在包含处理状态命令的聚合中直接定义命令处理器,因为命令处理器有可能需要该集合的状态来执行其任务。
事件需要被重定向到适当的saga实例。为此,一些基础设施类是必需的。最重要的组件是SagaManager和SagaRepository。
XStream序列化器XStream是完全可配置和可扩展的。如果你只使用一个无格式XStreamSerializer,有一些速效方案随时取用。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.