public override async void DoServiceInit(IContainer container)
        {
            if (_options != null && _options.Enable)
            {
                var loggerFactory = container.Resolve <ILoggerFactory>();
                var logger        = loggerFactory.Create(this.GetType());
                _massTransitBus = MT.Bus.Factory.CreateUsingRabbitMq(sbc =>
                {
                    var host = sbc.Host($"rabbitmq://{_options.HostAddress}", h =>
                    {
                        if (!string.IsNullOrEmpty(_options.UserName))
                        {
                            h.Username(_options.UserName);
                            h.Password(_options.Password);
                        }

                        foreach (var pattern in _patternProvider.GetPatterns())
                        {
                            pattern.MasstransitConfig(sbc, container, logger, _bus, _options);
                        }
                    });
                });

                _bus = new MassTransitRabbitMqBus(_massTransitBus, _options);

                try
                {
                    await _massTransitBus.StartAsync(); // This is important!

                    logger.Info($"MassTransitRabbitMq start successfully: rabbitmq://{_options.HostAddress}, username: {_options.UserName}, password: {_options.Password}");
                }
                catch (Exception ex)
                {
                    logger.Error($"MassTransitRabbitMq start failed: rabbitmq://{_options.HostAddress}, username: {_options.UserName}, password: {_options.Password}", ex);
                }
            }
            base.DoServiceInit(container);
        }
Пример #2
0
 public CommandHandler(IJimuConsumer <T> consumer, IJimuBus bus)
 {
     _consumer = consumer;
     _bus      = bus;
 }
Пример #3
0
        public void MasstransitConfig(IRabbitMqBusFactoryConfigurator configurator, IContainer container, ILogger logger, IJimuBus bus, MassTransitOptions options)
        {
            //-- command consumer, extract queue name from command
            var groupConsumers = _consumers.GroupBy(x =>
            {
                var commandType     = x.GetTypeInfo().ImplementedInterfaces.First().GenericTypeArguments.First();
                var commandInstance = container.Resolve(commandType);
                if (commandInstance == null)
                {
                    throw new Exception($"JimuCommand: {commandType.FullName} resolve failure");
                }
                var commandQueueName = commandInstance.GetType().InvokeMember("QueueName", BindingFlags.GetProperty, null, commandInstance, null) + "";
                if (string.IsNullOrWhiteSpace(commandQueueName))
                {
                    throw new Exception($"JimuCommand: {commandType.FullName} must specify QueueName property");
                }
                return(commandQueueName);
            });

            groupConsumers.ToList().ForEach(x =>
            {
                configurator.ReceiveEndpoint(x.Key, ep =>
                {
                    logger.Debug($"MassTransitRabbitMq: CommandQueueName: { x.Key}, consumers count: {x.Count()}");
                    x.ToList().ForEach(consumer =>
                    {
                        var commandType      = consumer.GetTypeInfo().ImplementedInterfaces.First().GenericTypeArguments.First();
                        var handlerMethod    = typeof(HandlerExtensions).GetMethod("Handler").MakeGenericMethod(commandType);
                        var consumerInstance = container.Resolve(consumer);
                        var myHandlerObj     = Activator.CreateInstance(typeof(CommandHandler <>).MakeGenericType(commandType), new object[] { consumerInstance, bus });
                        var consumerHandler  = myHandlerObj.GetType().InvokeMember("Handler", BindingFlags.GetProperty, null, myHandlerObj, null);
                        var fastInvoker      = FastInvoke.GetMethodInvoker(handlerMethod);
                        fastInvoker.Invoke(null, new object[] { ep, consumerHandler, null });
                    });
                });
            });
        }
Пример #4
0
 public BusService(IJimuBus bus, ILoggerFactory loggerFactory)
 {
     _bus    = bus;
     _logger = loggerFactory.Create(this.GetType());
 }
 public MassTransitRabbitMqRequestContext(IJimuBus bus, T message)
 {
     JimuBus = bus;
     Message = message;
 }
Пример #6
0
 public RequestHandler(IJimuRequestHandler <Req, Resp> handler, IJimuBus bus)
 {
     _handler = handler;
     _bus     = bus;
 }
Пример #7
0
 public MassTransitRabbitMqConsumeContext(IJimuBus bus, T message)
 {
     JimuBus = bus;
     Message = message;
 }
Пример #8
0
 public EventHandler(IJimuSubscriber <T> consumer, IJimuBus bus)
 {
     _subscriber = consumer;
     _bus        = bus;
 }
