private void ModelOnBasicReturn(object sender, BasicReturnEventArgs args)
        {
            if (LogAdapter.LogEnabled)
            {
                LogAdapter.LogDebug("RabbitChannel",
                                    "Message dropped. Message sent to exchange " + args.Exchange + " with routing key " + args.RoutingKey,
                                    null);
            }

            var ev = this.MessageUnrouted;

            if (ev == null)
            {
                return;
            }

            var envelope  = new MessageEnvelope(args.BasicProperties, args.Body);
            var eventArgs = new     MessageUnroutedEventArgs()
            {
                MessageEnvelope = envelope,
                Exchange        = args.Exchange,
                ReplyCode       = args.ReplyCode,
                ReplyText       = args.ReplyText,
                RoutingKey      = args.RoutingKey
            };

            ev(eventArgs);
        }
Example #2
0
        private void ModelOnBasicReturn(object sender, BasicReturnEventArgs e)
        {
            _logger.Debug(
                $"Return, code: {e.ReplyCode}, message: {e.ReplyText},  message id:{e.BasicProperties.MessageId}");

            _handler.MessageReturn(e);
        }
        private void OnBasicReturn(object?model, BasicReturnEventArgs args)
        {
            if (_logTraceEnabled)
            {
                _logger?.LogDebug(
                    "BasicReturn: {ReplyCode}-{ReplyText} {MessageId}",
                    args.ReplyCode,
                    args.ReplyText,
                    args.BasicProperties.MessageId
                    );
            }

            if (args.BasicProperties != null &&
                args.BasicProperties.Headers.TryGetValue("publishTag", out var value) &&
                value is byte[] bytes)
            {
                if (!ulong.TryParse(Encoding.UTF8.GetString(bytes), out var id))
                {
                    return;
                }

                if (_publishTasks.TryRemove(id, out var published))
                {
                    _logger?.LogWarning("returned! with {PublishTag}", id);

                    published.PublishReturned(args.ReplyCode, args.ReplyText);
                }
            }
        }
 void OnBasicReturn(object model, BasicReturnEventArgs args)
 {
     if (_log.IsDebugEnabled)
     {
         _log.DebugFormat("BasicReturn: {0}-{1} {2}", args.ReplyCode, args.ReplyText, args.BasicProperties.MessageId);
     }
 }
        void OnBasicReturn(object model, BasicReturnEventArgs args)
        {
            LogContext.Debug?.Log("BasicReturn: {ReplyCode}-{ReplyText} {MessageId}", args.ReplyCode, args.ReplyText, args.BasicProperties.MessageId);

            if (_confirmations == null)
            {
                return;
            }

            if (!args.BasicProperties.Headers.TryGetValue("publishId", out var value))
            {
                return;
            }

            var deliveryTag = value switch
            {
                byte[] bytes when ulong.TryParse(Encoding.UTF8.GetString(bytes), out var id) => id,
                string s when ulong.TryParse(s, out var id) => id,
                _ => default
            };

            if (deliveryTag != 0)
            {
                _confirmations.Returned(deliveryTag, args.ReplyCode, args.ReplyText);
            }
        }
Example #6
0
 private void Channel_BasicReturn(IModel model, BasicReturnEventArgs args)
 {
     if (_onReturn != null)
     {
         _onReturn(model, args);
     }
 }
Example #7
0
        private void Model_BasicReturn(object sender, BasicReturnEventArgs e)
        {
            // Called when a message was pushed to the queue, but no consumers were availble to receive it
            // This only gets called if the message was pushed with the Mandatory Flag!

            // We should look to use this to detect if there are no proxy clients running!
        }
Example #8
0
        private void ModelOnBasicReturn(object sender, BasicReturnEventArgs args)
        {
            DataContractKey dataContractKey = args.BasicProperties.GetDataContractKey();

            Type dataType = _sendHelper.GetDataType(dataContractKey);

            if (dataType == null)
            {
                dataContractKey = DataContractKey.BinaryBlob;
            }

            object data;

            if (dataContractKey.Equals(DataContractKey.BinaryBlob))
            {
                data = args.Body;
            }
            else
            {
                data = _configuration.Serializer.Deserialize(dataType, args.Body);
            }

            RawBusMessage message = _messageHelper.ConstructMessage(dataContractKey, args.BasicProperties, data);

            OnMessageReturn(args.ReplyCode, args.ReplyText, message);
        }
