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(); }
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); }
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完成"); }
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(); }
public void Start(CancellationToken token, string front, string back) { var queue = new QueueDevice(_context, front, back); queue.Start(); }