Пример #9
0
        public void MasstransitConfig(IRabbitMqBusFactoryConfigurator configurator, IContainer container, ILogger logger, IJimuBus bus, MassTransitOptions _options)
        {
            if (_subscribers.Any())
            {
                //-- event subscriber, generate default event queue, if not specify in options

                var eventQueueName = string.IsNullOrEmpty(_options.EventQueueName) ? $"{AppDomain.CurrentDomain.FriendlyName}-{Guid.NewGuid()}" : _options.EventQueueName;

                configurator.ReceiveEndpoint(eventQueueName, ep =>
                {
                    _subscribers.ForEach(subscriber =>
                    {
                        var subscriberType     = subscriber.GetTypeInfo().ImplementedInterfaces.First().GenericTypeArguments.First();
                        var handlerMethod      = typeof(HandlerExtensions).GetMethod("Handler").MakeGenericMethod(subscriberType);
                        var subscriberInstance = container.Resolve(subscriber);
                        var myHandlerObj       = Activator.CreateInstance(typeof(EventHandler <>).MakeGenericType(subscriberType), new object[] { subscriberInstance, bus });
                        var eventHandler       = myHandlerObj.GetType().InvokeMember("Handler", BindingFlags.GetProperty, null, myHandlerObj, null);
                        var fastInvoker        = FastInvoke.GetMethodInvoker(handlerMethod);
                        fastInvoker.Invoke(null, new object[] { ep, eventHandler, null });
                    });
                });
                logger.Debug($"MassTransitRabbitMq: EventQueueName: { eventQueueName}, subscribers count: {_subscribers.Count()}");
            }
        }
        public override async void DoServiceInit(IContainer container)
        {
            if (_options != null && _options.Enable)
            {
                var logger = container.Resolve <ILogger>();
                _massTransitBus = MT.Bus.Factory.CreateUsingRabbitMq(sbc =>
                {
                    var host = sbc.Host($"rabbitmq://{_options.HostAddress}", h =>
                    {
                        if (!string.IsNullOrEmpty(_options.UserName))
                        {
                            h.Username(_options.UserName);
                            h.Password(_options.Password);
                        }
                    });

                    if (_subscribers.Any())
                    {
                        //-- event subscriber, generate default event queue, if not specify in options

                        var eventQueueName = string.IsNullOrEmpty(_options.EventQueueName) ? $"{AppDomain.CurrentDomain.FriendlyName}-{Guid.NewGuid()}" : _options.EventQueueName;


                        sbc.ReceiveEndpoint(eventQueueName, ep =>
                        {
                            _subscribers.ForEach(subscriber =>
                            {
                                var subscriberType     = subscriber.GetTypeInfo().ImplementedInterfaces.First().GenericTypeArguments.First();
                                var handlerMethod      = typeof(HandlerExtensions).GetMethod("Handler").MakeGenericMethod(subscriberType);
                                var subscriberInstance = container.Resolve(subscriber);
                                var myHandlerObj       = Activator.CreateInstance(typeof(EventHandler <>).MakeGenericType(subscriberType), new object[] { subscriberInstance, _bus });
                                var eventHandler       = myHandlerObj.GetType().InvokeMember("Handler", BindingFlags.GetProperty, null, myHandlerObj, null);
                                var fastInvoker        = FastInvoke.GetMethodInvoker(handlerMethod);
                                fastInvoker.Invoke(null, new object[] { ep, eventHandler, null });
                            });
                        });
                        logger.Debug($"MassTransitRabbitMq: EventQueueName: { eventQueueName}, subscribers count: {_subscribers.Count()}");
                    }


                    //-- command consumer, extract queue name from command
                    var groupConsumers = _consumers.GroupBy(x =>
                    {
                        var commandType     = x.GetTypeInfo().ImplementedInterfaces.First().GenericTypeArguments.First();
                        var commandInstance = container.Resolve(commandType);
                        if (commandInstance == null)
                        {
                            throw new Exception($"JimuCommand: {commandType.FullName} resolve failure");
                        }
                        var commandQueueName = commandInstance.GetType().InvokeMember("QueueName", BindingFlags.GetProperty, null, commandInstance, null) + "";
                        if (string.IsNullOrEmpty(commandQueueName))
                        {
                            throw new Exception($"JimuCommand: {commandType.FullName} must specify QueueName property");
                        }
                        return(commandQueueName);
                    });
                    groupConsumers.ToList().ForEach(x =>
                    {
                        sbc.ReceiveEndpoint(x.Key, ep =>
                        {
                            logger.Debug($"MassTransitRabbitMq: CommandQueueName: { x.Key}, consumers count: {x.Count()}");
                            x.ToList().ForEach(consumer =>
                            {
                                var commandType      = consumer.GetTypeInfo().ImplementedInterfaces.First().GenericTypeArguments.First();
                                var handlerMethod    = typeof(HandlerExtensions).GetMethod("Handler").MakeGenericMethod(commandType);
                                var consumerInstance = container.Resolve(consumer);
                                var myHandlerObj     = Activator.CreateInstance(typeof(CommandHandler <>).MakeGenericType(commandType), new object[] { consumerInstance, _bus });
                                var consumerHandler  = myHandlerObj.GetType().InvokeMember("Handler", BindingFlags.GetProperty, null, myHandlerObj, null);
                                var fastInvoker      = FastInvoke.GetMethodInvoker(handlerMethod);
                                fastInvoker.Invoke(null, new object[] { ep, consumerHandler, null });
                            });
                        });
                    });
                });

                _bus = new MassTransitRabbitMqBus(_massTransitBus);


                try
                {
                    await _massTransitBus.StartAsync(); // This is important!

                    logger.Info($"MassTransitRabbitMq start successfully: rabbitmq://{_options.HostAddress}, username: {_options.UserName}, password: {_options.Password}");
                }
                catch (Exception ex)
                {
                    logger.Error($"MassTransitRabbitMq start failed: rabbitmq://{_options.HostAddress}, username: {_options.UserName}, password: {_options.Password}", ex);
                }
            }
            base.DoServiceInit(container);
        }
