コード例 #1
0
 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();
 }
コード例 #2
0
 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
     };
 }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        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();
        }
コード例 #5
0
 public TopicEventBusMQ(ILogger <ITopicEventBus> logger, IServiceProvider autofac, IRabbitMQPersistentConnection persistentConnection, IEventSeralize seralize, int cacheCount = 100)
     : base(logger, autofac, seralize, persistentConnection, cacheCount)
 {
 }
コード例 #6
0
 /// <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);
 }