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); }
public CommandHandler(IJimuConsumer <T> consumer, IJimuBus bus) { _consumer = consumer; _bus = bus; }
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 }); }); }); }); }
public BusService(IJimuBus bus, ILoggerFactory loggerFactory) { _bus = bus; _logger = loggerFactory.Create(this.GetType()); }
public MassTransitRabbitMqRequestContext(IJimuBus bus, T message) { JimuBus = bus; Message = message; }
public RequestHandler(IJimuRequestHandler <Req, Resp> handler, IJimuBus bus) { _handler = handler; _bus = bus; }
public MassTransitRabbitMqConsumeContext(IJimuBus bus, T message) { JimuBus = bus; Message = message; }
public EventHandler(IJimuSubscriber <T> consumer, IJimuBus bus) { _subscriber = consumer; _bus = bus; }
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); }
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); } }); }); }); }
public MassTransitRabbitMqSubscribeContext(IJimuBus bus, T message) { JimuBus = bus; Message = message; }
public BusService(IJimuBus bus, ILogger logger) { _bus = bus; _logger = logger; }