示例#1
0
        public ClientService(ClientSetting setting, Producer producer, Consumer consumer)
        {
            Ensure.NotNull(setting, "setting");
            if (producer == null && consumer == null)
            {
                throw new ArgumentException("producer or consumer must set at least one of them.");
            }
            else if (producer != null && consumer != null)
            {
                throw new ArgumentException("producer or consumer cannot set both of them.");
            }

            Interlocked.Increment(ref _instanceNumber);

            _producer = producer;
            _consumer = consumer;
            _setting = setting;
            _clientId = BuildClientId(setting.ClientName);
            _brokerConnectionDict = new ConcurrentDictionary<string, BrokerConnection>();
            _topicMessageQueueDict = new ConcurrentDictionary<string, IList<MessageQueue>>();
            _binarySerializer = ObjectContainer.Resolve<IBinarySerializer>();
            _jsonSerializer = ObjectContainer.Resolve<IJsonSerializer>();
            _scheduleService = ObjectContainer.Resolve<IScheduleService>();
            _logger = ObjectContainer.Resolve<ILoggerFactory>().Create(GetType().FullName);
            _nameServerRemotingClientList = RemotingClientUtils.CreateRemotingClientList(_setting.NameServerList, _setting.SocketSetting).ToList();
        }
示例#2
0
        static void SendMessageTest()
        {
            _mode = ConfigurationManager.AppSettings["Mode"];

            var address = ConfigurationManager.AppSettings["BrokerAddress"];
            var brokerAddress = string.IsNullOrEmpty(address) ? SocketUtils.GetLocalIPV4() : IPAddress.Parse(address);
            var clientCount = int.Parse(ConfigurationManager.AppSettings["ClientCount"]);
            var messageSize = int.Parse(ConfigurationManager.AppSettings["MessageSize"]);
            var messageCount = int.Parse(ConfigurationManager.AppSettings["MessageCount"]);
            var actions = new List<Action>();
            var payload = new byte[messageSize];
            var topic = ConfigurationManager.AppSettings["Topic"];
            var message = new Message(topic, 100, payload);

            for (var i = 0; i < clientCount; i++)
            {
                var setting = new ProducerSetting
                {
                    BrokerAddress = new IPEndPoint(brokerAddress, 5000),
                    BrokerAdminAddress = new IPEndPoint(brokerAddress, 5002)
                };
                var producer = new Producer(setting).Start();
                actions.Add(() => SendMessages(producer, _mode, messageCount, message));
            }

            Task.Factory.StartNew(() => Parallel.Invoke(actions.ToArray()));
        }
示例#3
0
 public EventPublisher(ProducerSetting setting, string id)
 {
     _producer = new Producer(setting, id);
     _binarySerializer = ObjectContainer.Resolve<IBinarySerializer>();
     _eventTopicProvider = ObjectContainer.Resolve<IEventTopicProvider>();
     _eventTypeCodeProvider = ObjectContainer.Resolve<IEventTypeCodeProvider>();
     _logger = ObjectContainer.Resolve<ILoggerFactory>().Create(GetType().Name);
 }
示例#4
0
 public EventPublisher(string id, string topic, EQueueClientsProducers.ProducerSetting producerSetting)
 {
     Topic = topic;
     Id = id;
     _Logger = IoCFactory.Resolve<ILoggerFactory>().Create(this.GetType());
     MessageQueue = new BlockingCollection<EQueueProtocols.Message>();
     Producer = new EQueueClientsProducers.Producer(Id, producerSetting);
 }
示例#5
0
 public EventPublisher(string id, string topic, EQueueClientsProducers.ProducerSetting producerSetting)
 {
     Topic        = topic;
     Id           = id;
     _Logger      = IoCFactory.Resolve <ILoggerFactory>().Create(this.GetType());
     MessageQueue = new BlockingCollection <EQueueProtocols.Message>();
     Producer     = new EQueueClientsProducers.Producer(Id, producerSetting);
 }
示例#6
0
 public CommandService(CommandResultProcessor commandResultProcessor, ProducerSetting setting, string id)
 {
     _commandResultProcessor = commandResultProcessor;
     _producer = new Producer(setting, id);
     _binarySerializer = ObjectContainer.Resolve<IBinarySerializer>();
     _commandTopicProvider = ObjectContainer.Resolve<ICommandTopicProvider>();
     _commandTypeCodeProvider = ObjectContainer.Resolve<ICommandTypeCodeProvider>();
     _logger = ObjectContainer.Resolve<ILoggerFactory>().Create(GetType().Name);
 }
