Java 如何使用具有多种消息类型的中断器
我的系统有两种不同类型的消息-类型A和B。每条消息都有不同的结构-类型A包含一个int成员,类型B包含一个double成员。我的系统需要将这两种类型的消息传递给许多业务逻辑线程。减少延迟非常重要,因此我正在研究使用中断器以机械方式将消息从主线程传递到业务逻辑线程 我的问题是,中断器只接受环形缓冲区中的一种类型的对象。这是有意义的,因为中断器预先分配了环形缓冲区中的对象。然而,这也使得通过中断器向业务逻辑线程传递两种不同类型的消息变得困难。据我所知,我有四个选择:Java 如何使用具有多种消息类型的中断器,java,multithreading,performance,messaging,disruptor-pattern,Java,Multithreading,Performance,Messaging,Disruptor Pattern,我的系统有两种不同类型的消息-类型A和B。每条消息都有不同的结构-类型A包含一个int成员,类型B包含一个double成员。我的系统需要将这两种类型的消息传递给许多业务逻辑线程。减少延迟非常重要,因此我正在研究使用中断器以机械方式将消息从主线程传递到业务逻辑线程 我的问题是,中断器只接受环形缓冲区中的一种类型的对象。这是有意义的,因为中断器预先分配了环形缓冲区中的对象。然而,这也使得通过中断器向业务逻辑线程传递两种不同类型的消息变得困难。据我所知,我有四个选择: 将中断器配置为使用包含固定大小字
public enum MyEventEnum {
EVENT_TIMER,
EVENT_MARKETDATA;
}
public class RingBufferEventHolder {
private MyEventEnum;
private EventBase array[];
public RingBufferEventHolder() {
array=new EventBase[MyEventEnum.values().length];
}
// TODO: null the rest
public void setEvent(EventBase event) {
type=event.getType();
switch( event.getType() ) {
case EVENT_TIMER:
array[MyEventEnum.EVENT_TIMER.ordinal()]=event;
break;
case EVENT_MARKETDATA:
array[MyEventEnum.EVENT_MARKETDATA.ordinal()]=event;
break;
default:
throw new RuntimeException("Unknown event type " + event );
}
}
EventBase newEvent=new EventMarketData(....);
// prepare
long nextSequence = ringBuffer.next();
RingBufferEventHolder holder = ringBuffer.get(nextSequence);
holder.setEvent(newEvent);
// make the event available to EventProcessors
ringBuffer.publish(nextSequence);
public enum ExchangeEventType{
PLACE_ORDER, // -> OrderEvent
CANCEL_ORDER, // -> OrderEvent
MARKET_FEED, // -> MarketEvent
MARKET_UPDATE, // -> MarketEvent
ADD_USER, // -> AccountEvent
SUSPEND_USER, // -> AccountEvent
RESUME_USER // -> AccountEvent
}
public ExchangeEvent{
private EventType type;
private EventResultCode resultCode;
private long timestamp;
// event type objects
private OrderEvent orderEvent;
private MarketEvent marketEvent;
private AccountEvent accountEvent;
}