Reactor是用于处理多个客户端的请求的设计模式。应用程序提供的每一种服务都可能包括多个方法,并且有必要为这每一个服务分配独立的请求处理器(也可以说是 event handler)。对于Event handler的调度是有Dispatcher来执行的,这个Dispatcher可以管理event handler的注册工作。而分离器Demultiplexer则将一个服务分成了多份。这段话看起来还是不那么容易理解的。 我对这段话的理解是:应用程序提供多种服务,而每一种服务都会分为多步骤(或者多类别)进行。这里将每一步都作为一个事件,那么每一步的处理就认为是一个event handler。Dispatcher管理这多个步骤的处理器,也即dispatcher管理着多个Event Handler。而将一个服务处理分为多步骤(多个类别)的处理的工作则是有分离器来完成。
Apache Camel主要提供了以下功能: 1,实现了EIP的大部分模式,如果你要在不同的应用系统之间以不同的方式传递消息,那么你可以从Apache Camel中找到解决反感。 2,提供了大量Component(组件),每个组件都是一种消息中间件(或消息服务)的具体实现,每个消息中间件所用的协议都是不同的,因此,你可以通过多种不同的协议来完成消息传输。(http、tcp、ftp、kafka等消息可以互相转换、编排 传输) 3,允许用户定义灵活的路由规则,从这个角度来说,Apache Camel是一个规则引擎。
分布式任务调度框架ElasticJobElastic-job总共提供了三种类型的定时任务:Simple类型定时任务、Dataflow类型定时任务和Script类型定时任务。其中,Script类型作业意为脚本类型作业,支持shell,python和perl等所有类型脚本,应用得不太多。SimpleJob需要实现SimpleJob接口,是未经过任何封装的定时任务简单实现,与quartz原生接口相似,下面示例中用的就是该类型的Job。Dataflow类型的定时任务主要用于处理数据流,需实现DataflowJob接口。该接口可以提供2个方法可供覆盖,分别用于抓取(fetchData)和处理(processData)数据。这个框架的任务分派,简单来说就是,通过zookeeper知道线上总共有多少台执行机器,然后把分片平均分到线上的机器上,而每次机器的上线、下线都会触发分片的重新分配。 而分片其实就是数字,数字将平均分配到几台机器上,例如: 设置总分片数为4片(0,1,2,3总共4个分片),线上2台机器,机器A可能被分配到0、1两个数字,机器B被分配到2、3两个数字
该源码中,通过启动tcp server 实现http协议的访问,通过扫描RequestPath注解,将该注解的类实例和方法、类路径和RequestPath值(访问路径)等封装在map中做对应关系,同时模拟http协议中的session机制(通过google guava管理session缓存,注意这里的无session对象 tio-h-s为session的名字,GuavaCache guavaCache = GuavaCache.register(httpConfig.getSessionCacheName(), null, httpConfig.getSessionTimeout());底层为 google guava的loadingCache缓存封装到GuavaCache,作为GuavaCache对象中的一个属性,将key:session名字 (tio-h-s) guavaCache为value,封装在map中,这样tio-h-s对应一个loadingCache)
https://blog.csdn.net/qq_25806863/article/details/71126867 有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长。而且当线程数量太多时,系统不一定能受得了。 使用线程池主要为了解决一下几个问题: 通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销。 对线程进行一些维护和管理,比如定时开始,周期执行,并发数控制等等。 corePoolSize 核心线程数,默认情况下核心线程会一直存活,即使处于闲置状态也不会受存keepAliveTime限制。除非将allowCoreThreadTimeOut设置为true。 maximumPoolSize 线程池所能容纳的最大线程数。超过这个数的线程将被阻塞。当任务队列为没有设置大小的LinkedBlockingDeque时,这个值无效。 keepAliveTime 非核心线程的闲置超时时间,超过这个时间就会被回收。 unit
rocketMQ作为一款分布式的消息中间件,RocketMQ作为一款分布式的消息中间件(阿里的说法是不遵循任何规范的,所以不能完全用JMS的那一套东西来看它),经历了Metaq1.x、Metaq2.x的发展和淘宝双十一的洗礼,在功能和性能上远超ActiveMQ。 1.要知道RocketMQ原生就是支持分布式的,而ActiveMQ原生存在单点性。 2.RocketMQ可以保证严格的消息顺序,而ActiveMQ无法保证! 3.RocketMQ提供亿级消息的堆积能力,这不是重点,重点是堆积了亿级的消息后,依然保持写入低延迟! 4.丰富的消息拉取模式(Push or Pull) Push好理解,比如在消费者端设置Listener回调;而Pull,控制权在于应用,即应用需要主动的调用拉消息方法从Broker获取消息,这里面存在一个消费位置记录的问题(如果不记录,会导致消息重复消费)。
springcloud-server-config 访问http://localhost:7020/hi client-config中的bootstrap.properties属性spring.application.name对应git仓库中的文件名称,spring.application.name=lisiService,spring.cloud.config.profile为git文件中的后缀,当某个client需要多个文件时,spring.cloud.config.profile后缀可以用“,”隔开spring.cloud.config.profile=dev,prod ,(表示加载 lisiService.dev,lisiService.prod 两个文件, spring.application.name 多个文件名称,也用“,”隔开,例如lisiService,test,win
Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定的模块。https://www.cnblogs.com/h--d/p/6001366.html 例子