예제 #1
0
        public static void SendItem(bool isAsync)
        {
            var      host = QueueHost.Parse("tcp:127.0.0.1:15000?NC_Bulk");
            QueueApi q    = QueueClient.GetApi(host);
            var      item = QueueClient.CreateQueueItem("Hello world " + DateTime.Now.ToString("s"), "test");

            item.Host = "NC_Bulk";
            //IQueueAck ack = null;

            QueueClient.EnqueueItem(q, item, 0, (IQueueAck ack) =>
            {
                Console.WriteLine("State:{0},Creation:{1},Host:{2},Label:{3}, Identifier:{4}, Duration:{5}, item:{6}", ack.MessageState, ack.Creation, ack.Host, ack.Label, ack.Identifier, ack.Duration, item.Id);
            });

            //if (q.IsAsync)
            //{
            //    IQueueAck ack = QueueClient.SendItemAsync(q, item, 0);
            //    Console.WriteLine("State:{0},Creation:{1},Host:{2},Label:{3}, Identifier:{4}, Duration:{5}, item:{6}", ack.MessageState, ack.Creation, ack.Host, ack.Label, ack.Identifier, ack.Duration, item.Id);
            //}
            //else
            //{
            //    QueueClient.SendItemAsync(q, item, 0, (IQueueAck ack) =>
            //    {
            //        Console.WriteLine("State:{0},Creation:{1},Host:{2},Label:{3}, Identifier:{4}, Duration:{5}, item:{6}", ack.MessageState, ack.Creation, ack.Host, ack.Label, ack.Identifier, ack.Duration, item.Id);
            //    });
            //}

            //var duration = DateTime.Now.Subtract(start);
            //var milliseconds = duration.TotalMilliseconds;
            //Console.WriteLine("duration: {0}, item: {1}", milliseconds, item);
        }
예제 #2
0
        public static QueueHost GetHost(string protocol, string host_address, string queueName)
        {
            //127.0.0.1:15000
            var host = QueueHost.Parse(protocol + ":" + host_address + "?" + queueName);

            return(host);
        }
예제 #3
0
        public static void DoQuery(QueueHost host)
        {
            QueueApi q   = new QueueApi(host);
            var      req = new QueueRequest()
            {
                QCommand = QueueCmd.ReportQueueItems, DuplexType = DuplexTypes.NoWaite, Host = "NC_Quick"
            };
            var ts = q.SendDuplexStream(req, 1000000);

            if (ts != null)
            {
                //var stream = ts.ReadStream(null);
                //Nistec.Serialization.BinaryStreamer bs = new Nistec.Serialization.BinaryStreamer(stream);
                //var olist= bs.Decode();

                //var olist = ts.ReadValue();

                var list = ts.ReadValue <IEnumerable <PersistItem> >();
                Console.WriteLine(list);
            }
            else
            {
                Console.WriteLine("Get nothing!");
            }
        }
예제 #4
0
        public static QueueHost GetHost(string host_address, string queueName)
        {
            //"tcp:127.0.0.1:15000?NC_Quick"
            var host = QueueHost.Parse("tcp:127.0.0.1:15000?" + queueName);

            return(host);
        }
예제 #5
0
        IQueueAck ExecRout(QueueItem item, QueueHost qh)
        {
            if (qh == null)
            {
                throw new MessageException(MessageState.InvalidMessageHost, "Invalid QueueHost for Routing " + item.Host);
            }
            IQueueAck ack = null;

            if (qh.IsLocal)
            {
                item.Host = qh.HostName;
                MQueue Q = Get(item.Host);
                if (Q == null)
                {
                    throw new MessageException(MessageState.InvalidMessageHost, "message.RoutHostName not found " + item.Host);
                }
                ack = Q.Enqueue(item);
                return(ack);// ptr.MessageState;
            }

            var api = new QueueApi(qh.NetProtocol);

            ack = api.SendAsync(item, 0);
            return(ack);
        }
예제 #6
0
        protected override void OnAsyncExecutingWorker(AsyncCallEventArgs e)
        {
            base.OnAsyncExecutingWorker(e);
            try
            {
                DataSet ds = new DataSet("RemoteQueue");
                ds.ReadXml(filename);
                dt = ds.Tables[0];
                int count = dt.Rows.Count;
                this.ProgressBar1.Maximum = count;

                var hostPipe = QueueHost.Parse("ipc:.:nistec_queue_manager?" + queueName);

                QueueApi Client = new QueueApi(hostPipe);

                foreach (DataRow dr in dt.Rows)
                {
                    Client.Enqueue(QueueItem.Create(dr));
                    this.ProgressBar1.Increment(1);
                }
            }
            catch (Exception ex)
            {
                MsgBox.ShowError(ex.Message);
            }
            finally
            {
                //Closewindow();
            }
        }
