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 { } }
private static void Failed(ProducerMessageImpl message, Exception exception) { if (exception is DuplicateMessageException) { Success(message); return; } message.Failed(exception); }
private void Add(ProducerMessageImpl message) { if (_queue == null) { _queue = new List <ProducerMessageImpl>(); } _queue.Add(message); message.Save(); }
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 { } }
private static void Success(ProducerMessageImpl message) { message.Success(); }