Example #9
0
 private void OnBasicReturn(object sender, BasicReturnEventArgs e)
 {
     if (e.BasicProperties.ReplyTo == _topic && e.BasicProperties.CorrelationId == _correlationId)
     {
         TearDown();
     }
 }
Example #10
0
        void OnBasicReturn(object model, BasicReturnEventArgs args)
        {
            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("BasicReturn: {0}-{1} {2}", args.ReplyCode, args.ReplyText, args.BasicProperties.MessageId);
            }

            object value;

            if (args.BasicProperties.Headers.TryGetValue("publishId", out value))
            {
                var bytes = value as byte[];
                if (bytes == null)
                {
                    return;
                }

                ulong id;
                if (!ulong.TryParse(Encoding.UTF8.GetString(bytes), out id))
                {
                    return;
                }

                PendingPublish published;
                if (_published.TryRemove(id, out published))
                {
                    published.PublishReturned(args.ReplyCode, args.ReplyText);
                }
            }
        }
        public virtual void OnBasicReturn(BasicReturnEventArgs args)
        {
            BasicReturnEventHandler handler;

            lock (m_eventLock)
            {
                handler = m_basicReturn;
            }
            if (handler != null)
            {
                foreach (BasicReturnEventHandler h in handler.GetInvocationList())
                {
                    try
                    {
                        h(this, args);
                    }
                    catch (Exception e)
                    {
                        CallbackExceptionEventArgs exnArgs = new CallbackExceptionEventArgs(e);
                        exnArgs.Detail["context"] = "OnBasicReturn";
                        OnCallbackException(exnArgs);
                    }
                }
            }
        }
Example #12
0
 private void ModelOnBasicReturn(object sender, BasicReturnEventArgs args)
 {
     using (Message message = _encoder.ReadMessage(new MemoryStream(args.Body), int.MaxValue))
     {
         _messageProcessor.Process(args.ReplyCode, args.ReplyText, message);
     }
 }
        public void ReturnHandler(object obj, BasicReturnEventArgs args)
        {
            string rs = Encoding.UTF8.GetString(args.Body.ToArray());

            Dispatcher.Invoke(() =>
            {
                tbRcv.Text += $"{rs}发送失败;退货码:{args.ReplyCode};退货说明:{args.ReplyText} \n";
            });
        }
Example #14
0
 private static void Channel_BasicReturn(object sender, BasicReturnEventArgs e)
 {
     if (e.ReplyText == "NO_ROUTE")
     {
         //GetChannel().QueueDeclare(e.RoutingKey, HWL_DEFAULT_EXCHANGE, e.RoutingKey, null);
         ////重新发送
         //SendMessage(e.RoutingKey, e.Body);
     }
 }
Example #15
0
        private void BasicReturnEvent(object sender, BasicReturnEventArgs ea)
        {
            logger.LogDebug($"{nameof(BasicReturnEvent)}: Channel " +
                            $"{channel.ChannelNumber} returned message " +
                            "{MessageId} with reply {MessageReturnedReason}",
                            ea.BasicProperties.MessageId, $"{ea.ReplyCode}-{ea.ReplyText}");

            missingRoute = (ea.ReplyCode == MissingRoute);
        }
Example #16
0
        /// <summary>
        /// This method is subscribed to the the event BasicReturn from the channel instance.
        /// </summary>
        /// <param name="sender">Represents the sender of the event.</param>
        /// <param name="e">Represents the event arguments.</param>
        private void MqBasicReturn(object sender, BasicReturnEventArgs e)
        {
            Console.WriteLine(sender);
            Console.WriteLine(e);

            string message    = Encoding.UTF8.GetString(e.Body);
            string routingKey = e.RoutingKey;

            Console.WriteLine("NOT DELIVERED: Agent: [ {0} ] Message: [ {1} ] ", routingKey, message);
        }
Example #17
0
 // return类似于nack,不同在于return通常代表着unroutable,
 // 所以log一下但并不会重试,消息的状态也直接置为终结态Error_Unroutable:5
 private void Channel_BasicReturn(object sender, BasicReturnEventArgs e)
 {
     _repository.Update(new UpdateParam
     {
         MsgId      = e.BasicProperties.MessageId,
         OldState   = MessageState.Created,
         NewState   = MessageState.Error_Unroutable,
         Remark     = $"Broker Return,ReplyCode:{e.ReplyCode},ReplyText:{e.ReplyText}",
         ModifyTime = DateTime.Now
     });
 }
