Example #1
0
 /// <summary>
 /// 创建一个工厂实例
 /// </summary>
 /// <param name="source">RabbitMq连接源</param>
 /// <param name="scope">对象生命周期管理器</param>
 /// <param name="logger">IDirectEventBus日志</param>
 /// <param name="logger2">ITopicEventBus日志</param>
 /// <param name="logger3">IFanoutEventBus日志</param>
 public EventBusFactory(DefaultMqConnectSource source, IServiceProvider scope, ILogger <IDirectEventBus> logger, ILogger <ITopicEventBus> logger2, ILogger <IFanoutEventBus> logger3)
 {
     DirectBusDic = new Dictionary <BusKey, IDirectEventBus>(BusKey.Compare);
     TopicBusDic  = new Dictionary <BusKey, ITopicEventBus>(BusKey.Compare);
     FanoutBusDic = new Dictionary <BusKey, IFanoutEventBus>(BusKey.Compare);
     //var defaultDirect = scope.GetService<IDirectEventBus>();
     //var defaultTopic = scope.GetService<ITopicEventBus>();
     //if (defaultDirect != null) DirectBusDic.Add(new BusKey() { brokerName = defaultDirect.BROKER_NAME, connName = defaultDirect.ConnectionName }, defaultDirect);
     //if (defaultTopic != null) TopicBusDic.Add(new BusKey() { brokerName = defaultTopic.BROKER_NAME, connName = defaultTopic.ConnectionName }, defaultTopic);
     _sp      = scope;
     _source  = source;
     _logger  = logger;
     _logger2 = logger2;
     _logger3 = logger3;
 }
Example #2
0
        /// <summary>
        /// 注册MQ连接字符串
        /// <para>格式:server=ip:port;user=username;password=pwd;vhost=vhostname;name=zs</para>
        /// eventsmgr=inmemory
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="action">创建MQ连接,可通过此方法创建多个连接;不同的连接通过name来区分</param>
        /// <param name="eventsManager">消息名称管理器</param>
        /// <param name="retryConnect">MQ断线重连尝试次数</param>
        /// <returns></returns>
        public static SoaServiceContainerBuilder UseRabbitMq(this SoaServiceContainerBuilder builder, Action <DefaultMqConnectSource> action, IAppEventsManager eventsManager = null, int retryConnect = 5)
        {
            lock (builder)
            {
                var obj = builder.GetTag(mqsettings);
                if (obj != null)
                {
                    throw new ArgumentException("can not  repeat register the rabbit-mq depend items");
                }
                builder.SetTag(mqsettings, new object());
            }
            var service = builder.Services;

            eventsManager ??= new DefaultEventsManager();
            service.AddSingleton(eventsManager);
            builder.Services.AddSingleton(sp =>
            {
                var subfact    = sp.GetService <IEventBusSubManagerFactory>();
                var connSource = new DefaultMqConnectSource(retryConnect, subfact);
                action.Invoke(connSource);
                return(connSource);
            });
            builder.Services.AddSingleton <IEventBusSubManagerFactory, InMemorySubFactory>(sp =>
            {
                var subfact = new InMemorySubFactory(eventsManager);
                return(subfact);
            });
            builder.Services.AddSingleton(sp =>
            {
                var source  = sp.GetService <DefaultMqConnectSource>();
                var l1      = sp.GetService <ILogger <IDirectEventBus> >();
                var l2      = sp.GetService <ILogger <ITopicEventBus> >();
                var l3      = sp.GetService <ILogger <IFanoutEventBus> >();
                var busfact = new EventBusFactory(source, sp, l1, l2, l3);
                return(busfact);
            });
            return(builder);
        }