Ejemplo n.º 1
0
        public WebhookInvoker(ISchemaWebhookRepository webhookRepository, JsonSerializer webhookSerializer, ISemanticLog log, TypeNameRegistry typeNameRegistry)
        {
            Guard.NotNull(webhookRepository, nameof(webhookRepository));
            Guard.NotNull(webhookSerializer, nameof(webhookSerializer));
            Guard.NotNull(typeNameRegistry, nameof(typeNameRegistry));
            Guard.NotNull(log, nameof(log));

            this.webhookRepository = webhookRepository;
            this.webhookSerializer = webhookSerializer;

            this.log = log;

            this.typeNameRegistry = typeNameRegistry;

            invokeBlock =
                new TransformBlock <InvocationRequest, InvocationResponse>(x => DispatchEventAsync(x),
                                                                           new ExecutionDataflowBlockOptions {
                MaxDegreeOfParallelism = 1, BoundedCapacity = 8
            });

            dumpBlock =
                new ActionBlock <InvocationResponse>(DumpAsync,
                                                     new ExecutionDataflowBlockOptions {
                MaxDegreeOfParallelism = 32, BoundedCapacity = 64
            });

            invokeBlock.LinkTo(dumpBlock,
                               new DataflowLinkOptions {
                PropagateCompletion = true
            }, x => x != null);
        }
Ejemplo n.º 2
0
 public WebhooksController(ICommandBus commandBus,
                           ISchemaWebhookRepository webhooksRepository,
                           IWebhookEventRepository webhookEventsRepository)
     : base(commandBus)
 {
     this.webhooksRepository      = webhooksRepository;
     this.webhookEventsRepository = webhookEventsRepository;
 }
Ejemplo n.º 3
0
        public WebhookEnqueuer(TypeNameRegistry typeNameRegistry,
                               IWebhookEventRepository webhookEventRepository,
                               ISchemaWebhookRepository webhookRepository,
                               IClock clock,
                               JsonSerializer webhookSerializer)
        {
            Guard.NotNull(webhookEventRepository, nameof(webhookEventRepository));
            Guard.NotNull(webhookSerializer, nameof(webhookSerializer));
            Guard.NotNull(webhookRepository, nameof(webhookRepository));
            Guard.NotNull(typeNameRegistry, nameof(typeNameRegistry));
            Guard.NotNull(clock, nameof(clock));

            this.webhookEventRepository = webhookEventRepository;
            this.webhookSerializer      = webhookSerializer;
            this.webhookRepository      = webhookRepository;

            this.clock = clock;

            this.typeNameRegistry = typeNameRegistry;
        }
Ejemplo n.º 4
0
        public WebhookDequeuer(WebhookSender webhookSender,
                               IWebhookEventRepository webhookEventRepository,
                               ISchemaWebhookRepository webhookRepository,
                               IClock clock,
                               ISemanticLog log)
        {
            Guard.NotNull(webhookEventRepository, nameof(webhookEventRepository));
            Guard.NotNull(webhookRepository, nameof(webhookRepository));
            Guard.NotNull(webhookSender, nameof(webhookSender));
            Guard.NotNull(clock, nameof(clock));
            Guard.NotNull(log, nameof(log));

            this.webhookEventRepository = webhookEventRepository;
            this.webhookRepository      = webhookRepository;
            this.webhookSender          = webhookSender;

            this.clock = clock;

            this.log = log;

            requestBlock =
                new ActionBlock <IWebhookEventEntity>(MakeRequestAsync,
                                                      new ExecutionDataflowBlockOptions {
                MaxDegreeOfParallelism = 32, BoundedCapacity = 32
            });

            blockBlock =
                new TransformBlock <IWebhookEventEntity, IWebhookEventEntity>(x => BlockAsync(x),
                                                                              new ExecutionDataflowBlockOptions {
                MaxDegreeOfParallelism = 1, BoundedCapacity = 1
            });

            blockBlock.LinkTo(requestBlock, new DataflowLinkOptions {
                PropagateCompletion = true
            });

            timer = new CompletionTimer(5000, QueryAsync);
        }