public async Task Consume(ConsumeContext <ActivateSubscription> context) { var subscription = await _subsriptionsRepository.GetSubscription(context.Message.Id); if (subscription == null) { throw new Exception($"Cannot find subscription {context.Message.Id}"); } if (!subscription.Active) { _logger.LogWarning($"Subscription {context.Message.Id} is not active"); return; } // TODO: Connect new consumer /* * _busControl.ConnectReceiveEndpoint(c => * { * c.ConfigureConsumer<DomainEventConsumer<OperationCompletedEvent>>(); * * }); */ await Task.CompletedTask; }
/// <inheritdoc/> public async Task <SubscriptionModel> GetSubscription(Guid id) { var subscription = await _subscriptionsRepositry.GetSubscription(id); if (subscription == null) { throw new NotFoundException(); } return(_mapper.Map <SubscriptionModel>(subscription)); }
public async Task Consume(ConsumeContext <T> context) { var subscriptionIdParsed = context.ReceiveContext.InputAddress.Segments.Last().Replace($"{typeof(T).FullName}_", string.Empty, System.StringComparison.InvariantCultureIgnoreCase); if (!Guid.TryParse(subscriptionIdParsed, out Guid subscriptionId) || subscriptionId == Guid.Empty) { throw new ArgumentException("Failed to parse ID"); } var subscription = await _subscriptionsRepository.GetSubscription(subscriptionId); if (subscription == null) { throw new ArgumentException($"Cannot find subscription {subscriptionId}"); } if (!subscription.Active) { _logger.LogWarning($"Subscription {subscriptionId} is not active"); } var client = _httpClientFactory.CreateClient(HttpClientNames.WebhookSubscriptionHttpClient); client.DefaultRequestHeaders.Clear(); foreach (var header in subscription.Headers) { client.DefaultRequestHeaders.Add(header.Key, header.Value); } var content = new StringContent(JsonConvert.SerializeObject(context.Message), Encoding.UTF8, "application/json"); var response = await client.PostAsync(subscription.Endpoint, content); if (!response.IsSuccessStatusCode) { throw new HttpRequestException($"Unable to POST data for subscription {subscription.Id} to {subscription.Endpoint}, status code {response.StatusCode}"); } }