예제 #7
0
        internal SessionListener(QueueAdapter adapter, int interval)
        {
            if (adapter == null)
            {
                throw new ArgumentNullException("adapter");
            }
            if (adapter.Source == null)
            {
                throw new ArgumentNullException("adapter.Source");
            }
            Adapter = adapter;

            //_Owner = owner;
            _Source = adapter.Source;
            //_TransferTo = adapter.TransferTo;

            //_ServerName = channel.ServerName;
            //_QueueName = channel.Source;
            //IntervalWait = interval < MinWait ? MinWait : interval;// 1000;

            Interval        = interval;
            _ConnectTimeout = adapter.ConnectTimeout;
            _ReadTimeout    = adapter.ReadTimeout;
            _WorkerCount    = adapter.WorkerCount;
            _IsAsync        = adapter.IsAsync;
            //_Action = adapter.QueueAction;
            EnableResetEvent  = adapter.EnableResetEvent;
            EnableDynamicWait = adapter.EnableDynamicWait;
            //_ActionTransfer = adapter.AckAction;
            //_AdapterOperation = adapter.OperationType;

            //_api = new QueueApi(adapter.Source);
        }
예제 #8
0
        public void Http401_If_No_Token_specified()
        {
            var    tokenValidator = Substitute.For <IApiTokenValidator>();
            string tokenValue     = "token_123422";

            tokenValidator.IsValidToken(tokenValue).Returns(true);

            _host = new QueueHost(_defaultPort, tokenValidator);
            new Thread(_host.Start).Start();
            Thread.Sleep(2000);

            var request = WebRequest.Create($"http://127.0.0.1:{_defaultPort}/api/Queue/AreYouAlive") as HttpWebRequest;

            request.Method      = "GET";
            request.Timeout     = 3000;
            request.ContentType = "application/json";
            request.Accept      = "application/json";

            HttpStatusCode responseCode = HttpStatusCode.Accepted;

            try
            {
                request.GetResponse();
            }
            catch (WebException ex)
            {
                responseCode = (ex.Response as HttpWebResponse).StatusCode;
            }
            Assert.AreEqual(HttpStatusCode.Unauthorized, responseCode);
        }
예제 #9
0
        public static void DoSbscriberListener()
        {
            var settings = new TcpSettings()
            {
                Address        = "127.0.0.1",
                ConnectTimeout = 5000,
                HostName       = "Netcell",
                Port           = 15002,
                IsAsync        = false
            };
            var host = QueueHost.Parse(string.Format("file:{0}:Queues?{1}", Assists.EXECPATH, settings.HostName));

            host.CoverMode     = CoverMode.FileStream;
            host.CommitMode    = PersistCommitMode.OnMemory;
            host.ReloadOnStart = true;

            var listener = new TopicSbscriberListener(host, true)
            {
                OnItemReceived = (IQueueItem message) =>
                {
                    Console.WriteLine("State:{0},Arrived:{1},Host:{2},Label:{3}, Identifier:{4}", message.MessageState, message.ArrivedTime, message.Host, message.Label, message.Identifier);

                    return(new QueueAck(Nistec.Messaging.MessageState.Received, message).ToTransStream());
                },
                OnError = (string message) => {
                    Console.WriteLine("OnError:{0}", message);
                }
            };
            string logpath = NetlogSettings.GetDefaultPath("topicSubs");

            listener.Logger = new Logger(logpath, LoggerMode.Console | LoggerMode.File);
            listener.InitServerQueue(settings, true);
            //listener.PausePersistQueue(true);
        }
예제 #10
0
        public void Token_Is_required_If_TokenValidation_specified()
        {
            var    tokenValidator = Substitute.For <IApiTokenValidator>();
            string tokenValue     = "token_123422";

            tokenValidator.IsValidToken(tokenValue).Returns(true);

            _host = new QueueHost(_defaultPort, tokenValidator);
            new Thread(_host.Start).Start();
            Thread.Sleep(2000);

            var request = WebRequest.Create($"http://127.0.0.1:{_defaultPort}/api/Queue/AreYouAlive") as HttpWebRequest;

            request.Method      = "GET";
            request.Timeout     = 3000;
            request.ContentType = "application/json";
            request.Accept      = "application/json";
            request.Headers.Add("Api-Token", tokenValue);
            string responseFromServer = "";

            using (WebResponse response = request.GetResponse())
            {
                using (Stream stream = response.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(stream);
                    responseFromServer = reader.ReadToEnd();
                }
            }
            Assert.AreEqual(responseFromServer, "\"YES\"");
        }
