Пример #1
0
        public static bool InsertMessage(ProducerMessageImpl message, MessageStore messageStore)
        {
            try
            {
                if (!message.Base.Durable)
                {
                    return(false);
                }

                //默认 Durable 为true, 消息持久化,Store 对象为null 时
                if (messageStore == null)
                {
                    message.Base.Durable = false;
                    return(false);
                }
                message.MessageStore = messageStore;

                var transaction = Transaction.Current;
                if (transaction == null)
                {
                    try
                    {
                        message.Save();
                    }
                    catch (Exception e)
                    {
                        message.Base.StoreAtFailed = true;
                    }
                    return(false);
                }

                var map = Holder.Value;
                if (map == null)
                {
                    map          = new Dictionary <Transaction, TransactionMessageHolder>();
                    Holder.Value = map;
                }
                map.TryGetValue(transaction, out var container);
                if (container == null)
                {
                    container        = new TransactionMessageHolder();
                    map[transaction] = container;
                    transaction.TransactionCompleted += container.OnTransactionCompleted;
                }
                container.Add(message);
                return(true);
            }
            catch (Exception ex)
            {
                Logger.Error(ex, "TransactionMessageHolder InsertMessage error");
                throw;
            }
            finally
            {
            }
        }
Пример #2
0
        private static void Failed(ProducerMessageImpl message, Exception exception)
        {
            if (exception is DuplicateMessageException)
            {
                Success(message);
                return;
            }

            message.Failed(exception);
        }
Пример #3
0
        private void Add(ProducerMessageImpl message)
        {
            if (_queue == null)
            {
                _queue = new List <ProducerMessageImpl>();
            }

            _queue.Add(message);
            message.Save();
        }
Пример #4
0
 public void Send(ProducerMessageImpl message)
 {
     try
     {
         if (_queue.Add(message))
         {
         }
         else if (_queue.Add(message, 50))
         {
         }
         else
         {
             Failed(message, new EnqueueException(message.Base.MessageId));
         }
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw;
     }
     finally
     {
     }
 }
Пример #5
0
 private static void Success(ProducerMessageImpl message)
 {
     message.Success();
 }