public void MatchFound( EventBean theEvent, ICollection<FilterHandleCallback> allStmtMatches) { if (collector != null) { var holder = new EPDataFlowEventBeanCollectorContext(graphContext, factory.IsSubmitEventBean, theEvent); collector.Collect(holder); } else if (factory.IsSubmitEventBean) { emittables.Push(theEvent); } else { emittables.Push(theEvent.Underlying); } }
public void TestPerformance() { int numEvents = 1; int numThreads = 2; Configuration config = new Configuration(); config.EngineDefaults.Threading.IsListenerDispatchPreserveOrder = false; EPServiceProvider engine = EPServiceProviderManager.GetDefaultProvider(config); engine.EPAdministrator.Configuration.AddEventType(typeof(TransactionEvent)); engine.EPAdministrator.Configuration.AddPlugInSingleRowFunction("MyDynModel", GetType().FullName, "MyDynModel"); String epl = "select MyDynModel({Col_001, Col_002, Col_003}) as model_score from TransactionEvent"; EPStatement stmt = engine.EPAdministrator.CreateEPL(epl); stmt.Subscriber = new MySubscriber(); var queue = new LinkedBlockingQueue <Runnable>(); var latch = new CountDownLatch(numEvents); for (int i = 0; i < numEvents; i++) { queue.Push((new MyRunnable(engine.EPRuntime, latch, new TransactionEvent(1, 2, 3))).Run); } var threads = Executors.NewFixedThreadPool(numThreads); var delta = PerformanceObserver.TimeMillis( () => { for (int ii = 0; ii < numThreads; ii++) { threads.Submit( () => { Runnable runnable; while (queue.Pop(0, out runnable)) { runnable.Invoke(); } }); } //ThreadPoolExecutor threads = new ThreadPoolExecutor(numThreads, numThreads, 10, TimeUnit.SECONDS, queue); //threads.PrestartAllCoreThreads(); latch.Await(TimeSpan.FromMinutes(1)); if (latch.Count > 0) { throw new Exception("Failed to complete in 1 minute"); } }); Console.WriteLine("Took " + delta + " millis"); threads.Shutdown(); threads.AwaitTermination(TimeSpan.FromSeconds(10)); }
/** * Callback chamado após o recebimento de mensagem FIX * de incremental de MarketData. * */ public override void onMessage(MarketDataIncrementalRefresh message, SessionID sessionId) { try { filaMensagensFIXIncremental.Push(message); } catch (Exception e) { logger.Error("Falha na leitura da fila filaMensagensFIXIncremental: " + e.Message); } }
/** * Callback chamado após o recebimento de mensagem FIX * de instantâneo de MarketData. * */ public override void onMessage( MarketDataSnapshotFullRefresh message, SessionID sessionId) { try { filaMensagensFIXInstantaneo.Push(message); } catch (Exception e) { logger.Error("Falha na leitura da fila filaMensagensFIXInstantaneo: " + e.Message); } }
/** * Método chamado quando recebe os eventos BMF. * Os eventos são tratados e inseridos na fila da camada consumer. */ public void Update(EventBean[] newEvents, EventBean[] oldEvents) { EventoBMF bmEvent = (EventoBMF)newEvents[0].Underlying; try { filaMensagensLivroOfertas.Push(bmEvent); logger.Debug("Mensagens na fila: " + filaMensagensLivroOfertas.Count); } catch (Exception e) { logger.Error(e.Message); } }
public void Update(EventBean[] newEvents, EventBean[] oldEvents) { EventoBovespa bovEvent = (EventoBovespa)newEvents[0].Underlying; try { filaMensagensLivroOfertas.Push(bovEvent); if (logger.IsDebugEnabled) { logger.Debug("Mensagens na fila: " + filaMensagensLivroOfertas.Count); } } catch (Exception e) { logger.Error(e); } }
/** * Monta e envia mensagem de Instrumento da BM&F para o ESPER. * Layout da mensagem: * SeqNum 9(15) * type X(1) ( '.' - Instrumento ) * symbol X(20) * securityID X(20) * body: * SecurityIDSource (22) X(1) * Product (460) 9(3) * CFICode (461) X(6) * SecurityType (167) X(32) * SecuritySubType (762) X(32) * MaturityMonthYear (200) 9(6) * MaturityDate (541) 9(8) * IssueDate (225) 9(8) * CountryOfIssue (470) X(2) * ContractMultiplier (231) X(15) * SecurityExchange (207) X(10) * SecurityDesc (107) X(100) * ContractSettlMonth (667) 9(6) * DatedDate (873) 9(8) * Currency (15) X(10) * RoundLot (561) 9(15) * MinTradeVol (562) 9(15) * Asset (6937) X(10) * StrikePrice (202) X(15) * SecurityGroup (9918) X(15) * * @param msgSeqNum * @param ocorrencia * @param grupo * */ private void enviaInstrumento( int msgSeqNum, uint ocorrencia, SecurityList.NoRelatedSym grupo) { string mensagemMDS; try { // SeqNum - 9(15) mensagemMDS = msgSeqNum.ToString("D10"); mensagemMDS = mensagemMDS + ocorrencia.ToString("D5"); // type - X(1) mensagemMDS = mensagemMDS + '.'; // QuickFix.MDEntryType.INSTRUMENT; // symbol - X(20) mensagemMDS = mensagemMDS + grupo.getString(Symbol.FIELD).PadLeft(20); // securityID - X(20) mensagemMDS = mensagemMDS + grupo.getString(SecurityID.FIELD).PadLeft(20); // body mensagemMDS = mensagemMDS + (grupo.isSet(new SecurityIDSource()) ? grupo.getString(SecurityIDSource.FIELD) : " ").PadLeft(1); mensagemMDS = mensagemMDS + (grupo.isSet(new Product()) ? grupo.getInt(Product.FIELD) : 0).ToString("D3"); mensagemMDS = mensagemMDS + (grupo.isSet(new CFICode()) ? grupo.getString(CFICode.FIELD) : " ").PadLeft(6); mensagemMDS = mensagemMDS + (grupo.isSet(new SecurityType()) ? grupo.getString(SecurityType.FIELD) : " ").PadLeft(32); mensagemMDS = mensagemMDS + (grupo.isSet(new SecuritySubType()) ? grupo.getString(SecuritySubType.FIELD) : " ").PadLeft(32); mensagemMDS = mensagemMDS + (grupo.isSet(new MaturityMonthYear()) ? grupo.getInt(MaturityMonthYear.FIELD) : 0).ToString("D6"); mensagemMDS = mensagemMDS + (grupo.isSet(new MaturityDate()) ? grupo.getInt(MaturityDate.FIELD) : 0).ToString("D8"); mensagemMDS = mensagemMDS + (grupo.isSet(new IssueDate()) ? grupo.getInt(IssueDate.FIELD) : 0).ToString("D8"); mensagemMDS = mensagemMDS + (grupo.isSet(new CountryOfIssue()) ? grupo.getString(CountryOfIssue.FIELD) : " ").PadLeft(2); mensagemMDS = mensagemMDS + (grupo.isSet(new ContractMultiplier()) ? grupo.getString(ContractMultiplier.FIELD) : " ").PadLeft(15); mensagemMDS = mensagemMDS + (grupo.isSet(new SecurityExchange()) ? grupo.getString(SecurityExchange.FIELD) : " ").PadLeft(10); mensagemMDS = mensagemMDS + (grupo.isSet(new SecurityDesc()) ? grupo.getString(SecurityDesc.FIELD) : "").PadLeft(100); mensagemMDS = mensagemMDS + (grupo.isSet(new ContractSettlMonth()) ? grupo.getInt(ContractSettlMonth.FIELD) : 0).ToString("D6"); mensagemMDS = mensagemMDS + (grupo.isSet(new DatedDate()) ? grupo.getInt(DatedDate.FIELD) : 0).ToString("D8"); mensagemMDS = mensagemMDS + (grupo.isSet(new Currency()) ? grupo.getString(Currency.FIELD) : " ").PadLeft(10); mensagemMDS = mensagemMDS + (grupo.isSet(new RoundLot()) ? grupo.getInt(RoundLot.FIELD) : 0).ToString("D15"); mensagemMDS = mensagemMDS + (grupo.isSet(new MinTradeVol()) ? grupo.getInt(MinTradeVol.FIELD) : 0).ToString("D15"); // Asset mensagemMDS = mensagemMDS + (grupo.isSetField(6937) ? grupo.getString(6937) : " ").PadLeft(10); mensagemMDS = mensagemMDS + (grupo.isSet(new StrikePrice()) ? grupo.getString(StrikePrice.FIELD) : " ").PadLeft(15); // SecurityGroup mensagemMDS = mensagemMDS + (grupo.isSetField(9918) ? grupo.getString(9918) : " ").PadLeft(15); try { filaMensagensRetransmissorBMF.Push(mensagemMDS); } catch (Exception e) { logger.Error("Falha na leitura da fila filaMensagensRetransmissorBMF: " + e.Message); } logger.Debug("INSTRUMENT - Instrumento[" + grupo.getString(Symbol.FIELD) + "] Mensagem[" + mensagemMDS + "]"); } catch (FieldNotFound e) { logger.Error("Campo nao encontrado na mensagem: " + e.Message, e); return; } catch (Exception ex) { logger.Error("enviaInstrumento(): " + ex.Message, ex); return; } }
/** * Monta e envia mensagem Market Data de Incremental para o ESPER. * Layout da mensagem: * SeqNum 9(15) * type X(1) * symbol X(20) * securityID X(20) * body: * MDUpdateAction (279) X(1) * MDEntryID (278) X(10) * MDEntryDate (272) X(8) * MDEntryTime (273) X(8) * * MDEntryPositionNo (290) X(6) * MDEntryPx (270) X(15) * MDEntrySize (271) X(15) * NumberOfOrders (346) X(15) * OrderID (37) X(50) * MDEntryBuyer (288) X(10) * MDEntrySeller (289) X(10) * TickDirection (274) X(1) * NetChgPrevDay (451) X(11) * UniqueTradeID (6032) X(20) * OpenCloseSettlFlag (286) 9(1) * TradingSessionSubID (625) X(2) * SecurityTradingStatus (326) 9(3) * NoReferentialPrices (6932) 9(3) * ReferentialPriceType (6934) 9(1) * ReferentialPx (6933) X(15) * TransactTime (60) X(20) */ private void enviaIncremental( int seqNum, uint ocorrencia, MarketDataIncrementalRefresh mensagem, MarketDataIncrementalRefresh.NoMDEntries grupo) { string mensagemMDS; try { // SeqNum - 9(15) mensagemMDS = seqNum.ToString("D10"); mensagemMDS = mensagemMDS + ocorrencia.ToString("D5"); // type - X(1) mensagemMDS = mensagemMDS + grupo.getChar(MDEntryType.FIELD); // symbol - X(20) mensagemMDS = mensagemMDS + grupo.getString(Symbol.FIELD).PadLeft(20); // securityID - X(20) mensagemMDS = mensagemMDS + grupo.getString(SecurityID.FIELD).PadLeft(20); // body // Se OFERTA_COMPRA ou OFERTA_VENDA, envia NEW em MDUpdateAction if (grupo.getChar(MDEntryType.FIELD) == MDEntryType.BID || grupo.getChar(MDEntryType.FIELD) == MDEntryType.OFFER) { mensagemMDS = mensagemMDS + (grupo.isSet(new MDUpdateAction()) ? grupo.getChar(MDUpdateAction.FIELD) : MDUpdateAction.NEW); } else { mensagemMDS = mensagemMDS + MDUpdateAction.NEW; } mensagemMDS = mensagemMDS + " ".PadLeft(10);; mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryDate()) ? grupo.getString(MDEntryDate.FIELD) : " ").PadLeft(8); mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryTime()) ? grupo.getString(MDEntryTime.FIELD) : " ").PadLeft(8); mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryPositionNo()) ? grupo.getString(MDEntryPositionNo.FIELD) : " ").PadLeft(6); mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryPx()) ? grupo.getString(MDEntryPx.FIELD) : " ").PadLeft(15); mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntrySize()) ? grupo.getString(MDEntrySize.FIELD) : " ").PadLeft(15); mensagemMDS = mensagemMDS + (grupo.isSet(new NumberOfOrders()) ? grupo.getString(NumberOfOrders.FIELD) : " ").PadLeft(15); mensagemMDS = mensagemMDS + (grupo.isSet(new OrderID()) ? grupo.getString(OrderID.FIELD) : " ").PadLeft(50); mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryBuyer()) ? grupo.getString(MDEntryBuyer.FIELD) : " ").PadLeft(10); mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntrySeller()) ? grupo.getString(MDEntrySeller.FIELD) : " ").PadLeft(10); mensagemMDS = mensagemMDS + (grupo.isSet(new TickDirection()) ? grupo.getString(TickDirection.FIELD) : " "); mensagemMDS = mensagemMDS + (grupo.isSet(new NetChgPrevDay()) ? grupo.getString(NetChgPrevDay.FIELD) : " ").PadLeft(11); mensagemMDS = mensagemMDS + (grupo.isSetField(6032) ? grupo.getString(6032).PadLeft(20) : " ").PadLeft(20); mensagemMDS = mensagemMDS + (grupo.isSet(new OpenCloseSettlFlag()) ? grupo.getInt(OpenCloseSettlFlag.FIELD).ToString() : "0"); mensagemMDS = mensagemMDS + (grupo.isSet(new TradingSessionSubID()) ? grupo.getString(TradingSessionSubID.FIELD).PadLeft(2) : " "); mensagemMDS = mensagemMDS + (grupo.isSetField(326) ? grupo.getInt(326).ToString("D3") : "000"); if (grupo.isSetField(6932)) { int ocorrencias = grupo.getInt(6932); mensagemMDS = mensagemMDS + ocorrencias.ToString("D3"); for (uint ocorrenciaPrecos = 1; ocorrenciaPrecos <= ocorrencias; ocorrenciaPrecos++) { //ATP: Sinistraço!!!! Group grupoPrecos = new Group(6932, 6934, new int[] { 6934, 6933, 60, 0 }); grupo.getGroup(ocorrenciaPrecos, grupoPrecos); mensagemMDS = mensagemMDS + (grupoPrecos.isSetField(6934) ? grupoPrecos.getInt(6934).ToString("D1") : "0"); mensagemMDS = mensagemMDS + (grupoPrecos.isSetField(6933) ? grupoPrecos.getString(6933) : " ").PadLeft(15); mensagemMDS = mensagemMDS + (grupoPrecos.isSetField(TransactTime.FIELD) ? grupoPrecos.getString(TransactTime.FIELD) : " ").PadLeft(20); } } else { mensagemMDS = mensagemMDS + "000"; } try { filaMensagensRetransmissorBMF.Push(mensagemMDS); } catch (Exception e) { logger.Error("Falha na leitura da fila filaMensagensRetransmissorBMF: " + e.Message); } logger.Debug("INCREMENTAL - Instrumento[" + grupo.getString(Symbol.FIELD) + "] tipo[" + grupo.getChar(MDEntryType.FIELD) + "] acao[" + grupo.getChar(MDUpdateAction.FIELD) + "] Mensagem[" + mensagemMDS + "]"); } catch (FieldNotFound e) { logger.Error("Campo nao encontrado na mensagem: " + e.Message); return; } catch (Exception ex) { logger.Error("enviaIncremental: " + ex.Message, ex); } }
public void Submit(object @object) { queue.Push(@object); }