Example #18
0
        private void OnReturn(object sender, BasicReturnEventArgs args)
        {
            var returnedMessageEvent = new ReturnedMessageEvent(
                (IModel)sender,
                args.Body.ToArray(),
                new MessageProperties(args.BasicProperties),
                new MessageReturnedInfo(args.Exchange, args.RoutingKey, args.ReplyText)
                );

            eventBus.Publish(returnedMessageEvent);
        }
Example #19
0
        void Channel_BasicReturn(object sender, BasicReturnEventArgs e)
        {
            var message = $"Message could not be routed to {e.Exchange + e.RoutingKey}: {e.ReplyCode} {e.ReplyText}";

            if (e.BasicProperties.TryGetConfirmationId(out var deliveryTag))
            {
                SetException(deliveryTag, message);
            }
            else
            {
                Logger.Warn(message);
            }
        }
Example #20
0
 private void Fatal(BasicReturnEventArgs a)
 {
     lock (_oSendLock)
     {
         if (OnFatal != null)
         {
             OnFatal.Invoke(this, a);
         }
         else
         {
             throw new ApplicationException("No subscribers for fatal error event");
         }
     }
 }
Example #21
0
        /// <summary>
        /// 这个事件就是用来监听我们一些不可达的消息的内容的:比如某些情况下,如果我们在发送消息时,当前的exchange不存在或者指定的routingkey路由不到,这个时候如果要监听这种不可达的消息,就要使用 return
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void BasicReturnEventHandler(object?o, BasicReturnEventArgs basic)
        {
            var rc  = basic.ReplyCode;                               //消息失败的code
            var rt  = basic.ReplyText;                               //描述返回原因的文本。
            var msg = Encoding.UTF8.GetString(basic.Body.ToArray()); //失败消息的内容
                                                                     //在这里我们可能要对这条不可达消息做处理,比如是否重发这条不可达的消息呀,或者这条消息发送到其他的路由中呀,等等
                                                                     //System.IO.File.AppendAllText("d:/return.txt", "调用了Return;ReplyCode:" + rc + ";ReplyText:" + rt + ";Body:" + msg);

            MQWebApiMsg Data = Newtonsoft.Json.JsonConvert.DeserializeObject <MQWebApiMsg>(msg);

            PushErrorEvent?.Invoke(Data);

            Log.WriteLine($"异常事件 BasicReturn: ReplyCode:{rc};ReplyText:{rt};Body:{msg},all:{Newtonsoft.Json.JsonConvert.SerializeObject(basic)}");
            //Console.WriteLine($"-------- BasicReturn: ReplyCode:{rc};ReplyText:{rt};Body:{msg}");
        }
Example #22
0
        public void HandleBasicReturn(ushort replyCode,
                                      string replyText,
                                      string exchange,
                                      string routingKey,
                                      IBasicProperties basicProperties,
                                      byte[] body)
        {
            BasicReturnEventArgs e = new BasicReturnEventArgs();

            e.ReplyCode       = replyCode;
            e.ReplyText       = replyText;
            e.Exchange        = exchange;
            e.RoutingKey      = routingKey;
            e.BasicProperties = basicProperties;
            e.Body            = body;
            OnBasicReturn(e);
        }
Example #23
0
        private void ModelOnBasicReturn(object sender, BasicReturnEventArgs args)
        {
            DataContractKey dataContractKey = args.BasicProperties.GetDataContractKey();

            Type dataType = _nameMappings.Where(pair => pair.Value.Equals(dataContractKey)).Select(pair => pair.Key).FirstOrDefault();

            if (dataType == null)
            {
                dataContractKey = DataContractKey.BinaryBlob;
            }

            object data = _configuration.Serializer.Deserialize(dataContractKey, dataType, args.Body);

            RawBusMessage message = _messageHelper.ConstructMessage(dataContractKey, args.BasicProperties, data);

            _configuration.ErrorHandler.DeliveryFailed(args.ReplyCode, args.ReplyText, message);
        }
