コード例 #1
0
        private static void Main()
        {
            Console.Title = "NetMQ Multi-threaded Service";

            var queue = new QueueDevice("tcp://localhost:5555", "tcp://localhost:5556", DeviceMode.Threaded);

            var source = new CancellationTokenSource();

            s_token = source.Token;

            for (int threadId = 0; threadId < 10; threadId++)
            {
                Task.Factory.StartNew(WorkerRoutine, s_token);
            }

            queue.Start();

            var clientThreads = new List <Task>();

            for (int threadId = 0; threadId < 1000; threadId++)
            {
                int id = threadId;
                clientThreads.Add(Task.Factory.StartNew(() => ClientRoutine(id)));
            }

            Task.WaitAll(clientThreads.ToArray());

            source.Cancel();

            queue.Stop();

            Console.WriteLine("Press ENTER to exit...");
            Console.ReadLine();
        }
コード例 #2
0
ファイル: Pipe.cs プロジェクト: nka1/Daytona
        public void Start(ZmqContext context)
        {
            this.SetUpMonitorChannel(context);
            this.SetUpAddSubscriberCountChannel(context);

            ////this should work but the forwarder device appears to be broken - it does not use XSUb and XPUB sockets
            ////ForwarderDevice = new ForwarderDevice(context, PublishAddressServer, SubscribeAddressServer, DeviceMode.Threaded);
            ////ForwarderDevice.Start();
            ////while (!ForwarderDevice.IsRunning)
            ////{ }

            QueueDevce = new QueueDevice(context, PubSubControlBackAddressServer, PubSubControlFrontAddress, DeviceMode.Threaded);
            QueueDevce.Start();
            while (!QueueDevce.IsRunning)
            {
            }

            this.Writeline("Control channel started");

            //this.Context = context;
            this.cancellationTokenSource = new CancellationTokenSource();
            var token = this.cancellationTokenSource.Token;

            Task.Run(() =>
            {
                using (frontend = context.CreateSocket(SocketType.XSUB))
                {
                    using (backend = context.CreateSocket(SocketType.XPUB))
                    {
                        frontend.Bind(Pipe.PublishAddressServer);  ////"tcp://*:5550");
                        backend.Bind(Pipe.SubscribeAddressServer); ////"tcp://*:5553");
                        frontend.ReceiveReady += new EventHandler <SocketEventArgs>(FrontendReceiveReady);
                        backend.ReceiveReady  += new EventHandler <SocketEventArgs>(BackendReceiveReady);
                        this.AddSubscriberCountChannel.ReceiveReady += new EventHandler <SocketEventArgs>(AddSubscriberCountChannelReceiveReady);
                        using (poller = new Poller(new ZmqSocket[] { frontend, backend, this.AddSubscriberCountChannel }))
                        {
                            Writeline("About to start polling");

                            while (true)
                            {
                                poller.Poll(new TimeSpan(0, 0, 0, 0, 5));
                                Writeline("polling");
                                if (token.IsCancellationRequested)
                                {
                                    Writeline("break");
                                    break;
                                }
                            }
                        }

                        Writeline("stopped polling and exiting");
                    }
                }
            },
                     token);
        }
コード例 #3
0
        public void Initialize()
        {
            LoggingExtensions.Logging.Log.InitializeWith <LoggingExtensions.log4net.Log4NetLog>();


            _context = NetMQContext.Create();

            var frontAdress   = ConfigurationManager.AppSettings["frontendBindAddress"];
            var bakdendAdress = ConfigurationManager.AppSettings["backendBindAddress"];

            _poller = new NetMQ.Poller();
            _queue  = new NetMQ.Devices.QueueDevice(_context, _poller, frontAdress, bakdendAdress);

            this.Log().Info("初始化ZeroMq完成");
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: xuzhe35/netmq
        static void Main(string[] args)
        {
            using (var context = NetMQContext.Create())
            {
                //var queue = new QueueDevice(context, "tcp://localhost:5555", "inproc://workers", DeviceMode.Threaded);
                var queue = new QueueDevice(context, "tcp://localhost:5555", "tcp://localhost:5556", DeviceMode.Threaded);

                CancellationTokenSource source = new CancellationTokenSource();
                token = source.Token;

                List <Task> workerThreads = new List <Task>();
                for (int threadId = 0; threadId < 10; threadId++)
                {
                    NetMQContext ctx = context;
                    workerThreads.Add(Task.Factory.StartNew(() => WorkerRoutine(new Worker(Guid.NewGuid(), ctx)), token));
                }

                queue.Start();

                List <Task> clientThreads = new List <Task>();
                for (int threadId = 0; threadId < 1000; threadId++)
                {
                    int id = threadId;
                    clientThreads.Add(Task.Factory.StartNew(() => ClientRoutine(id)));
                }

                Task.WaitAll(clientThreads.ToArray());

                source.Cancel();

                queue.Stop();
            }

            Console.WriteLine("Press ENTER to exit...");
            Console.ReadLine();
        }
コード例 #5
0
ファイル: Server.cs プロジェクト: ashic/0MQOredev2013
        public void Start(CancellationToken token, string front, string back)
        {
            var queue = new QueueDevice(_context, front, back);

            queue.Start();
        }