disruptor 单生产者多消费者

匿名 (未验证) 提交于 2019-12-02 23:38:02

demo1 单生产者多消费者创建。

maven 依赖

    <dependency>         <groupId>com.lmax</groupId>         <artifactId>disruptor</artifactId>         <version>3.4.2</version>     </dependency> 

1 对象 - Message

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Message2 {
private String id;
private String name;
private double price;
}

2 在主函数中创建 disruptor

Disruptor disruptor = new Disruptor<>(
new EventFactory() {
@Override
public Message2 newInstance() {
return new Message2();
}
},
1 << 10,
Executors.defaultThreadFactory(),
ProducerType.SINGLE,
new BusySpinWaitStrategy()
);

3 disruptor 绑定消费者

// disruptor 绑定消费者
disruptor.handleEventsWith(new MessageHandler1());

//创建消费者
@Slf4j
public class MessageHandler1 implements EventHandler {
@Override
public void onEvent(Message2 event, long sequence, boolean endOfBatch) throws Exception {
event.setId(UUID.randomUUID().toString());
log.info("【handler1,set id】 id: {}, name: {}, price: {}", event.getId(), event.getName(), event.getPrice());
}
}

4 启动 disruptor

RingBuffer ringBuffer = disruptor.start();

5 disruptor 绑定生产者

//绑定生产者
CountDownLatch latch = new CountDownLatch(1);
ExecutorService es = Executors.newFixedThreadPool(4);
es.submit(new MessagePublish2(disruptor, latch));

// 生产者类
public class MessagePublish2 implements Runnable {
private Disruptor disruptor;
private CountDownLatch latch;

public MessagePublish2(Disruptor<Message2> disruptor, CountDownLatch latch) {     this.disruptor = disruptor;     this.latch = latch; }  @Override public void run() {     for (int i = 0; i < 3; i++) {         disruptor.publishEvent(new MessageEventTranslator());     }     latch.countDown(); } 

}

6 阻塞等待 & 关闭服务

    // 阻塞等待     latch.await();      // 关闭服务     es.shutdown();     disruptor.shutdown(); 

深圳网站建设https://www.sz886.com

文章来源: https://blog.csdn.net/chenmh12/article/details/90768311
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!