SpringBootdisruptor高性能队列使用.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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)

152****4498 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档