public PublishPool(ILogger logger, IRabbitMQPersistentConnection persistentConnection, IEventSeralize seralize, string broker, bool allwaysEnableTrans) { BROKER_NAME = broker; __seralize = seralize; _logger = logger ?? throw new ArgumentNullException(nameof(logger), "not set logger"); _persistentConnection = persistentConnection; _allwaysEnableTrans = allwaysEnableTrans; CreatePublishChannel(); }
internal EventBusBase(ILogger <TEventBus> logger, IServiceProvider autofac, IEventSeralize seralize, IRabbitMQPersistentConnection persistentConnection, int cacheCount = 100) { _conn = persistentConnection ?? throw new ArgumentNullException(nameof(IRabbitMQPersistentConnection)); _conn.ConnectFail += Conn_ConnectFail; ConnectionName = _conn.Name; _logger = logger ?? throw new ArgumentNullException(nameof(ILogger <TEventBus>)); __seralize = seralize ?? throw new ArgumentNullException(nameof(IEventSeralize)); consumerInfos = new List <ConsumerConfig <TEventBus, TSub> >(); hanlerCacheMgr = new EventHanlerCacheMgr(cacheCount, autofac); _pub_sub = persistentConnection.SubsFactory.GetOrCreateByQueue("publish"); channels = new ThreadDispatcher <QueueItem <TEventBus, TSub> >(StartProcess, Math.Min(8, Environment.ProcessorCount / 2)) { UnCatchedException = LogError }; }
/// <summary> /// 创建指定序列化,连接地址,交换机名称的IDirectEventBus类型EventBus /// </summary> /// <param name="serializer"></param> /// <param name="connSource">连接名称,由连接字符串中的name指定</param> /// <param name="brokerName">交换机名称</param> /// <param name="length"></param> /// <returns></returns> public IDirectEventBus GetDirect(IEventSeralize serializer, string connSource = "", string brokerName = "", int length = 100) { var key = new BusKey(connSource, brokerName); if (DirectBusDic.TryGetValue(key, out IDirectEventBus bus)) { return(bus); } var conn = _source.Get(connSource) ?? throw new ArgumentNullException(nameof(IRabbitMQPersistentConnection)); var connname = conn.Name; DirectEventBus eventbus; if (string.IsNullOrEmpty(brokerName)) { eventbus = new DirectEventBus(_logger, _sp, conn, serializer, cacheCount: length); } else { eventbus = new DirectEventBus(brokerName, _logger, _sp, conn, serializer, cacheCount: length); } DirectBusDic.TryAdd(key, eventbus); return(eventbus); }
public TopicEventBusMQ(string brokerName, ILogger <ITopicEventBus> logger, IServiceProvider autofac, IRabbitMQPersistentConnection persistentConnection, IEventSeralize seralize, int cacheCount = 100) : base(logger, autofac, seralize, persistentConnection, cacheCount) { this.brokerName = brokerName ?? throw new ArgumentNullException(nameof(brokerName), "broker name can not be null"); persistentConnection.TryConnect(); var channel = persistentConnection.CreateModel(); channel.ExchangeDeclare(brokerName, "topic", true, false, null); channel.Dispose(); }
public TopicEventBusMQ(ILogger <ITopicEventBus> logger, IServiceProvider autofac, IRabbitMQPersistentConnection persistentConnection, IEventSeralize seralize, int cacheCount = 100) : base(logger, autofac, seralize, persistentConnection, cacheCount) { }
/// <summary> /// 创建默认的<see cref="IFanoutEventBus"/>实现 /// </summary> /// <param name="builder"></param> /// <param name="cacheLength"></param> /// <param name="seralizer">默认使用<see cref="DefaultYDSeralizer"/> UTF8编码</param> /// <param name="broker_name">交换机名称</param> /// <returns></returns> public static SoaServiceContainerBuilder UseFanoutEventBus(this SoaServiceContainerBuilder builder, int cacheLength = 0, IEventSeralize seralizer = null, string broker_name = "") { builder.Services.AddSingleton(sp => { var fact = sp.GetService <EventBusFactory>(); seralizer ??= new DefaultYDSeralizer(Encoding.UTF8); var bus = fact.GetFanout(seralizer, "", broker_name, cacheLength); return(bus); }); return(builder); }