事件类
package com.qb.loan.disruptor.multitype;
public class Event {
//事件类型
private String eventType;
//事件key
private String key;
//事件value
private Object value;
public String getEventType() {
return eventType;
}
public void setEventType(String type) {
this.eventType = type;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
事件工厂
package com.qb.loan.disruptor.multitype;
import com.lmax.disruptor.EventFactory;
public class DefaultEventFactory implements EventFactory<Event>{
@Override
public Event newInstance() {
return new Event();
}
}
eventHandler事件处理类
package com.qb.loan.disruptor.multitype;
public class PayplanEventHandler{
public void onEvent(Event event){
try{
System.out.println("XXXXXXXXXXXXXXXXXXXXX" + event.getKey() + "--" +Thread.currentThread().getId());
}catch(Exception e){
}
}
}
workhandler消费者封装类
package com.qb.loan.disruptor.multitype;
import com.lmax.disruptor.WorkHandler;
public class FbWorkHandler implements WorkHandler<Event>{
@Override
public void onEvent(Event event) throws Exception {
String type = event.getEventType();
PayplanEventHandler handler = new PayplanEventHandler();
handler.onEvent(event);
}
}
主测试类
package com.qb.loan.disruptor.multitype;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import com.lmax.disruptor.BlockingWaitStrategy;
import com.lmax.disruptor.EventTranslator;
import com.lmax.disruptor.RingBuffer;
import com.lmax.disruptor.dsl.Disruptor;
import com.lmax.disruptor.dsl.ProducerType;
public class Main {
public static void main(String[] args){
ThreadPoolExecutor executor = (ThreadPoolExecutor)Executors.newFixedThreadPool(10);
int ringBufferSize = 32;
Disruptor<Event> disruptor = new Disruptor<Event>(new DefaultEventFactory(),ringBufferSize,executor, ProducerType.MULTI,new BlockingWaitStrategy());
FbWorkHandler handler = new FbWorkHandler();
FbWorkHandler[] arr = new FbWorkHandler[10];
for(int i=0;i<10;i++){
arr[i] = handler;
}
disruptor.handleEventsWithWorkerPool(arr);
RingBuffer<Event> ringBuffer = disruptor.start();
for(int i=0;i<100;i++){
final String str = i+"";
ringBuffer.publishEvent(new EventTranslator<Event>(){
@Override
public void translateTo(Event event, long sequence) {
event.setEventType("1");
event.setKey(str);
event.setValue("XXXXXXXXXXX");
}
});
System.out.println("================"+ringBuffer.remainingCapacity()+" "+i);
}
disruptor.shutdown();
}
}