Пример #11
0
        public void MasstransitConfig(IRabbitMqBusFactoryConfigurator configurator, IContainer container, ILogger logger, IJimuBus bus, MassTransitOptions options)
        {
            //-- request handler, extract queue name from request
            var groupHandlers = _requestHandlers.GroupBy(x =>
            {
                var requestType     = x.GetTypeInfo().ImplementedInterfaces.First().GenericTypeArguments.First();
                var requestInstance = container.Resolve(requestType);
                if (requestInstance == null)
                {
                    throw new Exception($"JimuRequest: {requestType.FullName} resolve failure");
                }
                var requestQueueName = requestInstance.GetType().InvokeMember("QueueName", BindingFlags.GetProperty, null, requestInstance, null) + "";
                if (string.IsNullOrWhiteSpace(requestQueueName))
                {
                    throw new Exception($"JimuRequest: {requestType.FullName} must specify QueueName property");
                }
                return(requestQueueName);
            });


            groupHandlers.ToList().ForEach(x =>
            {
                configurator.ReceiveEndpoint(x.Key, ep =>
                {
                    logger.Debug($"MassTransitRabbitMq: RequestQueueName: { x.Key}, handler count: {x.Count()}");
                    x.ToList().ForEach(handler =>
                    {
                        var requestType     = handler.GetTypeInfo().ImplementedInterfaces.First().GenericTypeArguments.First();
                        var respType        = handler.GetTypeInfo().ImplementedInterfaces.First().GenericTypeArguments[1];
                        var handlerMethod   = typeof(HandlerExtensions).GetMethod("Handler").MakeGenericMethod(requestType);
                        var requestInstance = container.Resolve(handler);
                        var myHandlerObj    = Activator.CreateInstance(typeof(RequestHandler <,>).MakeGenericType(requestType, respType), new object[] { requestInstance, bus });
                        var requestHandler  = myHandlerObj.GetType().InvokeMember("Handler", BindingFlags.GetProperty, null, myHandlerObj, null);
                        var fastInvoker     = FastInvoke.GetMethodInvoker(handlerMethod);
                        try
                        {
                            fastInvoker.Invoke(null, new object[] { ep, requestHandler, null });
                        }
                        catch (Exception ex)
                        {
                            logger.Error($"error occure when handling RabbitMq request: {x.Key}", ex);
                        }
                    });
                });
            });
        }
Пример #12
0
 public MassTransitRabbitMqSubscribeContext(IJimuBus bus, T message)
 {
     JimuBus = bus;
     Message = message;
 }
Пример #13
0
 public BusService(IJimuBus bus, ILogger logger)
 {
     _bus    = bus;
     _logger = logger;
 }