示例#7
0
 public void SendMessage(Producer producer, EQueueMessage message, object routingKey)
 {
     _ioHelper.TryIOAction(() =>
     {
         var result = producer.Send(message, routingKey);
         if (result.SendStatus != SendStatus.Success)
         {
             throw new IOException(result.ErrorMessage);
         }
     }, "SendQueueMessage");
 }
示例#8
0
 public CommandService(CommandResultProcessor commandResultProcessor = null, string id = null, ProducerSetting setting = null)
 {
     _commandResultProcessor = commandResultProcessor;
     _producer = new Producer(id ?? DefaultCommandServiceProcuderId, setting ?? new ProducerSetting());
     _jsonSerializer = ObjectContainer.Resolve<IJsonSerializer>();
     _commandTopicProvider = ObjectContainer.Resolve<ITopicProvider<ICommand>>();
     _commandTypeCodeProvider = ObjectContainer.Resolve<ITypeCodeProvider>();
     _commandRouteKeyProvider = ObjectContainer.Resolve<ICommandRoutingKeyProvider>();
     _sendMessageService = new SendQueueMessageService();
     _logger = ObjectContainer.Resolve<ILoggerFactory>().Create(GetType().FullName);
     _ioHelper = ObjectContainer.Resolve<IOHelper>();
 }
示例#9
0
        public CommandConsumer(string name, EQueueClientsConsumers.ConsumerSetting consumerSetting, string groupName,
                               string subscribeTopic, string brokerAddress, int producerBrokerPort,
                               IHandlerProvider handlerProvider)
            : base(name, consumerSetting, groupName, subscribeTopic)
        {
            HandlerProvider = handlerProvider;
            var producerSetting = new EQueueClientsProducers.ProducerSetting();

            producerSetting.BrokerAddress = brokerAddress;
            producerSetting.BrokerPort    = producerBrokerPort;
            Producer = new EQueueClientsProducers.Producer(string.Format("{0}-Reply-Producer", name), producerSetting);
            CommandConsumers.Add(this);
        }
示例#10
0
 public async Task<AsyncTaskResult> SendMessageAsync(Producer producer, EQueueMessage message, object routingKey)
 {
     try
     {
         var result = await producer.SendAsync(message, routingKey);
         if (result.SendStatus != SendStatus.Success)
         {
             return new AsyncTaskResult(AsyncTaskStatus.IOException, result.ErrorMessage);
         }
         return AsyncTaskResult.Success;
     }
     catch (Exception ex)
     {
         return new AsyncTaskResult(AsyncTaskStatus.IOException, ex.Message);
     }
 }
示例#11
0
 static void SendMessage(Producer producer, IndexEntry indexEntry)
 {
     var message = "message" + Interlocked.Increment(ref messageIndex);
     producer.SendAsync(new Message("SampleTopic", Encoding.UTF8.GetBytes(message)), indexEntry.Index.ToString()).ContinueWith(sendTask =>
     {
         var finishedCount = Interlocked.Increment(ref finished);
         if (finishedCount % 1000 == 0)
         {
             _logger.InfoFormat("Sent {0} messages, time spent:{1}", finishedCount, watch.ElapsedMilliseconds);
         }
         if (indexEntry.Index < indexEntry.Total)
         {
             indexEntry.Index++;
             SendMessage(producer, indexEntry);
         }
     });
 }
示例#12
0
        public override void Start()
        {
            #region init sending commands Worker

            #region Init  Command Queue client

            Producer = new EQueueClientsProducers.Producer(string.Format("{0}-Reply-Producer", ProducerName), ProducerSetting);
            Producer.Start();
            #endregion

            SendCommandWorkTask = Task.Factory.StartNew(() =>
            {
                try
                {
                    using (var messageStore = IoCFactory.Resolve <IMessageStore>())
                    {
                        messageStore.GetAllUnSentCommands()
                        .ForEach(commandContext => ToBeSentCommandQueue.Add(commandContext as MessageContext));
                    }
                }
                catch (Exception ex)
                {
                    _Logger.Error("Get all unsent commands failed", ex);
                }

                while (!_exit)
                {
                    try
                    {
                        var commandContext = ToBeSentCommandQueue.Take();
                        SendCommand(commandContext);
                    }
                    catch (Exception ex)
                    {
                        _Logger.Debug("send command quit", ex);
                    }
                }
            }, TaskCreationOptions.LongRunning);
            #endregion

            #region init process command reply worker

            base.Start();

            #endregion
        }
