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 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); } } }
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); } } }
public IDisposable BeginScope() { var scope = ServiceProvider.CreateScope(); var wrapper = new ScopeWrapper(scope, this); scopes.Push(wrapper); return(wrapper); }
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); }
public ExtractMethodRequest(ScopeWrapper targetScope, string name, string[] parameters) { _name = name; _parameters = parameters; _targetScope = targetScope; }
public Task StoreScopeAsync(Scope client) { return(_bucket.InsertAsync(ScopeWrapper.ScopeWrapperId(client.Name), new ScopeWrapper(client.Name, client))); }