- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
SpringBootdisruptor高性能队列使用
目录1、Disruptor简介2、Disruptor概念3、springboot+disruptor实例4、小结Disruptor是一个高性能队列,常见的还有kafka、rabbitmq等,下面体验一下~
1、Disruptor简介
Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。
其特点简单总结如下:
开源的java框架,用于生产者-消费者场景;高吞吐量和低延迟;有界队列;
disruptor在github网址为:/LMAX-Exchange/disruptor
2、Disruptor概念
RingBuffer:环形的缓冲区,环形数组中的元素采用覆盖方式,避免了jvm的GC;SequenceDisruptor:通过顺序递增的序号来编号管理通过其进行交换的数据(事件),对数据(事件)的处理过程总是沿着序号逐个递增处理;Sequencer:Sequencer是Disruptor的真正核心。此接口有两个实现类SingleProducerSequencer、MultiProducerSequencer,它们定义在生产者和消费者之间快速、正确地传递数据的并发算法;SequenceBarrier:用于保持对RingBuffer的mainpublishedSequence和Consumer依赖的其它Consumer的Sequence的引用;WaitStrategy:定义Consumer如何进行等待下一个事件的策略;Event:在Disruptor的语义中,生产者和消费者之间进行交换的数据被称为事件(Event)。它不是一个被Disruptor定义的特定类型,而是由Disruptor的使用者定义并指定;EventProcessor:EventProcessor持有特定消费者(Consumer)的Sequence,并提供用于调用事件处理实现的事件循环(EventLoop);EventHandler:定义的事件处理接口,由用户实现,用于处理事件,是Consumer的真正实现;Producer:生产者,只是泛指调用Disruptor发布事件的用户代码,Disruptor没有定义特定接口或类型;
3、springboot+disruptor实例
在pom.xml文件中添加依赖
dependency
groupIdcom.lmax/groupId
artifactIddisruptor/artifactId
version3.3.4/version
/dependency
消息体Model
@Data
publicclassMessageModel{
privateStringmessage;
构造EventFactory
publicclassHelloEventFactoryimplementsEventFactoryMessageModel{
@Override
publicMessageModelnewInstance(){
returnnewMessageModel();
构造消费者
@Slf4j
publicclassHelloEventHandlerimplementsEventHandlerMessageModel{
@Override
publicvoidonEvent(MessageModelevent,longsequence,booleanendOfBatch){
try{
//这里停止1000ms是为了确定消费消息是异步的
Thread.sleep(1000);
(消费者处理消息开始);
if(event!=null){
(消费者消费的信息是:{},event);
}catch(Exceptione){
(消费者处理消息失败);
(消费者处理消息结束);
构造MQManager
@Configuration
publicclassMqManager{
@Bean(messageModel)
publicRingBufferMess
有哪些信誉好的足球投注网站
文档评论(0)