Beispiel #1
0
        public async Task SendAsync(global::EQueue.Protocols.Message equeueMessage, string key, CancellationToken cancellationToken)
        {
            if (key == null)
            {
                key = string.Empty;
            }

            var retryTimes = 0;

            while (true)
            {
                cancellationToken.ThrowIfCancellationRequested();

                retryTimes++;
                // 每次发送失败后线性增长等待发送时间 如: 5s, 10s, 15s, 20s .... max:5 minutes
                var waitTime = Math.Min(retryTimes * 1000 * 5, 60000 * 5);
                try
                {
                    var result = await Producer.SendAsync(equeueMessage, key)
                                 .ConfigureAwait(false);

                    if (result.SendStatus != SendStatus.Success)
                    {
                        _logger.Error($"send message failed topic: {equeueMessage.Topic} key:{key} error:{result.ErrorMessage}");
                        await Task.Delay(waitTime, cancellationToken);
                    }
                }
                catch (Exception e)
                {
                    _logger.Error($"send message failed topic: {equeueMessage.Topic} key:{key}", e);
                    await Task.Delay(waitTime, cancellationToken);
                }
            }
        }
Beispiel #2
0
        public void Send(global::EQueue.Protocols.Message equeueMessage, string key)
        {
            if (key == null)
            {
                key = string.Empty;
            }
            var result = Producer.Send(equeueMessage, key);

            if (result.SendStatus != SendStatus.Success)
            {
                throw new Exception(result.ErrorMessage);
            }
        }