private void ConfigureMessageQueueProvider(ConfigurationContext context) { var serializer = new MessagingSerializer(typeof(AdoNetMessageDto)); _messageQueueProvider = new AdoNetMessageQueueProvider(() => context.ConnectionFactory(_systemPrincipal), serializer); }
private QueueListener ConfigureQueueListener(ConfigurationContext context, string inboundQueueName, string outboundQueueName) { var inboundQueue = _messageQueueProvider.Open(inboundQueueName); var outboundQueue = inboundQueueName == outboundQueueName ? inboundQueue : _messageQueueProvider.Open(outboundQueueName); var scopeFactory = new ScopeWrapper(context.ServiceProvider); var router = new MessageRouter { ReportAnalyzerQueue = outboundQueue, AppQueue = _messageQueueProvider.Open("Messaging") }; var listener = new QueueListener(inboundQueue, router, scopeFactory) { RetryAttempts = new[] { TimeSpan.FromMilliseconds(500), TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2) }, MessageInvokerFactory = scope => { var invoker = new MessageInvoker(scope); invoker.Logger += (level, name, message) => _logger.Debug("[" + name + "] " + message); invoker.InvokingHandler += (sender, args) => { _logger.Debug( $"Invoking {JsonConvert.SerializeObject(args.Message)} ({args.Handler.GetType()})."); }; return(invoker); }, Logger = DiagnosticLog }; listener.PoisonMessageDetected += (sender, args) => { Err.Report(args.Exception, new { args.Message.Body }); _logger.Error(inboundQueueName + " Poison message: " + args.Message.Body, args.Exception); }; listener.ScopeCreated += (sender, args) => { args.Scope.ResolveDependency <IPrincipalAccessor>().First().Principal = args.Principal; _logger.Debug(inboundQueueName + " Running " + args.Message.Body + ", Credentials: " + args.Principal.ToFriendlyString()); }; listener.ScopeClosing += (sender, args) => { if (args.Exception != null) { return; } var all = args.Scope.ResolveDependency <IAdoNetUnitOfWork>().ToList(); all[0].SaveChanges(); var queue = (DomainQueueWrapper)args.Scope.ResolveDependency <IDomainQueue>().First(); queue.SaveChanges(); }; listener.MessageInvokerFactory = MessageInvokerFactory; return(listener); }
public void Configure(ConfigurationContext context) { ConfigureMessageQueueProvider(context); ConfigureListeners(context); ConfigureMessageHandlers(context); CreateDomainQueue(context); }
/// <summary> /// Writes to the message queue that the application is processing (publishing in the other bounded context) /// </summary> /// <param name="context"></param> private void CreateDomainQueue(ConfigurationContext context) { context.Services.AddScoped <IDomainQueue>(x => { var queue = _messageQueueProvider.Open("Messaging"); var messageBus = new ScopedMessageBus(queue); return(new DomainQueueWrapper(messageBus)); }); }
private void ConfigureMessageHandlers(ConfigurationContext context) { var assembly = Assembly.GetExecutingAssembly(); context.Services.RegisterMessageHandlers(assembly); //workaround since SQL server already references us assembly = AppDomain.CurrentDomain.GetAssemblies() .First(x => x.FullName.StartsWith("Coderr.Server.SqlServer,")); context.Services.RegisterMessageHandlers(assembly); }
public void Configure(ConfigurationContext context, IConfigurationSection ignoredModulesConfigurationSection) { foreach (var child in ignoredModulesConfigurationSection.GetChildren()) { _ignoredModules.Add(child.Value); } ScanAssembliesForModules(AppDomain.CurrentDomain.BaseDirectory); foreach (var module in _modules) { module.Configure(context); } }
private void ConfigureListeners(ConfigurationContext context) { _reportListener = ConfigureQueueListener(context, "ErrorReports", "ErrorReportEvents"); _eventProcessor = ConfigureQueueListener(context, "ErrorReportEvents", "ErrorReportEvents"); }