Example #24
0
        public void Handler(object sender, BasicReturnEventArgs e, IPublishedMessageStore publishedMessageStore)
        {
            using (var tx = publishedMessageStore.BeginTransaction())
            {
                string body = Encoding.UTF8.GetString(e.Body);

                RmqPublishMessage returnedMessage = JsonConvert.DeserializeObject <RmqPublishMessage>(body);

                RmqPublishMessage foundMessage = publishedMessageStore.GetByMessageId(returnedMessage.MessageId);

                foundMessage.Status       = MessageStatusConstants.Unroutable;
                foundMessage.StatusReason = e.ReplyText;

                publishedMessageStore.Update(foundMessage);

                publishedMessageStore.Commit(tx);
            }
        }
Example #25
0
        private void BasicReturn(object sender, BasicReturnEventArgs e)
        {
            byte[] body       = e.Body;
            string message    = Encoding.UTF8.GetString(body);
            var    parameters = new Dictionary <string, object>
            {
                { "exchange", e.Exchange }
                , { "routingKey", e.RoutingKey }
            };

            _logger.LogError("BasicReturn message has been received from RabbitMQ. Session {@Sender} BasicReturnEventArgs {ReplyText} {ReplyCode} {EventName} {@Parameters} {Message}"
                             , sender.ToString()
                             , e.ReplyText
                             , e.ReplyCode
                             , e.BasicProperties.Type
                             , parameters
                             , message);
        }
Example #26
0
        private void ChannelOnBasicReturn(object sender, BasicReturnEventArgs ea)
        {
            var body = Encoding.UTF8.GetString(ea.Body);

            _Logger.LogError("Sending message to the broker failed. Body: {0}", body);

            CleanOutstandingConfirms(body);

            if (IsReSent(ea))
            {
                Send(SystemEventType.DeadEnd, body);
                _Logger.LogError("Resend to dead letter. Body: {0}", body);
            }
            else
            {
                SendToQueue(ea.RoutingKey, body, true);
                _Logger.LogError("Resend to current queue. Body: {0}, queue {1}", body, ea.RoutingKey);
            }
        }
Example #27
0
 public void MessageReturn(BasicReturnEventArgs info)
 {
     if (info.BasicProperties.Headers.TryGetValue(CorrelationHeader, out var correlationValue))
     {
         try
         {
             var correlationId = correlationValue is string
                                 ?(string)correlationValue
                                 : Encoding.UTF8.GetString(correlationValue as byte[]);
             if (correlationId != null)
             {
                 _ackQueue.Return(correlationId, info.ReplyText);
             }
         }
         catch
         {
             // no-op
         }
     }
 }
        internal void ConfigureEvents(IModel model)
        {
            if (BasicReturnCallback != null)
            {
                model.BasicReturn += (sender, args) =>
                {
                    var transportMessage = RabbitMqTransport.CreateTransportMessage(args.BasicProperties, args.Body);

                    var eventArgs = new BasicReturnEventArgs(
                        transportMessage,
                        args.Exchange,
                        args.ReplyCode,
                        args.ReplyText,
                        args.RoutingKey
                        );

                    BasicReturnCallback(sender, eventArgs);
                };
            }
        }
        void Channel_BasicReturn(object sender, BasicReturnEventArgs e)
        {
            Task.Run(() =>
            {
                var message = $"Message could not be routed to {e.Exchange + e.RoutingKey}: {e.ReplyCode} {e.ReplyText}";

                ulong deliveryTag;

                if (e.BasicProperties.TryGetConfirmationId(out deliveryTag))
                {
                    TaskCompletionSource <bool> tcs;
                    messages.TryRemove(deliveryTag, out tcs);

                    tcs?.SetException(new Exception(message));
                }
                else
                {
                    Logger.Warn(message);
                }
            });
        }
        void OnBasicReturn(object model, BasicReturnEventArgs args)
        {
            LogContext.Debug?.Log("BasicReturn: {ReplyCode}-{ReplyText} {MessageId}", args.ReplyCode, args.ReplyText, args.BasicProperties.MessageId);

            if (args.BasicProperties.Headers.TryGetValue("publishId", out var value))
            {
                var bytes = value as byte[];
                if (bytes == null)
                {
                    return;
                }

                if (!ulong.TryParse(Encoding.UTF8.GetString(bytes), out var id))
                {
                    return;
                }

                if (_published.TryRemove(id, out var published))
                {
                    published.PublishReturned(args.ReplyCode, args.ReplyText);
                }
            }
        }