예제 #11
0
        public static QueueApi GetApi(QueueHost host)
        {
            QueueApi q = new QueueApi(host);

            q.IsAsync = false;
            return(q);
        }
예제 #12
0
        public void LoadTcpSettings(QueueHost host)
        {
            IPBindInfo bindinfo = new IPBindInfo(host.HostAddress, NetworkProtocol.Tcp, IPAddress.Any, host.Port);

            MaxConnections      = 0;
            MaxConnectionsPerIP = 0;
            TaskIdleTimeout     = 0;
        }
예제 #13
0
        static void Main(string[] args)
        {
            var httpPort = 8083;
            var queue    = new QueueHost(httpPort);

            queue.Start();
            Console.WriteLine($"DotQueue listener is listening on port {httpPort}");
            Console.ReadLine();
        }
예제 #14
0
 public QueueApi(QueueHost host)
     : this()
 {
     _QueueName        = host.HostName;
     _HostProtocol     = host.Protocol;
     RemoteHostAddress = host.Endpoint;
     RemoteHostPort    = host.Port;
     Protocol          = host.NetProtocol;
 }
예제 #15
0
        public void TokenProvider_Is_Initialized_If_tokenValidation_specified()
        {
            var tokenValidator = Substitute.For <IApiTokenValidator>();

            _host = new QueueHost(_defaultPort, tokenValidator);
            Thread.Sleep(1000);
            Assert.IsTrue(TokenValidationProvider.CheckAuthorization);
            Assert.AreEqual(tokenValidator, TokenValidationProvider.Validator);
        }
예제 #16
0
        //public QueueApi(string queueName) : this()
        //{
        //    _QueueName = queueName;
        //    _HostProtocol = HostProtocol.ipc;
        //    RemoteHostAddress = null;

        //    Protocol = NetProtocol.Pipe;
        //}

        public QueueApi(string queueName, string hostAddress)
            : this()
        {
            var qh = QueueHost.Parse(hostAddress);

            _QueueName        = queueName;
            _HostProtocol     = qh.Protocol;
            RemoteHostAddress = qh.Endpoint;
            RemoteHostPort    = qh.Port;
            Protocol          = qh.Protocol.GetProtocol();
        }
예제 #17
0
 public QueueHost GetRoutHost()
 {
     if (Mode == CoverMode.Rout)
     {
         if (TargetPath == null || TargetPath == "")
         {
             return(null);
         }
         return(QueueHost.Parse(TargetPath));
     }
     return(null);
 }
예제 #18
0
        public static void DoListnning(QueueHost host)
        {
            var adapter = new QueueAdapter()
            {
                Source  = host,
                IsAsync = true,
                //Interval = 100,
                ConnectTimeout    = 5000,
                ReadTimeout       = 180000,
                WorkerCount       = 1,
                EnableDynamicWait = true,
                QueueAction       = (message) =>
                {
                    Console.WriteLine("State:{0},Arrived:{1},Host:{2},Label:{3}, Identifier:{4}, Duration:{5}", message.MessageState, message.ArrivedTime.ToString("yyyy-MM-dd HH:mm:ss.fff"), message.Host, message.Label, message.Identifier, message.Duration);

                    var    body  = message.GetBody();
                    string sbody = body == null ? "null" : body.ToString();
                    Console.WriteLine("body: " + sbody);
                },
                FaultAction = (message) =>
                {
                    Console.WriteLine(message);
                }
            };

            QueueListener listener = new QueueListener(adapter, 100);
            string        logpath  = NetlogSettings.GetDefaultPath("qlistener");

            listener.Logger = new Logger(logpath);
            //listener.ErrorOcurred += Listener_ErrorOcurred;
            //listener.MessageReceived += Listener_MessageReceived;
            listener.Start();

            //QueueApi api = new QueueApi(host);
            //api.ReceiveCompleted += api_ReceiveCompleted;

            ////api.Listener(10000, message_ReceiveCompleted);
            //bool KeepAlive = true;
            //int connectTimeout=10000;

            //    while (KeepAlive)
            //    {
            //        api.Receive(connectTimeout,message_ReceiveCompleted);
            //        Thread.Sleep(100);
            //    }



            //Console.WriteLine("QueueListener finished...");
            //Console.ReadLine();
        }