示例#13
0
 public async Task<AsyncTaskResult> SendMessageAsync(Producer producer, EQueueMessage message, string routingKey)
 {
     try
     {
         var result = await producer.SendAsync(message, routingKey);
         if (result.SendStatus != SendStatus.Success)
         {
             _logger.ErrorFormat("EQueue message async send failed, sendResult: {0}, routingKey: {1}", result, routingKey);
             return new AsyncTaskResult(AsyncTaskStatus.IOException, result.ErrorMessage);
         }
         _logger.InfoFormat("EQueue message async send success, sendResult: {0}, routingKey: {1}", result, routingKey);
         return AsyncTaskResult.Success;
     }
     catch (Exception ex)
     {
         _logger.Error(string.Format("EQueue message async send has exception, message: {0}, routingKey: {1}", message, routingKey), ex);
         return new AsyncTaskResult(AsyncTaskStatus.IOException, ex.Message);
     }
 }
示例#14
0
        static void Main(string[] args)
        {
            InitializeEQueue();

            var brokerIP = ConfigurationManager.AppSettings["BrokerIP"];
            var brokerEndPoint = string.IsNullOrEmpty(brokerIP) ? new IPEndPoint(SocketUtils.GetLocalIPV4(), 5000) : new IPEndPoint(IPAddress.Parse(brokerIP), 5000);
            var producer = new Producer("Producer1", new ProducerSetting { BrokerProducerIPEndPoint = brokerEndPoint }).Start();
            var messageSize = int.Parse(ConfigurationManager.AppSettings["MessageSize"]);
            var messageCount = int.Parse(ConfigurationManager.AppSettings["MessageCount"]);
            var message = new byte[messageSize];
            var sendCallback = new Action<Task<SendResult>>(sendTask =>
            {
                if (sendTask.Exception != null)
                {
                    _logger.ErrorFormat("Sent message failed, errorMessage: {0}", sendTask.Exception.GetBaseException().Message);
                    return;
                }
                if (sendTask.Result.SendStatus == SendStatus.Success)
                {
                    var finishedCount = Interlocked.Increment(ref finished);
                    if (finishedCount == 1)
                    {
                        watch = Stopwatch.StartNew();
                    }
                    if (finishedCount % 10000 == 0)
                    {
                        _logger.InfoFormat("Sent {0} messages, time spent:{1}", finishedCount, watch.ElapsedMilliseconds);
                    }
                }
                else
                {
                    _logger.ErrorFormat("Sent message failed, errorMessage: {0}", sendTask.Result.ErrorMessage);
                }
            });

            for (var index = 1; index <= messageCount; index++)
            {
                producer.SendAsync(new Message("SampleTopic", 100, message), Interlocked.Increment(ref messageIndex)).ContinueWith(sendCallback);
            }

            Console.ReadLine();
        }
示例#15
0
 public void SendMessage(Producer producer, EQueueMessage message, string routingKey)
 {
     try
     {
         _ioHelper.TryIOAction(() =>
         {
             var result = producer.Send(message, routingKey);
             if (result.SendStatus != SendStatus.Success)
             {
                 _logger.ErrorFormat("EQueue message sync send failed, sendResult: {0}, routingKey: {1}", result, routingKey);
                 throw new IOException(result.ErrorMessage);
             }
             _logger.InfoFormat("EQueue message sync send success, sendResult: {0}, routingKey: {1}", result, routingKey);
         }, "SendQueueMessage");
     }
     catch (Exception ex)
     {
         _logger.Error(string.Format("EQueue message synch send has exception, message: {0}, routingKey: {1}", message, routingKey), ex);
         throw;
     }
 }
