Ejemplo n.º 1
0
        private void ConfigureMessageQueueProvider(ConfigurationContext context)
        {
            var serializer = new MessagingSerializer(typeof(AdoNetMessageDto));

            _messageQueueProvider =
                new AdoNetMessageQueueProvider(() => context.ConnectionFactory(_systemPrincipal), serializer);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public void Configure(ConfigurationContext context)
 {
     ConfigureMessageQueueProvider(context);
     ConfigureListeners(context);
     ConfigureMessageHandlers(context);
     CreateDomainQueue(context);
 }
Ejemplo n.º 4
0
 /// <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));
     });
 }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
0
 private void ConfigureListeners(ConfigurationContext context)
 {
     _reportListener = ConfigureQueueListener(context, "ErrorReports", "ErrorReportEvents");
     _eventProcessor = ConfigureQueueListener(context, "ErrorReportEvents", "ErrorReportEvents");
 }