예제 #19
0
        /// <summary>
        /// Ensure that lister is exists.
        /// </summary>
        /// <param name="host"></param>
        /// <returns></returns>
        public virtual Listener EnsureListener(QueueHost host)
        {
            if (host == null)
            {
                throw new ArgumentNullException("Find.ack");
            }
            var listener = Find(host.HostId);

            if (listener == null)
            {
                throw new Exception("Listener not found " + host.HostId);
            }
            return(listener);
        }
예제 #20
0
        public static void PublishItem()
        {
            var      host = QueueHost.Parse("tcp:127.0.0.1:15000?Netcell");
            QueueApi q    = QueueClient.GetApi(host);
            var      item = QueueClient.CreateQueueItem("Hello world " + DateTime.Now.ToString("s"), "test");

            item.Host     = "Netcell";
            item.QCommand = QueueCmd.Enqueue;
            //IQueueAck ack = null;

            QueueClient.PublishItem(q, item, 0, (IQueueAck ack) =>
            {
                Console.WriteLine("State:{0},Creation:{1},Host:{2},Label:{3}, Identifier:{4}, Duration:{5}, item:{6}", ack.MessageState, ack.Creation, ack.Host, ack.Label, ack.Identifier, ack.Duration, item.Id);
            });
        }
예제 #21
0
        /// <summary>
        /// Initialize a new instance of folder queue.
        /// </summary>
        /// <param name="host"></param>
        public FolderQueue(QueueHost host)
        {
            if (host == null)
            {
                throw new ArgumentNullException("host");
            }
            m_fileMessage = new FileMessage(host);

            //m_host = host;
            //OperationType = AdapterOperations.Recieve;
            FileOrderType      = FileOrderTypes.ByName;
            IsCoverable        = false;
            MaxItemsPerSession = 1;
            ConnectTimeout     = FileMessage.DefaultConnectTimeout;
        }
예제 #22
0
        public static void DoGet(QueueHost host)
        {
            QueueApi q = new QueueApi(host);

            q.Timeout = 500000000;
            var item = q.Receive(DuplexTypes.WaitOne);

            if (item != null)
            {
                Console.WriteLine(item.Print());
            }
            else
            {
                Console.WriteLine("Get nothing!");
            }
        }
예제 #23
0
        public TopicSbscriberListener(QueueHost qhost, bool enablePersistQueue = false)
        {
            SbscriberHost = qhost.HostName;
            HostProtocol  = qhost.Protocol;
            HostInfo      = string.Format("HostName:{0},Protocol:{1}, HostAddress:{2}", qhost.HostName, qhost.Protocol, qhost.HostAddress);

            EnablePersistQueue = enablePersistQueue;
            if (enablePersistQueue)
            {
                Queue = new PriorityFsQueue(qhost);
            }
            //if (autoStart)
            //{
            //    InitServerQueue(settings, autoStart);
            //}
        }
        public void Start_starts_all_the_queue_consumers()
        {
            var kernel = new StandardKernel();
            var queueConsumerTestMessage1 = new Mock<IQueueConsumer<TestMessage1>>();
            var queueConsumerTestMessage2 = new Mock<IQueueConsumer<TestMessage2>>();
            kernel.Bind<IQueueConsumer<TestMessage1>>().ToConstant(queueConsumerTestMessage1.Object);
            kernel.Bind<IQueueConsumer<TestMessage2>>().ToConstant(queueConsumerTestMessage2.Object);

            var host = new QueueHost(kernel, new QueueHostConfiguration(new Type[] { typeof(TestMessage1), typeof(TestMessage2)  }));

            host.Start();

            queueConsumerTestMessage1.Verify(x => x.Start());
            queueConsumerTestMessage2.Verify(x => x.Start());

            host.Dispose();
        }
예제 #25
0
        public static void DoGet(QueueHost host)
        {
            QueueApi q = new QueueApi(host);

            q.ConnectTimeout = 500000000;
            //q.ReadTimeout = -1;
            var item = q.Dequeue();// DuplexTypes.WaitOne);

            if (item != null)
            {
                Console.WriteLine(item.Print());
            }
            else
            {
                Console.WriteLine("Get nothing!");
            }
        }