示例#16
0
        static void Main(string[] args)
        {
            InitializeEQueue();

            var scheduleService = ObjectContainer.Resolve<IScheduleService>();
            var producer = new Producer().Start();
            var total = 1000;
            var parallelCount = 10;
            var finished = 0;
            var messageIndex = 0;
            var watch = Stopwatch.StartNew();

            var action = new Action(() =>
            {
                for (var index = 1; index <= total; index++)
                {
                    var message = "message" + Interlocked.Increment(ref messageIndex);
                    producer.SendAsync(new Message("SampleTopic", Encoding.UTF8.GetBytes(message)), index.ToString()).ContinueWith(sendTask =>
                    {
                        var finishedCount = Interlocked.Increment(ref finished);
                        if (finishedCount % 1000 == 0)
                        {
                            Console.WriteLine(string.Format("Sent {0} messages, time spent:{1}", finishedCount, watch.ElapsedMilliseconds));
                        }
                    });
                }
            });

            var actions = new List<Action>();
            for (var index = 0; index < parallelCount; index++)
            {
                actions.Add(action);
            }

            Parallel.Invoke(actions.ToArray());

            Console.ReadLine();
        }
示例#17
0
        static void SendMessages(Producer producer, string mode, int count, int sleepMilliseconds, int batchSize, Message message)
        {
            _logger.InfoFormat("----Send message starting, producerId:{0}----", producer.Id);

            if (mode == "Oneway")
            {
                for (var i = 1; i <= count; i++)
                {
                    TryAction(() => producer.SendOneway(message, message.Key));
                    var current = Interlocked.Increment(ref _sendingCount);
                    if (current % 10000 == 0)
                    {
                        _logger.InfoFormat("Sening {0} messages, timeSpent: {1}ms, throughput: {2}/s", current, _watch.ElapsedMilliseconds, current * 1000 / _watch.ElapsedMilliseconds);
                    }
                    WaitIfNecessory(current, batchSize, sleepMilliseconds);
                }
            }
            else if (mode == "Async")
            {
                for (var i = 1; i <= count; i++)
                {
                    TryAction(() => producer.SendAsync(message, message.Key, 100000).ContinueWith(SendCallback));
                    var current = Interlocked.Increment(ref _sendingCount);
                    WaitIfNecessory(current, batchSize, sleepMilliseconds);
                }
            }
            else if (mode == "Callback")
            {
                producer.RegisterResponseHandler(new ResponseHandler());
                for (var i = 1; i <= count; i++)
                {
                    TryAction(() => producer.SendWithCallback(message, message.Key));
                    var current = Interlocked.Increment(ref _sendingCount);
                    WaitIfNecessory(current, batchSize, sleepMilliseconds);
                }
            }
        }
示例#18
0
        static void Main(string[] args)
        {
            InitializeEQueue();

            var scheduleService = ObjectContainer.Resolve<IScheduleService>();
            var producer = new Producer("Producer1").Start();
            var total = 10000;
            var parallelCount = 10;

            var action = new Action(() =>
            {
                SendMessage(producer, new IndexEntry { Index = 1, Total = total });
            });

            var actions = new List<Action>();
            for (var index = 0; index < parallelCount; index++)
            {
                actions.Add(action);
            }

            Parallel.Invoke(actions.ToArray());

            Console.ReadLine();
        }
示例#19
0
        static Task SendMessageAsync(Producer producer, Message message, string routingKey)
        {
            return producer.SendAsync(message, routingKey).ContinueWith(t =>
            {
                if (t.Exception != null)
                {
                    _logger.ErrorFormat("Send message has exception, errorMessage: {0}", t.Exception.GetBaseException().Message);
                    return;
                }
                if (t.Result == null)
                {
                    _logger.Error("Send message timeout.");
                    return;
                }
                if (t.Result.SendStatus != SendStatus.Success)
                {
                    _logger.ErrorFormat("Send message failed, errorMessage: {0}", t.Result.ErrorMessage);
                    return;
                }

                _sendResultLogger.InfoFormat("Message send success, routingKey: {0}, sendResult: {1}", routingKey, t.Result);
                Interlocked.Increment(ref _sentCount);
            });
        }
示例#20
0
文件: Producer.cs 项目: haoas/equeue
 public ConnectionEventListener(Producer producer)
 {
     _producer = producer;
 }
 public CommandExecutedMessageSender(ProducerSetting setting, string id)
 {
     _producer = new Producer(setting, id);
     _binarySerializer = ObjectContainer.Resolve<IBinarySerializer>();
 }
