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);
        }
Exemple #2
0
 public override TotemValue Execute(TotemArguments arguments)
 {
     arguments = arguments ?? new TotemArguments();
     using (var scope = new ScopeWrapper(this))
     {
         scope.Declare("arguments");
         scope.Set("arguments", arguments);
         for (int i = 0; i < parametersDefinition.Length; i++)
         {
             var param = parametersDefinition[i];
             if (arguments.IsSet(i))
             {
                 scope.Declare(param.Name);
                 scope.Set(param.Name, arguments.Value(i));
             }
             else if (arguments.IsSet(param.Name))
             {
                 scope.Declare(param.Name);
                 scope.Set(param.Name, arguments.Value(param.Name));
             }
         }
         try
         {
             return TotemRun();
         }
         catch (Exception e)
         {
             throw;// new TotemException(e);
         }
     }
 }
Exemple #3
0
 public override TotemValue Execute(TotemArguments arguments)
 {
     arguments = arguments ?? new TotemArguments();
     using (var scope = new ScopeWrapper(this))
     {
         scope.Declare("arguments");
         scope.Set("arguments", arguments);
         for (int i = 0; i < parametersDefinition.Length; i++)
         {
             var param = parametersDefinition[i];
             if (arguments.IsSet(i))
             {
                 scope.Declare(param.Name);
                 scope.Set(param.Name, arguments.Value(i));
             }
             else if (arguments.IsSet(param.Name))
             {
                 scope.Declare(param.Name);
                 scope.Set(param.Name, arguments.Value(param.Name));
             }
         }
         try
         {
             return(TotemRun());
         }
         catch (Exception e)
         {
             throw;// new TotemException(e);
         }
     }
 }
Exemple #4
0
        public IDisposable BeginScope()
        {
            var scope   = ServiceProvider.CreateScope();
            var wrapper = new ScopeWrapper(scope, this);

            scopes.Push(wrapper);
            return(wrapper);
        }
Exemple #5
0
        public void TestSerializeScopeWrapped()
        {
            var c = new C {
                X = 1
            };
            var w        = ScopeWrapper.Create(c);
            var json     = w.ToJson();
            var expected = "{ 'X' : 1 }".Replace("'", "\"");

            Assert.Equal(expected, json);
        }
Exemple #6
0
 public ExtractMethodRequest(ScopeWrapper targetScope, string name, string[] parameters)
 {
     _name        = name;
     _parameters  = parameters;
     _targetScope = targetScope;
 }
 public ExtractMethodRequest(ScopeWrapper targetScope, string name, string[] parameters) {
     _name = name;
     _parameters = parameters;
     _targetScope = targetScope;
 }
Exemple #8
0
 public Task StoreScopeAsync(Scope client)
 {
     return(_bucket.InsertAsync(ScopeWrapper.ScopeWrapperId(client.Name), new ScopeWrapper(client.Name, client)));
 }