Beispiel #1
0
        /// <summary>
        /// 启动消息生产
        /// </summary>
        private async void Connect()
        {
            using (var context = NetMQContext.Create())
                using (var producer = context.CreatePublisherSocket())
                {
                    //producer.Options.SendHighWatermark = 1000;
                    producer.Connect(brokerAddressForProducer.ToString());
                    //connectedInstances.AddOrUpdate(brokerAddressWithProducerPort, this, (key, value) => this);
                    Console.WriteLine("[Producer]Connected to broker at " + brokerAddressForProducer + ".");

                    await Task.Run(() =>
                    {
                        //foreach (var message in blockQueue.GetConsumingEnumerable())
                        //{
                        //    producer.Send(message);
                        //}
                        while (true)
                        {
                            if (!messages.IsEmpty)
                            {
                                RawMessage message;
                                if (messages.TryDequeue(out message))
                                {
                                    producer.Send(message);
                                }
                            }
                            else
                            {
                                waiter.WaitOne();
                            }
                        }
                    });
                }
        }
Beispiel #2
0
        /// <summary>
        /// 启动消息消费
        /// </summary>
        private async void Connect()
        {
            using (var context = NetMQContext.Create())
                using (var consumer = context.CreateSubscriberSocket())
                {
                    //consumer.Options.ReceiveHighWatermark = 1000;
                    consumer.Connect(brokerAddressWithConsumerPort.ToString());
                    consumer.Subscribe("");
                    //connectedInstances.AddOrUpdate(brokerAddressWithConsumerPort, this, (key, value) => this);
                    Console.WriteLine("[Consumer]Connected to broker at " + brokerAddressWithConsumerPort + ".");

                    await Task.Run(() =>
                    {
                        while (true)
                        {
                            var message = consumer.Receive();
                            foreach (var subscriber in subscribers)
                            {
                                Task.Run(() => subscriber(message));
                            }
                        }
                    });
                }
        }