/// <summary> /// 常见Messanger抽象类 /// </summary> /// <param name="option"></param> protected Messenger(MessengerOption option) { this.Option = option; // 初始化i18n模块 I18NOption i18NOption = new I18NOption(typeof(Messenger).Assembly, "i18n_messenger_zh", "i18n_messenger_en") { Name = UtilityConstants.MessengerName }; I18N.InitInstance(i18NOption); this._messageDispatcher = new MessageDispatcher(this); }
public JsonMessageFormatter(MessengerOption option, Encoding encoding) { this.encoding = encoding; this._option = option; _serializerSettings = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Include, DateFormatHandling = DateFormatHandling.IsoDateFormat, DateFormatString = CommonConst.GlobalTimeFormat, DateParseHandling = DateParseHandling.None }; }
/// <summary> /// 使用option获取已配置的信使类 /// </summary> public static Messenger GetMessenger(MessengerOption option) { Messenger messenger = null; //此处不存在并发写入的同一个元素的情况,所以未加锁保护 if (null != (messenger = _messengers.FirstOrDefault(item => item.Option.Equals(option)))) { return(messenger); } lock (_lock) { Thread.MemoryBarrier(); if (null != (messenger = _messengers.FirstOrDefault(item => item.Option.Equals(option)))) { return(messenger); } switch (option.Type) { case MessengerType.MSMQ: messenger = new MsmqMessenger(option); break; case MessengerType.Kafka: // TODO 待实现 throw new NotImplementedException(); break; default: throw new NotImplementedException(); break; } messenger.Initialize(); _messengers.Add(messenger); return(messenger); } }
/// <summary> /// 判断两个Option是否相等 /// </summary> /// <param name="comparer">待比较对象</param> public bool Equals(MessengerOption comparer) { return(this.Path.Equals(comparer.Path) && this.HostAddress.Equals(comparer.HostAddress) && this.Type == comparer.Type); }
/// <summary> /// 是否包含某个Messenger的声明 /// </summary> public static bool Exist(MessengerOption option) { return(null != _messengers.FirstOrDefault(item => item.Option.Equals(option))); }