예제 #26
0
        //public static FolderQueue CreateSync(
        //    QueueHost host,
        //    int connectTimeout,
        //    int maxItemsPersession,
        //    FileOrderTypes orderType,
        //    bool isCoverable)
        //{
        //    return new FolderQueue(host)
        //    {
        //        FileOrderType = orderType,
        //        MaxItemsPerSession = maxItemsPersession,
        //        ConnectTimeout = connectTimeout,
        //        IsCoverable = isCoverable,
        //        OperationType = AdapterOperations.Async,
        //    };
        //}

        public static FolderQueue CreateAsync(
            QueueHost host,
            int connectTimeout,
            int maxItemsPersession,
            FileOrderTypes orderType,
            Action <QueueItem> targetAction,
            bool isCoverable)
        {
            return(new FolderQueue(host)
            {
                FileOrderType = orderType,
                MaxItemsPerSession = maxItemsPersession,
                QueueAction = targetAction,
                ConnectTimeout = connectTimeout,
                IsCoverable = isCoverable
                              //OperationType = AdapterOperations.Recieve,
            });
        }
예제 #27
0
 public static FolderQueue CreateAsyncTransfer(
     QueueHost host,
     int connectTimeout,
     int maxItemsPersession,
     FileOrderTypes orderType,
     Action <IQueueAck> ackAction,
     QueueHost hostDestination,
     bool isCoverable)
 {
     return(new FolderQueue(host)
     {
         FileOrderType = orderType,
         MaxItemsPerSession = maxItemsPersession,
         AckAction = ackAction,
         ConnectTimeout = connectTimeout,
         IsCoverable = isCoverable,
         //OperationType = AdapterOperations.Transfer,
         Destination = hostDestination
     });
 }
예제 #28
0
        static void Main(string[] args)
        {
            Console.WriteLine("QueueTasker started...");

            var      host = QueueHost.Parse("ipc:.:nistec_queue_channel?NC_Quick");
            QueueApi q    = new QueueApi(host);

            while (true)
            {
                var msg = q.Report(QueueCmdReport.ReportQueueStatistic, "NC_Quick");

                Console.WriteLine("State:{0},Creation:{1},Host:{2},Label:{3}", msg.MessageState, msg.Creation, msg.Host, msg.Label);

                Thread.Sleep(10000);
            }



            Console.WriteLine("QueueTasker finished...");
            Console.ReadLine();
        }
예제 #29
0
        public void Messages_Are_Persisted()
        {
            int port = 8083;
            var host = new QueueHost(port, persistenceAdapter: new SQLitePersistenceAdapter());

            //start host with SQLite persistence adapter
            new Thread(() => host.Start()).Start();

            //Wait for listener to be ready
            Thread.Sleep(1000);

            //send messages
            var client = new MessageQueue <DummyMessage>(new DotQueueAddress
            {
                IpAddress = IPAddress.Parse("127.0.0.1"),
                Port      = port
            });

            var msg1 = CreateRandomMessage();
            var msg2 = CreateRandomMessage();

            client.Add(msg1);
            client.Add(msg2);

            //stop the host
            host.Stop();

            //start the queue again
            new Thread(() => host.Start()).Start();

            //Wait for listener to be ready
            Thread.Sleep(1000);

            //pull messages and assert results are matching
            var actual1 = client.Pull();
            var actual2 = client.Pull();

            Assert.That(actual1, Is.EqualTo(msg1));
            Assert.That(actual2, Is.EqualTo(msg2));
        }
예제 #30
0
파일: Listener.cs 프로젝트: nistec/MQueue
        internal Listener(IListenerHandler owner, AdapterProperties channel)
        {
            if (channel == null)
            {
                throw new ArgumentNullException("channel");
            }
            if (channel.Source == null)
            {
                throw new ArgumentNullException("channel.Source");
            }
            _Owner      = owner;
            _Source     = channel.Source;
            _TransferTo = channel.TransferTo;

            //_ServerName = channel.ServerName;
            //_QueueName = channel.Source;
            _Interval         = channel.Interval;
            _ConnectTimeout   = channel.ConnectTimeout;
            _WorkerCount      = channel.WorkerCount;
            _Action           = channel.TargetAction;
            _AdapterOperation = channel.OperationType;
        }
예제 #31
0
        static void Main(string[] args)
        {
            var httpPort = 8083; //Can be any other port#

            #region RavenDb example

            /*
             * IDocumentStore address = new DocumentStore {
             *  Url = "http://localhost:8080",
             *  DefaultDatabase = "Customers",
             * };
             * var host = new QueueHost(httpPort, persistenceAdapter:new RavenDbPersistenceAdapter(address));
             */
            #endregion

            #region Sqlite example
            var host = new QueueHost(httpPort, persistenceAdapter: new SQLitePersistenceAdapter());
            #endregion

            host.Start();
            Console.ReadLine();
        }