示例#22
0
        static void SendMessageTest()
        {
            var serverAddress = ConfigurationManager.AppSettings["ServerAddress"];
            var mode = ConfigurationManager.AppSettings["Mode"];
            var brokerAddress = string.IsNullOrEmpty(serverAddress) ? SocketUtils.GetLocalIPV4() : IPAddress.Parse(serverAddress);
            var clientCount = int.Parse(ConfigurationManager.AppSettings["ClientCount"]);
            var messageSize = int.Parse(ConfigurationManager.AppSettings["MessageSize"]);
            var messageCount = int.Parse(ConfigurationManager.AppSettings["MessageCount"]);
            var sleepMilliseconds = int.Parse(ConfigurationManager.AppSettings["SleepMilliseconds"]);
            var batchSize = int.Parse(ConfigurationManager.AppSettings["BatchSize"]);
            var actions = new List<Action>();
            var payload = new byte[messageSize];
            var message = new Message("SampleTopic", 100, ObjectId.GenerateNewStringId(), payload);

            for (var i = 1; i <= clientCount; i++)
            {
                var producer = new Producer("Producer@" + i.ToString(), new ProducerSetting { BrokerAddress = new IPEndPoint(brokerAddress, 5000) }).Start();
                actions.Add(() => SendMessages(producer, mode, messageCount, sleepMilliseconds, batchSize, message));
            }

            _watch.Start();
            Task.Factory.StartNew(() => Parallel.Invoke(actions.ToArray()));
        }
示例#23
0
文件: Program.cs 项目: haoas/equeue
        static void SendMessages(Producer producer, string mode, int messageCount, Message message)
        {
            _logger.Info("----Send message starting----");

            var sendAction = default(Action<int>);

            if (_mode == "Oneway")
            {
                sendAction = index =>
                {
                    producer.SendOneway(message, index.ToString());
                    Interlocked.Increment(ref _sentCount);
                };
            }
            else if (_mode == "Sync")
            {
                sendAction = index =>
                {
                    var result = producer.Send(message, index.ToString());
                    if (result.SendStatus != SendStatus.Success)
                    {
                        throw new Exception(result.ErrorMessage);
                    }
                    Interlocked.Increment(ref _sentCount);
                };
            }
            else if (_mode == "Async")
            {
                sendAction = index => producer.SendAsync(message, index.ToString()).ContinueWith(t =>
                {
                    if (t.Exception != null)
                    {
                        _hasError = true;
                        _logger.ErrorFormat("Send message has exception, errorMessage: {0}", t.Exception.GetBaseException().Message);
                        return;
                    }
                    if (t.Result == null)
                    {
                        _hasError = true;
                        _logger.Error("Send message timeout.");
                        return;
                    }
                    if (t.Result.SendStatus != SendStatus.Success)
                    {
                        _hasError = true;
                        _logger.ErrorFormat("Send message failed, errorMessage: {0}", t.Result.ErrorMessage);
                        return;
                    }

                    Interlocked.Increment(ref _sentCount);
                });
            }
            else if (_mode == "Callback")
            {
                producer.RegisterResponseHandler(new ResponseHandler());
                sendAction = index => producer.SendWithCallback(message, index.ToString());
            }

            Task.Factory.StartNew(() =>
            {
                for (var i = 0; i < messageCount; i++)
                {
                    try
                    {
                        sendAction(i);
                    }
                    catch (Exception ex)
                    {
                        _hasError = true;
                        _logger.ErrorFormat("Send message failed, errorMsg:{0}", ex.Message);
                    }

                    if (_hasError)
                    {
                        Thread.Sleep(3000);
                        _hasError = false;
                    }
                }
            });
        }
