多类型任务处理

事件类
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(); 
	}
}

发布了177 篇原创文章 · 获赞 14 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/qian_348840260/article/details/80655133
今日推荐