void IEventHandler <ISequencerEntry <ReceiveData> > .OnNext(
            ISequencerEntry <ReceiveData> data, long sequence, bool endOfBatch)
        {
            if (_messageBus != null)
            {
                var receivedData = data.GetMessage();
                if (receivedData != null)
                {
                    //neu la control message thi khong can Journal
                    if (receivedData.Message is IControler || receivedData.RawMsg == null)
                    {
                        return;
                    }

                    //neu la control message thi khong can Journal
                    if (!(receivedData.Message is IMessage))
                    {
                        return;
                    }

                    //thuc hien send Ack message
                    var journal = new JournalMessage()
                    {
                        Tag   = receivedData.DeliveryTag,
                        IsAck = true,
                    };
                    switch (receivedData.QueueType)
                    {
                    case (byte)QueueType.MainQueue:
                        //Check co can gui replicate message hay ko
                        if (_messageBus.RequireReplication)
                        {
                            journal.ReplicateMsg = receivedData.RawMsg;
                        }
                        //Check co can gui save sinker message hay ko
                        if (_messageBus.IsWorkerBStar)
                        {
                            if (receivedData.Message is IMessage)
                            {
                                var bizMsg = receivedData.Message as IMessage;
                                if (!bizMsg.IsNotPersist)
                                {
                                    journal.SinkMsg = CreateSinkerMsg(receivedData.RawMsg);
                                }
                            }
                        }
                        _messageBus.Send(journal, (byte)QueueType.MainQueue);
                        break;

                    case (byte)QueueType.ReplicatorQueue:
                        _messageBus.Send(journal, (byte)QueueType.ReplicatorQueue);
                        break;
                    }
                }
            }
        }
Ejemplo n.º 2
0
 public UnitOfwork(ISequencerEntry sequencerEntry)
 {
     SequencerEntry = sequencerEntry;
     _sqlEvent      = new ServiceEventHandle <Tuple <int, ConcurrentDictionary <string, Hashtable> >, Tuple <bool, object> >();
     _adoEvent      = new ServiceEventHandle <Tuple <int, string[], DataSet[]>, Tuple <bool, object> >();
 }