@ -1,26 +1,20 @@ | |||
using Autofac; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; | |||
using Ordering.SignalrHub.IntegrationEvents; | |||
using System.Reflection; | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.AutofacModules; | |||
namespace Ordering.SignalrHub.AutofacModules | |||
public class ApplicationModule | |||
: Autofac.Module | |||
{ | |||
public class ApplicationModule | |||
: Autofac.Module | |||
{ | |||
public string QueriesConnectionString { get; } | |||
public string QueriesConnectionString { get; } | |||
public ApplicationModule() | |||
{ | |||
} | |||
public ApplicationModule() | |||
{ | |||
} | |||
protected override void Load(ContainerBuilder builder) | |||
{ | |||
protected override void Load(ContainerBuilder builder) | |||
{ | |||
builder.RegisterAssemblyTypes(typeof(OrderStatusChangedToAwaitingValidationIntegrationEvent).GetTypeInfo().Assembly) | |||
.AsClosedTypesOf(typeof(IIntegrationEventHandler<>)); | |||
builder.RegisterAssemblyTypes(typeof(OrderStatusChangedToAwaitingValidationIntegrationEvent).GetTypeInfo().Assembly) | |||
.AsClosedTypesOf(typeof(IIntegrationEventHandler<>)); | |||
} | |||
} | |||
} |
@ -1,36 +1,28 @@ | |||
using Microsoft.AspNetCore.SignalR; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; | |||
using Microsoft.Extensions.Logging; | |||
using Serilog.Context; | |||
using System; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents; | |||
namespace Ordering.SignalrHub.IntegrationEvents | |||
public class OrderStatusChangedToAwaitingValidationIntegrationEventHandler : IIntegrationEventHandler<OrderStatusChangedToAwaitingValidationIntegrationEvent> | |||
{ | |||
public class OrderStatusChangedToAwaitingValidationIntegrationEventHandler : IIntegrationEventHandler<OrderStatusChangedToAwaitingValidationIntegrationEvent> | |||
{ | |||
private readonly IHubContext<NotificationsHub> _hubContext; | |||
private readonly ILogger<OrderStatusChangedToAwaitingValidationIntegrationEventHandler> _logger; | |||
private readonly IHubContext<NotificationsHub> _hubContext; | |||
private readonly ILogger<OrderStatusChangedToAwaitingValidationIntegrationEventHandler> _logger; | |||
public OrderStatusChangedToAwaitingValidationIntegrationEventHandler( | |||
IHubContext<NotificationsHub> hubContext, | |||
ILogger<OrderStatusChangedToAwaitingValidationIntegrationEventHandler> logger) | |||
{ | |||
_hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); | |||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||
} | |||
public OrderStatusChangedToAwaitingValidationIntegrationEventHandler( | |||
IHubContext<NotificationsHub> hubContext, | |||
ILogger<OrderStatusChangedToAwaitingValidationIntegrationEventHandler> logger) | |||
{ | |||
_hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); | |||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||
} | |||
public async Task Handle(OrderStatusChangedToAwaitingValidationIntegrationEvent @event) | |||
public async Task Handle(OrderStatusChangedToAwaitingValidationIntegrationEvent @event) | |||
{ | |||
using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) | |||
{ | |||
using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) | |||
{ | |||
_logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); | |||
_logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); | |||
await _hubContext.Clients | |||
.Group(@event.BuyerName) | |||
.SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); | |||
} | |||
await _hubContext.Clients | |||
.Group(@event.BuyerName) | |||
.SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); | |||
} | |||
} | |||
} |
@ -1,37 +1,28 @@ | |||
using Microsoft.AspNetCore.SignalR; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; | |||
using Microsoft.Extensions.Logging; | |||
using Ordering.SignalrHub.IntegrationEvents.Events; | |||
using Serilog.Context; | |||
using System; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents.EventHandling; | |||
namespace Ordering.SignalrHub.IntegrationEvents.EventHandling | |||
public class OrderStatusChangedToCancelledIntegrationEventHandler : IIntegrationEventHandler<OrderStatusChangedToCancelledIntegrationEvent> | |||
{ | |||
public class OrderStatusChangedToCancelledIntegrationEventHandler : IIntegrationEventHandler<OrderStatusChangedToCancelledIntegrationEvent> | |||
{ | |||
private readonly IHubContext<NotificationsHub> _hubContext; | |||
private readonly ILogger<OrderStatusChangedToCancelledIntegrationEventHandler> _logger; | |||
private readonly IHubContext<NotificationsHub> _hubContext; | |||
private readonly ILogger<OrderStatusChangedToCancelledIntegrationEventHandler> _logger; | |||
public OrderStatusChangedToCancelledIntegrationEventHandler( | |||
IHubContext<NotificationsHub> hubContext, | |||
ILogger<OrderStatusChangedToCancelledIntegrationEventHandler> logger) | |||
{ | |||
_hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); | |||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||
} | |||
public OrderStatusChangedToCancelledIntegrationEventHandler( | |||
IHubContext<NotificationsHub> hubContext, | |||
ILogger<OrderStatusChangedToCancelledIntegrationEventHandler> logger) | |||
{ | |||
_hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); | |||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||
} | |||
public async Task Handle(OrderStatusChangedToCancelledIntegrationEvent @event) | |||
public async Task Handle(OrderStatusChangedToCancelledIntegrationEvent @event) | |||
{ | |||
using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) | |||
{ | |||
using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) | |||
{ | |||
_logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); | |||
_logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); | |||
await _hubContext.Clients | |||
.Group(@event.BuyerName) | |||
.SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); | |||
} | |||
await _hubContext.Clients | |||
.Group(@event.BuyerName) | |||
.SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); | |||
} | |||
} | |||
} |
@ -1,37 +1,28 @@ | |||
using Microsoft.AspNetCore.SignalR; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; | |||
using Microsoft.Extensions.Logging; | |||
using Ordering.SignalrHub.IntegrationEvents.Events; | |||
using Serilog.Context; | |||
using System; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents.EventHandling; | |||
namespace Ordering.SignalrHub.IntegrationEvents.EventHandling | |||
public class OrderStatusChangedToPaidIntegrationEventHandler : IIntegrationEventHandler<OrderStatusChangedToPaidIntegrationEvent> | |||
{ | |||
public class OrderStatusChangedToPaidIntegrationEventHandler : IIntegrationEventHandler<OrderStatusChangedToPaidIntegrationEvent> | |||
{ | |||
private readonly IHubContext<NotificationsHub> _hubContext; | |||
private readonly ILogger<OrderStatusChangedToPaidIntegrationEventHandler> _logger; | |||
private readonly IHubContext<NotificationsHub> _hubContext; | |||
private readonly ILogger<OrderStatusChangedToPaidIntegrationEventHandler> _logger; | |||
public OrderStatusChangedToPaidIntegrationEventHandler( | |||
IHubContext<NotificationsHub> hubContext, | |||
ILogger<OrderStatusChangedToPaidIntegrationEventHandler> logger) | |||
{ | |||
_hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); | |||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||
} | |||
public OrderStatusChangedToPaidIntegrationEventHandler( | |||
IHubContext<NotificationsHub> hubContext, | |||
ILogger<OrderStatusChangedToPaidIntegrationEventHandler> logger) | |||
{ | |||
_hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); | |||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||
} | |||
public async Task Handle(OrderStatusChangedToPaidIntegrationEvent @event) | |||
public async Task Handle(OrderStatusChangedToPaidIntegrationEvent @event) | |||
{ | |||
using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) | |||
{ | |||
using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) | |||
{ | |||
_logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); | |||
_logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); | |||
await _hubContext.Clients | |||
.Group(@event.BuyerName) | |||
.SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); | |||
} | |||
await _hubContext.Clients | |||
.Group(@event.BuyerName) | |||
.SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); | |||
} | |||
} | |||
} |
@ -1,37 +1,28 @@ | |||
using Microsoft.AspNetCore.SignalR; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; | |||
using Microsoft.Extensions.Logging; | |||
using Ordering.SignalrHub.IntegrationEvents.Events; | |||
using Serilog.Context; | |||
using System; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents.EventHandling; | |||
namespace Ordering.SignalrHub.IntegrationEvents.EventHandling | |||
public class OrderStatusChangedToShippedIntegrationEventHandler : IIntegrationEventHandler<OrderStatusChangedToShippedIntegrationEvent> | |||
{ | |||
public class OrderStatusChangedToShippedIntegrationEventHandler : IIntegrationEventHandler<OrderStatusChangedToShippedIntegrationEvent> | |||
{ | |||
private readonly IHubContext<NotificationsHub> _hubContext; | |||
private readonly ILogger<OrderStatusChangedToShippedIntegrationEventHandler> _logger; | |||
private readonly IHubContext<NotificationsHub> _hubContext; | |||
private readonly ILogger<OrderStatusChangedToShippedIntegrationEventHandler> _logger; | |||
public OrderStatusChangedToShippedIntegrationEventHandler( | |||
IHubContext<NotificationsHub> hubContext, | |||
ILogger<OrderStatusChangedToShippedIntegrationEventHandler> logger) | |||
{ | |||
_hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); | |||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||
} | |||
public OrderStatusChangedToShippedIntegrationEventHandler( | |||
IHubContext<NotificationsHub> hubContext, | |||
ILogger<OrderStatusChangedToShippedIntegrationEventHandler> logger) | |||
{ | |||
_hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); | |||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||
} | |||
public async Task Handle(OrderStatusChangedToShippedIntegrationEvent @event) | |||
public async Task Handle(OrderStatusChangedToShippedIntegrationEvent @event) | |||
{ | |||
using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) | |||
{ | |||
using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) | |||
{ | |||
_logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); | |||
_logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); | |||
await _hubContext.Clients | |||
.Group(@event.BuyerName) | |||
.SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); | |||
} | |||
await _hubContext.Clients | |||
.Group(@event.BuyerName) | |||
.SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); | |||
} | |||
} | |||
} |
@ -1,38 +1,29 @@ | |||
using Microsoft.AspNetCore.SignalR; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; | |||
using Microsoft.Extensions.Logging; | |||
using Ordering.SignalrHub.IntegrationEvents.Events; | |||
using Serilog.Context; | |||
using System; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents.EventHandling; | |||
namespace Ordering.SignalrHub.IntegrationEvents.EventHandling | |||
public class OrderStatusChangedToStockConfirmedIntegrationEventHandler : | |||
IIntegrationEventHandler<OrderStatusChangedToStockConfirmedIntegrationEvent> | |||
{ | |||
public class OrderStatusChangedToStockConfirmedIntegrationEventHandler : | |||
IIntegrationEventHandler<OrderStatusChangedToStockConfirmedIntegrationEvent> | |||
{ | |||
private readonly IHubContext<NotificationsHub> _hubContext; | |||
private readonly ILogger<OrderStatusChangedToStockConfirmedIntegrationEventHandler> _logger; | |||
private readonly IHubContext<NotificationsHub> _hubContext; | |||
private readonly ILogger<OrderStatusChangedToStockConfirmedIntegrationEventHandler> _logger; | |||
public OrderStatusChangedToStockConfirmedIntegrationEventHandler( | |||
IHubContext<NotificationsHub> hubContext, | |||
ILogger<OrderStatusChangedToStockConfirmedIntegrationEventHandler> logger) | |||
{ | |||
_hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); | |||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||
} | |||
public OrderStatusChangedToStockConfirmedIntegrationEventHandler( | |||
IHubContext<NotificationsHub> hubContext, | |||
ILogger<OrderStatusChangedToStockConfirmedIntegrationEventHandler> logger) | |||
{ | |||
_hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); | |||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||
} | |||
public async Task Handle(OrderStatusChangedToStockConfirmedIntegrationEvent @event) | |||
public async Task Handle(OrderStatusChangedToStockConfirmedIntegrationEvent @event) | |||
{ | |||
using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) | |||
{ | |||
using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) | |||
{ | |||
_logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); | |||
_logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); | |||
await _hubContext.Clients | |||
.Group(@event.BuyerName) | |||
.SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); | |||
} | |||
await _hubContext.Clients | |||
.Group(@event.BuyerName) | |||
.SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); | |||
} | |||
} | |||
} |
@ -1,38 +1,28 @@ | |||
using Microsoft.AspNetCore.SignalR; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; | |||
using Microsoft.Extensions.Logging; | |||
using Ordering.SignalrHub.IntegrationEvents.Events; | |||
using Serilog.Context; | |||
using System; | |||
using System.Threading.Tasks; | |||
namespace Ordering.SignalrHub.IntegrationEvents.EventHandling | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents.EventHandling; | |||
public class OrderStatusChangedToSubmittedIntegrationEventHandler : | |||
IIntegrationEventHandler<OrderStatusChangedToSubmittedIntegrationEvent> | |||
{ | |||
public class OrderStatusChangedToSubmittedIntegrationEventHandler : | |||
IIntegrationEventHandler<OrderStatusChangedToSubmittedIntegrationEvent> | |||
{ | |||
private readonly IHubContext<NotificationsHub> _hubContext; | |||
private readonly ILogger<OrderStatusChangedToSubmittedIntegrationEventHandler> _logger; | |||
private readonly IHubContext<NotificationsHub> _hubContext; | |||
private readonly ILogger<OrderStatusChangedToSubmittedIntegrationEventHandler> _logger; | |||
public OrderStatusChangedToSubmittedIntegrationEventHandler( | |||
IHubContext<NotificationsHub> hubContext, | |||
ILogger<OrderStatusChangedToSubmittedIntegrationEventHandler> logger) | |||
{ | |||
_hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); | |||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||
} | |||
public OrderStatusChangedToSubmittedIntegrationEventHandler( | |||
IHubContext<NotificationsHub> hubContext, | |||
ILogger<OrderStatusChangedToSubmittedIntegrationEventHandler> logger) | |||
{ | |||
_hubContext = hubContext ?? throw new ArgumentNullException(nameof(hubContext)); | |||
_logger = logger ?? throw new ArgumentNullException(nameof(logger)); | |||
} | |||
public async Task Handle(OrderStatusChangedToSubmittedIntegrationEvent @event) | |||
public async Task Handle(OrderStatusChangedToSubmittedIntegrationEvent @event) | |||
{ | |||
using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) | |||
{ | |||
using (LogContext.PushProperty("IntegrationEventContext", $"{@event.Id}-{Program.AppName}")) | |||
{ | |||
_logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); | |||
_logger.LogInformation("----- Handling integration event: {IntegrationEventId} at {AppName} - ({@IntegrationEvent})", @event.Id, Program.AppName, @event); | |||
await _hubContext.Clients | |||
.Group(@event.BuyerName) | |||
.SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); | |||
} | |||
await _hubContext.Clients | |||
.Group(@event.BuyerName) | |||
.SendAsync("UpdatedOrderState", new { OrderId = @event.OrderId, Status = @event.OrderStatus }); | |||
} | |||
} | |||
} | |||
} |
@ -1,18 +1,15 @@ | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | |||
namespace Ordering.SignalrHub.IntegrationEvents | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents; | |||
public record OrderStatusChangedToAwaitingValidationIntegrationEvent : IntegrationEvent | |||
{ | |||
public record OrderStatusChangedToAwaitingValidationIntegrationEvent : IntegrationEvent | |||
{ | |||
public int OrderId { get; } | |||
public string OrderStatus { get; } | |||
public string BuyerName { get; } | |||
public int OrderId { get; } | |||
public string OrderStatus { get; } | |||
public string BuyerName { get; } | |||
public OrderStatusChangedToAwaitingValidationIntegrationEvent(int orderId, string orderStatus, string buyerName) | |||
{ | |||
OrderId = orderId; | |||
OrderStatus = orderStatus; | |||
BuyerName = buyerName; | |||
} | |||
public OrderStatusChangedToAwaitingValidationIntegrationEvent(int orderId, string orderStatus, string buyerName) | |||
{ | |||
OrderId = orderId; | |||
OrderStatus = orderStatus; | |||
BuyerName = buyerName; | |||
} | |||
} | |||
@ -1,18 +1,16 @@ | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents.Events; | |||
namespace Ordering.SignalrHub.IntegrationEvents.Events | |||
public record OrderStatusChangedToCancelledIntegrationEvent : IntegrationEvent | |||
{ | |||
public record OrderStatusChangedToCancelledIntegrationEvent : IntegrationEvent | |||
{ | |||
public int OrderId { get; } | |||
public string OrderStatus { get; } | |||
public string BuyerName { get; } | |||
public int OrderId { get; } | |||
public string OrderStatus { get; } | |||
public string BuyerName { get; } | |||
public OrderStatusChangedToCancelledIntegrationEvent(int orderId, string orderStatus, string buyerName) | |||
{ | |||
OrderId = orderId; | |||
OrderStatus = orderStatus; | |||
BuyerName = buyerName; | |||
} | |||
public OrderStatusChangedToCancelledIntegrationEvent(int orderId, string orderStatus, string buyerName) | |||
{ | |||
OrderId = orderId; | |||
OrderStatus = orderStatus; | |||
BuyerName = buyerName; | |||
} | |||
} | |||
@ -1,19 +1,16 @@ | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents.Events; | |||
namespace Ordering.SignalrHub.IntegrationEvents.Events | |||
public record OrderStatusChangedToPaidIntegrationEvent : IntegrationEvent | |||
{ | |||
public record OrderStatusChangedToPaidIntegrationEvent : IntegrationEvent | |||
{ | |||
public int OrderId { get; } | |||
public string OrderStatus { get; } | |||
public string BuyerName { get; } | |||
public int OrderId { get; } | |||
public string OrderStatus { get; } | |||
public string BuyerName { get; } | |||
public OrderStatusChangedToPaidIntegrationEvent(int orderId, | |||
string orderStatus, string buyerName) | |||
{ | |||
OrderId = orderId; | |||
OrderStatus = orderStatus; | |||
BuyerName = buyerName; | |||
} | |||
public OrderStatusChangedToPaidIntegrationEvent(int orderId, | |||
string orderStatus, string buyerName) | |||
{ | |||
OrderId = orderId; | |||
OrderStatus = orderStatus; | |||
BuyerName = buyerName; | |||
} | |||
} |
@ -1,18 +1,16 @@ | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents.Events; | |||
namespace Ordering.SignalrHub.IntegrationEvents.Events | |||
public record OrderStatusChangedToShippedIntegrationEvent : IntegrationEvent | |||
{ | |||
public record OrderStatusChangedToShippedIntegrationEvent : IntegrationEvent | |||
{ | |||
public int OrderId { get; } | |||
public string OrderStatus { get; } | |||
public string BuyerName { get; } | |||
public int OrderId { get; } | |||
public string OrderStatus { get; } | |||
public string BuyerName { get; } | |||
public OrderStatusChangedToShippedIntegrationEvent(int orderId, string orderStatus, string buyerName) | |||
{ | |||
OrderId = orderId; | |||
OrderStatus = orderStatus; | |||
BuyerName = buyerName; | |||
} | |||
public OrderStatusChangedToShippedIntegrationEvent(int orderId, string orderStatus, string buyerName) | |||
{ | |||
OrderId = orderId; | |||
OrderStatus = orderStatus; | |||
BuyerName = buyerName; | |||
} | |||
} | |||
@ -1,18 +1,15 @@ | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents.Events; | |||
namespace Ordering.SignalrHub.IntegrationEvents.Events | |||
public record OrderStatusChangedToStockConfirmedIntegrationEvent : IntegrationEvent | |||
{ | |||
public record OrderStatusChangedToStockConfirmedIntegrationEvent : IntegrationEvent | |||
{ | |||
public int OrderId { get; } | |||
public string OrderStatus { get; } | |||
public string BuyerName { get; } | |||
public int OrderId { get; } | |||
public string OrderStatus { get; } | |||
public string BuyerName { get; } | |||
public OrderStatusChangedToStockConfirmedIntegrationEvent(int orderId, string orderStatus, string buyerName) | |||
{ | |||
OrderId = orderId; | |||
OrderStatus = orderStatus; | |||
BuyerName = buyerName; | |||
} | |||
public OrderStatusChangedToStockConfirmedIntegrationEvent(int orderId, string orderStatus, string buyerName) | |||
{ | |||
OrderId = orderId; | |||
OrderStatus = orderStatus; | |||
BuyerName = buyerName; | |||
} | |||
} |
@ -1,18 +1,15 @@ | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub.IntegrationEvents.Events; | |||
namespace Ordering.SignalrHub.IntegrationEvents.Events | |||
public record OrderStatusChangedToSubmittedIntegrationEvent : IntegrationEvent | |||
{ | |||
public record OrderStatusChangedToSubmittedIntegrationEvent : IntegrationEvent | |||
{ | |||
public int OrderId { get; } | |||
public string OrderStatus { get; } | |||
public string BuyerName { get; } | |||
public int OrderId { get; } | |||
public string OrderStatus { get; } | |||
public string BuyerName { get; } | |||
public OrderStatusChangedToSubmittedIntegrationEvent(int orderId, string orderStatus, string buyerName) | |||
{ | |||
OrderId = orderId; | |||
OrderStatus = orderStatus; | |||
BuyerName = buyerName; | |||
} | |||
public OrderStatusChangedToSubmittedIntegrationEvent(int orderId, string orderStatus, string buyerName) | |||
{ | |||
OrderId = orderId; | |||
OrderStatus = orderStatus; | |||
BuyerName = buyerName; | |||
} | |||
} |
@ -1,24 +1,18 @@ | |||
using Microsoft.AspNetCore.Authorization; | |||
using Microsoft.AspNetCore.SignalR; | |||
using System; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub; | |||
namespace Ordering.SignalrHub | |||
[Authorize] | |||
public class NotificationsHub : Hub | |||
{ | |||
[Authorize] | |||
public class NotificationsHub : Hub | |||
{ | |||
public override async Task OnConnectedAsync() | |||
{ | |||
await Groups.AddToGroupAsync(Context.ConnectionId, Context.User.Identity.Name); | |||
await base.OnConnectedAsync(); | |||
} | |||
public override async Task OnConnectedAsync() | |||
{ | |||
await Groups.AddToGroupAsync(Context.ConnectionId, Context.User.Identity.Name); | |||
await base.OnConnectedAsync(); | |||
} | |||
public override async Task OnDisconnectedAsync(Exception ex) | |||
{ | |||
await Groups.RemoveFromGroupAsync(Context.ConnectionId, Context.User.Identity.Name); | |||
await base.OnDisconnectedAsync(ex); | |||
} | |||
public override async Task OnDisconnectedAsync(Exception ex) | |||
{ | |||
await Groups.RemoveFromGroupAsync(Context.ConnectionId, Context.User.Identity.Name); | |||
await base.OnDisconnectedAsync(ex); | |||
} | |||
} |
@ -1,274 +1,249 @@ | |||
using Autofac; | |||
using Autofac.Extensions.DependencyInjection; | |||
using HealthChecks.UI.Client; | |||
using Microsoft.AspNetCore.Authentication.JwtBearer; | |||
using Microsoft.AspNetCore.Builder; | |||
using Microsoft.AspNetCore.Diagnostics.HealthChecks; | |||
using Microsoft.Azure.ServiceBus; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBusServiceBus; | |||
using Microsoft.Extensions.Configuration; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using Microsoft.Extensions.Diagnostics.HealthChecks; | |||
using Microsoft.Extensions.Logging; | |||
using Ordering.SignalrHub.AutofacModules; | |||
using Ordering.SignalrHub.IntegrationEvents; | |||
using Ordering.SignalrHub.IntegrationEvents.EventHandling; | |||
using Ordering.SignalrHub.IntegrationEvents.Events; | |||
using RabbitMQ.Client; | |||
using System; | |||
using System.IdentityModel.Tokens.Jwt; | |||
using System.Threading.Tasks; | |||
namespace Ordering.SignalrHub | |||
namespace Microsoft.eShopOnContainers.Services.Ordering.SignalrHub; | |||
public class Startup | |||
{ | |||
public class Startup | |||
public Startup(IConfiguration configuration) | |||
{ | |||
public Startup(IConfiguration configuration) | |||
{ | |||
Configuration = configuration; | |||
} | |||
Configuration = configuration; | |||
} | |||
public IConfiguration Configuration { get; } | |||
public IConfiguration Configuration { get; } | |||
// This method gets called by the runtime. Use this method to add services to the container. | |||
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 | |||
public IServiceProvider ConfigureServices(IServiceCollection services) | |||
{ | |||
services | |||
.AddCustomHealthCheck(Configuration) | |||
.AddCors(options => | |||
{ | |||
options.AddPolicy("CorsPolicy", | |||
builder => builder | |||
.AllowAnyMethod() | |||
.AllowAnyHeader() | |||
.SetIsOriginAllowed((host) => true) | |||
.AllowCredentials()); | |||
}); | |||
// This method gets called by the runtime. Use this method to add services to the container. | |||
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 | |||
public IServiceProvider ConfigureServices(IServiceCollection services) | |||
if (Configuration.GetValue<string>("IsClusterEnv") == bool.TrueString) | |||
{ | |||
services | |||
.AddCustomHealthCheck(Configuration) | |||
.AddCors(options => | |||
{ | |||
options.AddPolicy("CorsPolicy", | |||
builder => builder | |||
.AllowAnyMethod() | |||
.AllowAnyHeader() | |||
.SetIsOriginAllowed((host) => true) | |||
.AllowCredentials()); | |||
}); | |||
if (Configuration.GetValue<string>("IsClusterEnv") == bool.TrueString) | |||
{ | |||
services | |||
.AddSignalR() | |||
.AddStackExchangeRedis(Configuration["SignalrStoreConnectionString"]); | |||
} | |||
else | |||
{ | |||
services.AddSignalR(); | |||
} | |||
.AddSignalR() | |||
.AddStackExchangeRedis(Configuration["SignalrStoreConnectionString"]); | |||
} | |||
else | |||
{ | |||
services.AddSignalR(); | |||
} | |||
if (Configuration.GetValue<bool>("AzureServiceBusEnabled")) | |||
if (Configuration.GetValue<bool>("AzureServiceBusEnabled")) | |||
{ | |||
services.AddSingleton<IServiceBusPersisterConnection>(sp => | |||
{ | |||
services.AddSingleton<IServiceBusPersisterConnection>(sp => | |||
{ | |||
var serviceBusConnectionString = Configuration["EventBusConnection"]; | |||
var serviceBusConnection = new ServiceBusConnectionStringBuilder(serviceBusConnectionString); | |||
var serviceBusConnectionString = Configuration["EventBusConnection"]; | |||
var serviceBusConnection = new ServiceBusConnectionStringBuilder(serviceBusConnectionString); | |||
var subscriptionClientName = Configuration["SubscriptionClientName"]; | |||
var subscriptionClientName = Configuration["SubscriptionClientName"]; | |||
return new DefaultServiceBusPersisterConnection(serviceBusConnection, subscriptionClientName); | |||
}); | |||
} | |||
else | |||
return new DefaultServiceBusPersisterConnection(serviceBusConnection, subscriptionClientName); | |||
}); | |||
} | |||
else | |||
{ | |||
services.AddSingleton<IRabbitMQPersistentConnection>(sp => | |||
{ | |||
services.AddSingleton<IRabbitMQPersistentConnection>(sp => | |||
var logger = sp.GetRequiredService<ILogger<DefaultRabbitMQPersistentConnection>>(); | |||
var factory = new ConnectionFactory() | |||
{ | |||
var logger = sp.GetRequiredService<ILogger<DefaultRabbitMQPersistentConnection>>(); | |||
HostName = Configuration["EventBusConnection"], | |||
DispatchConsumersAsync = true | |||
}; | |||
if (!string.IsNullOrEmpty(Configuration["EventBusUserName"])) | |||
{ | |||
factory.UserName = Configuration["EventBusUserName"]; | |||
} | |||
var factory = new ConnectionFactory() | |||
{ | |||
HostName = Configuration["EventBusConnection"], | |||
DispatchConsumersAsync = true | |||
}; | |||
if (!string.IsNullOrEmpty(Configuration["EventBusPassword"])) | |||
{ | |||
factory.Password = Configuration["EventBusPassword"]; | |||
} | |||
if (!string.IsNullOrEmpty(Configuration["EventBusUserName"])) | |||
{ | |||
factory.UserName = Configuration["EventBusUserName"]; | |||
} | |||
var retryCount = 5; | |||
if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) | |||
{ | |||
retryCount = int.Parse(Configuration["EventBusRetryCount"]); | |||
} | |||
if (!string.IsNullOrEmpty(Configuration["EventBusPassword"])) | |||
{ | |||
factory.Password = Configuration["EventBusPassword"]; | |||
} | |||
return new DefaultRabbitMQPersistentConnection(factory, logger, retryCount); | |||
}); | |||
} | |||
var retryCount = 5; | |||
if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) | |||
{ | |||
retryCount = int.Parse(Configuration["EventBusRetryCount"]); | |||
} | |||
ConfigureAuthService(services); | |||
return new DefaultRabbitMQPersistentConnection(factory, logger, retryCount); | |||
}); | |||
} | |||
RegisterEventBus(services); | |||
ConfigureAuthService(services); | |||
services.AddOptions(); | |||
RegisterEventBus(services); | |||
//configure autofac | |||
var container = new ContainerBuilder(); | |||
container.RegisterModule(new ApplicationModule()); | |||
container.Populate(services); | |||
services.AddOptions(); | |||
return new AutofacServiceProvider(container.Build()); | |||
} | |||
//configure autofac | |||
var container = new ContainerBuilder(); | |||
container.RegisterModule(new ApplicationModule()); | |||
container.Populate(services); | |||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. | |||
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) | |||
{ | |||
//loggerFactory.AddConsole(Configuration.GetSection("Logging")); | |||
//loggerFactory.AddDebug(); | |||
//loggerFactory.AddAzureWebAppDiagnostics(); | |||
//loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); | |||
return new AutofacServiceProvider(container.Build()); | |||
} | |||
var pathBase = Configuration["PATH_BASE"]; | |||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. | |||
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) | |||
if (!string.IsNullOrEmpty(pathBase)) | |||
{ | |||
//loggerFactory.AddConsole(Configuration.GetSection("Logging")); | |||
//loggerFactory.AddDebug(); | |||
//loggerFactory.AddAzureWebAppDiagnostics(); | |||
//loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); | |||
loggerFactory.CreateLogger<Startup>().LogDebug("Using PATH BASE '{pathBase}'", pathBase); | |||
app.UsePathBase(pathBase); | |||
} | |||
var pathBase = Configuration["PATH_BASE"]; | |||
app.UseRouting(); | |||
app.UseCors("CorsPolicy"); | |||
app.UseAuthentication(); | |||
app.UseAuthorization(); | |||
if (!string.IsNullOrEmpty(pathBase)) | |||
app.UseEndpoints(endpoints => | |||
{ | |||
endpoints.MapHealthChecks("/hc", new HealthCheckOptions() | |||
{ | |||
loggerFactory.CreateLogger<Startup>().LogDebug("Using PATH BASE '{pathBase}'", pathBase); | |||
app.UsePathBase(pathBase); | |||
} | |||
app.UseRouting(); | |||
app.UseCors("CorsPolicy"); | |||
app.UseAuthentication(); | |||
app.UseAuthorization(); | |||
app.UseEndpoints(endpoints => | |||
Predicate = _ => true, | |||
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse | |||
}); | |||
endpoints.MapHealthChecks("/liveness", new HealthCheckOptions | |||
{ | |||
endpoints.MapHealthChecks("/hc", new HealthCheckOptions() | |||
{ | |||
Predicate = _ => true, | |||
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse | |||
}); | |||
endpoints.MapHealthChecks("/liveness", new HealthCheckOptions | |||
{ | |||
Predicate = r => r.Name.Contains("self") | |||
}); | |||
endpoints.MapHub<NotificationsHub>("/hub/notificationhub"); | |||
Predicate = r => r.Name.Contains("self") | |||
}); | |||
endpoints.MapHub<NotificationsHub>("/hub/notificationhub"); | |||
}); | |||
ConfigureEventBus(app); | |||
} | |||
ConfigureEventBus(app); | |||
} | |||
private void ConfigureEventBus(IApplicationBuilder app) | |||
{ | |||
var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>(); | |||
eventBus.Subscribe<OrderStatusChangedToAwaitingValidationIntegrationEvent, OrderStatusChangedToAwaitingValidationIntegrationEventHandler>(); | |||
eventBus.Subscribe<OrderStatusChangedToPaidIntegrationEvent, OrderStatusChangedToPaidIntegrationEventHandler>(); | |||
eventBus.Subscribe<OrderStatusChangedToStockConfirmedIntegrationEvent, OrderStatusChangedToStockConfirmedIntegrationEventHandler>(); | |||
eventBus.Subscribe<OrderStatusChangedToShippedIntegrationEvent, OrderStatusChangedToShippedIntegrationEventHandler>(); | |||
eventBus.Subscribe<OrderStatusChangedToCancelledIntegrationEvent, OrderStatusChangedToCancelledIntegrationEventHandler>(); | |||
eventBus.Subscribe<OrderStatusChangedToSubmittedIntegrationEvent, OrderStatusChangedToSubmittedIntegrationEventHandler>(); | |||
} | |||
private void ConfigureEventBus(IApplicationBuilder app) | |||
{ | |||
var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>(); | |||
eventBus.Subscribe<OrderStatusChangedToAwaitingValidationIntegrationEvent, OrderStatusChangedToAwaitingValidationIntegrationEventHandler>(); | |||
eventBus.Subscribe<OrderStatusChangedToPaidIntegrationEvent, OrderStatusChangedToPaidIntegrationEventHandler>(); | |||
eventBus.Subscribe<OrderStatusChangedToStockConfirmedIntegrationEvent, OrderStatusChangedToStockConfirmedIntegrationEventHandler>(); | |||
eventBus.Subscribe<OrderStatusChangedToShippedIntegrationEvent, OrderStatusChangedToShippedIntegrationEventHandler>(); | |||
eventBus.Subscribe<OrderStatusChangedToCancelledIntegrationEvent, OrderStatusChangedToCancelledIntegrationEventHandler>(); | |||
eventBus.Subscribe<OrderStatusChangedToSubmittedIntegrationEvent, OrderStatusChangedToSubmittedIntegrationEventHandler>(); | |||
} | |||
private void ConfigureAuthService(IServiceCollection services) | |||
{ | |||
// prevent from mapping "sub" claim to nameidentifier. | |||
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Remove("sub"); | |||
private void ConfigureAuthService(IServiceCollection services) | |||
{ | |||
// prevent from mapping "sub" claim to nameidentifier. | |||
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Remove("sub"); | |||
var identityUrl = Configuration.GetValue<string>("IdentityUrl"); | |||
var identityUrl = Configuration.GetValue<string>("IdentityUrl"); | |||
services.AddAuthentication(options => | |||
{ | |||
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; | |||
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; | |||
services.AddAuthentication(options => | |||
{ | |||
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; | |||
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; | |||
}).AddJwtBearer(options => | |||
}).AddJwtBearer(options => | |||
{ | |||
options.Authority = identityUrl; | |||
options.RequireHttpsMetadata = false; | |||
options.Audience = "orders.signalrhub"; | |||
options.Events = new JwtBearerEvents | |||
{ | |||
options.Authority = identityUrl; | |||
options.RequireHttpsMetadata = false; | |||
options.Audience = "orders.signalrhub"; | |||
options.Events = new JwtBearerEvents | |||
OnMessageReceived = context => | |||
{ | |||
OnMessageReceived = context => | |||
var accessToken = context.Request.Query["access_token"]; | |||
var path = context.HttpContext.Request.Path; | |||
if (!string.IsNullOrEmpty(accessToken) && (path.StartsWithSegments("/hub/notificationhub"))) | |||
{ | |||
var accessToken = context.Request.Query["access_token"]; | |||
var path = context.HttpContext.Request.Path; | |||
if (!string.IsNullOrEmpty(accessToken) && (path.StartsWithSegments("/hub/notificationhub"))) | |||
{ | |||
context.Token = accessToken; | |||
} | |||
return Task.CompletedTask; | |||
context.Token = accessToken; | |||
} | |||
}; | |||
}); | |||
} | |||
return Task.CompletedTask; | |||
} | |||
}; | |||
}); | |||
} | |||
private void RegisterEventBus(IServiceCollection services) | |||
private void RegisterEventBus(IServiceCollection services) | |||
{ | |||
if (Configuration.GetValue<bool>("AzureServiceBusEnabled")) | |||
{ | |||
if (Configuration.GetValue<bool>("AzureServiceBusEnabled")) | |||
services.AddSingleton<IEventBus, EventBusServiceBus>(sp => | |||
{ | |||
services.AddSingleton<IEventBus, EventBusServiceBus>(sp => | |||
{ | |||
var serviceBusPersisterConnection = sp.GetRequiredService<IServiceBusPersisterConnection>(); | |||
var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>(); | |||
var logger = sp.GetRequiredService<ILogger<EventBusServiceBus>>(); | |||
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>(); | |||
return new EventBusServiceBus(serviceBusPersisterConnection, logger, | |||
eventBusSubcriptionsManager, iLifetimeScope); | |||
}); | |||
} | |||
else | |||
var serviceBusPersisterConnection = sp.GetRequiredService<IServiceBusPersisterConnection>(); | |||
var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>(); | |||
var logger = sp.GetRequiredService<ILogger<EventBusServiceBus>>(); | |||
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>(); | |||
return new EventBusServiceBus(serviceBusPersisterConnection, logger, | |||
eventBusSubcriptionsManager, iLifetimeScope); | |||
}); | |||
} | |||
else | |||
{ | |||
services.AddSingleton<IEventBus, EventBusRabbitMQ>(sp => | |||
{ | |||
services.AddSingleton<IEventBus, EventBusRabbitMQ>(sp => | |||
var subscriptionClientName = Configuration["SubscriptionClientName"]; | |||
var rabbitMQPersistentConnection = sp.GetRequiredService<IRabbitMQPersistentConnection>(); | |||
var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>(); | |||
var logger = sp.GetRequiredService<ILogger<EventBusRabbitMQ>>(); | |||
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>(); | |||
var retryCount = 5; | |||
if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) | |||
{ | |||
var subscriptionClientName = Configuration["SubscriptionClientName"]; | |||
var rabbitMQPersistentConnection = sp.GetRequiredService<IRabbitMQPersistentConnection>(); | |||
var iLifetimeScope = sp.GetRequiredService<ILifetimeScope>(); | |||
var logger = sp.GetRequiredService<ILogger<EventBusRabbitMQ>>(); | |||
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionsManager>(); | |||
var retryCount = 5; | |||
if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) | |||
{ | |||
retryCount = int.Parse(Configuration["EventBusRetryCount"]); | |||
} | |||
retryCount = int.Parse(Configuration["EventBusRetryCount"]); | |||
} | |||
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, subscriptionClientName, retryCount); | |||
}); | |||
} | |||
services.AddSingleton<IEventBusSubscriptionsManager, InMemoryEventBusSubscriptionsManager>(); | |||
return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, subscriptionClientName, retryCount); | |||
}); | |||
} | |||
services.AddSingleton<IEventBusSubscriptionsManager, InMemoryEventBusSubscriptionsManager>(); | |||
} | |||
} | |||
public static class CustomExtensionMethods | |||
public static class CustomExtensionMethods | |||
{ | |||
public static IServiceCollection AddCustomHealthCheck(this IServiceCollection services, IConfiguration configuration) | |||
{ | |||
public static IServiceCollection AddCustomHealthCheck(this IServiceCollection services, IConfiguration configuration) | |||
{ | |||
var hcBuilder = services.AddHealthChecks(); | |||
var hcBuilder = services.AddHealthChecks(); | |||
hcBuilder.AddCheck("self", () => HealthCheckResult.Healthy()); | |||
hcBuilder.AddCheck("self", () => HealthCheckResult.Healthy()); | |||
if (configuration.GetValue<bool>("AzureServiceBusEnabled")) | |||
{ | |||
hcBuilder | |||
.AddAzureServiceBusTopic( | |||
configuration["EventBusConnection"], | |||
topicName: "eshop_event_bus", | |||
name: "signalr-servicebus-check", | |||
tags: new string[] { "servicebus" }); | |||
} | |||
else | |||
{ | |||
hcBuilder | |||
.AddRabbitMQ( | |||
$"amqp://{configuration["EventBusConnection"]}", | |||
name: "signalr-rabbitmqbus-check", | |||
tags: new string[] { "rabbitmqbus" }); | |||
} | |||
return services; | |||
if (configuration.GetValue<bool>("AzureServiceBusEnabled")) | |||
{ | |||
hcBuilder | |||
.AddAzureServiceBusTopic( | |||
configuration["EventBusConnection"], | |||
topicName: "eshop_event_bus", | |||
name: "signalr-servicebus-check", | |||
tags: new string[] { "servicebus" }); | |||
} | |||
else | |||
{ | |||
hcBuilder | |||
.AddRabbitMQ( | |||
$"amqp://{configuration["EventBusConnection"]}", | |||
name: "signalr-rabbitmqbus-check", | |||
tags: new string[] { "rabbitmqbus" }); | |||
} | |||
return services; | |||
} | |||
} |