示例#24
0
        static void SendMessage()
        {
            var brokerIP = ConfigurationManager.AppSettings["BrokerAddress"];
            var brokerEndPoint = string.IsNullOrEmpty(brokerIP) ? new IPEndPoint(SocketUtils.GetLocalIPV4(), 5000) : new IPEndPoint(IPAddress.Parse(brokerIP), 5000);
            var messageSize = int.Parse(ConfigurationManager.AppSettings["MessageSize"]);
            var connectionCount = int.Parse(ConfigurationManager.AppSettings["ConnectionCount"]);
            var flowControlCount = int.Parse(ConfigurationManager.AppSettings["FlowControlCount"]);
            var maxMessageCount = int.Parse(ConfigurationManager.AppSettings["MaxMessageCount"]);
            var payload = new byte[messageSize];
            var message = new Message("SampleTopic", 100, payload);
            var messageIndex = 0L;
            var sendingCount = 0L;
            var finishedCount = 0L;
            var previousFinishedCount = 0L;
            var previousElapsedMilliseconds = 0L;
            var flowControlledCount = 0;
            var watch = Stopwatch.StartNew();

            for (var i = 0; i < connectionCount; i++)
            {
                Task.Factory.StartNew(() =>
                {
                    var producer = new Producer("Producer@" + ObjectId.GenerateNewStringId(), new ProducerSetting { BrokerProducerIPEndPoint = brokerEndPoint }).Start();

                    while (true)
                    {
                        var waitingCount = sendingCount - finishedCount;
                        if (waitingCount > flowControlCount)
                        {
                            Thread.Sleep(1);
                            var current = Interlocked.Increment(ref flowControlledCount);
                            if (current % 1000 == 0)
                            {
                                _logger.InfoFormat("Start to flow control, pending messages: {0}, flow count: {1}", waitingCount, current);
                            }
                            continue;
                        }
                        producer.SendAsync(message, Interlocked.Increment(ref messageIndex), 300000).ContinueWith(sendTask =>
                        {
                            if (sendTask.Exception != null)
                            {
                                _logger.ErrorFormat("Sent message failed, errorMessage: {0}", sendTask.Exception.GetBaseException().Message);
                                return;
                            }
                            if (sendTask.Result.SendStatus == SendStatus.Success)
                            {
                                var currentFinishedCount = Interlocked.Increment(ref finishedCount);
                                if (currentFinishedCount % 10000 == 0)
                                {
                                    var currentElapsedMilliseconds = watch.ElapsedMilliseconds;
                                    _logger.InfoFormat("Sent {0} messages, time elapsed: {1}ms, current throughput: {2}, average throughput: {3}",
                                        currentFinishedCount,
                                        currentElapsedMilliseconds,
                                        (currentFinishedCount - previousFinishedCount) * 1000 / (currentElapsedMilliseconds - previousElapsedMilliseconds),
                                        currentFinishedCount * 1000 / currentElapsedMilliseconds);
                                    Interlocked.Exchange(ref previousFinishedCount, currentFinishedCount);
                                    Interlocked.Exchange(ref previousElapsedMilliseconds, currentElapsedMilliseconds);
                                }
                            }
                            else
                            {
                                _logger.ErrorFormat("Sent message failed, errorMessage: {0}", sendTask.Result.ErrorMessage);
                            }
                        });
                        var count = Interlocked.Increment(ref sendingCount);
                        if (count >= maxMessageCount)
                        {
                            break;
                        }
                    }
                });
            }
        }
示例#25
0
        static void StartProducer()
        {
            var producer = new Producer("Producer1").Start();
            var total = 1000;
            var parallelCount = 10;
            var finished = 0;
            var messageIndex = 0;
            var watch = Stopwatch.StartNew();

            var action = new Action(() =>
            {
                for (var index = 1; index <= total; index++)
                {
                    var message = "message" + Interlocked.Increment(ref messageIndex);
                    producer.SendAsync(new Message("SampleTopic", Encoding.UTF8.GetBytes(message)), index).ContinueWith(sendTask =>
                    {
                        var finishedCount = Interlocked.Increment(ref finished);
                        if (finishedCount % 1000 == 0)
                        {
                            _logger.InfoFormat("Sent {0} messages, time spent:{1}", finishedCount, watch.ElapsedMilliseconds);
                        }
                    });
                }
            });

            var actions = new List<Action>();
            for (var index = 0; index < parallelCount; index++)
            {
                actions.Add(action);
            }

            Parallel.Invoke(actions.ToArray());
        }
示例#26
0
 public ConnectionEventListener(Producer producer)
 {
     _producer = producer;
 }
 public DomainEventHandledMessageSender(ProducerSetting setting, string id)
 {
     _producer = new Producer(setting, id);
     _binarySerializer = ObjectContainer.Resolve<IBinarySerializer>();
 }
示例#28
0
        static void SendMessages()
        {
            var setting = new ProducerSetting
            {
                BrokerAddress = new IPEndPoint(SocketUtils.GetLocalIPV4(), 5000),
                BrokerAdminAddress = new IPEndPoint(SocketUtils.GetLocalIPV4(), 5002)
            };
            var producer = new Producer(setting).Start();
            var index = 0L;

            while (true)
            {
                var payload = Encoding.UTF8.GetBytes(index.ToString());
                var message = new Message("topic1", 100, payload);

                SendMessageAsync(producer, message, index.ToString());

                index++;
                Thread.Sleep(10);
            }
        }