public static async Task Run( [ServiceBusTrigger("%cms-messages-topic%", "%cms-messages-subscription%", Connection = "service-bus-connection-string")] Message sitefinityMessage, [Inject] IMessageProcessor messageProcessor, [Inject] IMessagePropertiesService messagePropertiesService, ILogger log) { if (sitefinityMessage == null) { throw new ArgumentNullException(nameof(sitefinityMessage)); } sitefinityMessage.UserProperties.TryGetValue("ActionType", out var actionType); sitefinityMessage.UserProperties.TryGetValue("CType", out var contentType); sitefinityMessage.UserProperties.TryGetValue("Id", out var messageContentId); // logger should allow setting up correlation id and should be picked up from message log.LogInformation($"{nameof(SitefinityMessageHandler)}: Received message action '{actionType}' for type '{contentType}' with Id: '{messageContentId}': Correlation id {sitefinityMessage.CorrelationId}"); var message = Encoding.UTF8.GetString(sitefinityMessage?.Body); if (string.IsNullOrWhiteSpace(message)) { throw new ArgumentException("Message cannot be null or empty.", nameof(sitefinityMessage)); } if (!Enum.IsDefined(typeof(MessageAction), actionType?.ToString())) { throw new ArgumentOutOfRangeException(nameof(actionType), $"Invalid message action '{actionType}' received, should be one of '{string.Join(",", Enum.GetNames(typeof(MessageAction)))}'"); } if (!Enum.IsDefined(typeof(MessageContentType), contentType?.ToString())) { throw new ArgumentOutOfRangeException(nameof(contentType), $"Invalid message content type '{contentType}' received, should be one of '{string.Join(",", Enum.GetNames(typeof(MessageContentType)))}'"); } var messageAction = Enum.Parse <MessageAction>(actionType?.ToString()); var messageContentType = Enum.Parse <MessageContentType>(contentType?.ToString()); var sequenceNumber = messagePropertiesService.GetSequenceNumber(sitefinityMessage); var result = await messageProcessor.ProcessAsync(message, sequenceNumber, messageContentType, messageAction).ConfigureAwait(false); switch (result) { case HttpStatusCode.OK: log.LogInformation($"{ClassFullName}: Content Page Id: {messageContentId}: Updated Content Page"); break; case HttpStatusCode.Created: log.LogInformation($"{ClassFullName}: Content Page Id: {messageContentId}: Created Content Page"); break; case HttpStatusCode.AlreadyReported: log.LogInformation($"{ClassFullName}: Content Page Id: {messageContentId}: Content Page previously updated"); break; default: log.LogWarning($"{ClassFullName}: Content Page Id: {messageContentId}: Content Page not Posted: Status: {result}"); break; } }
public SitefinityMessageHandlerTests() { logger = A.Fake <ILogService>(); messageProcessor = A.Fake <IMessageProcessor>(); messagePropertiesService = A.Fake <IMessagePropertiesService>(); correlationIdProvider = A.Fake <ICorrelationIdProvider>(); logService = A.Fake <ILogService>(); sitefinityMessageHandler = new SitefinityMessageHandler(messageProcessor, messagePropertiesService, correlationIdProvider, logService); }
public SitefinityMessageHandler( IMessageProcessor messageProcessor, IMessagePropertiesService messagePropertiesService, ICorrelationIdProvider correlationIdProvider, ILogService logService) { this.messageProcessor = messageProcessor; this.messagePropertiesService = messagePropertiesService; this.correlationIdProvider = correlationIdProvider; this.logService = logService; }
public MessageHandlerTests() { logger = A.Fake <ILogger>(); messageProcessor = A.Fake <IMessageProcessor>(); messagePropertiesService = A.Fake <IMessagePropertiesService>(); }
public MessagePreProcessor(IMessageProcessor messageProcessor, ILogService logger, IMessagePropertiesService messagePropertiesService) { this.messageProcessor = messageProcessor; this.logger = logger; this.messagePropertiesService = messagePropertiesService; }
public MessagePreProcessorTests() { processor = A.Fake <IMessageProcessor>(); logService = A.Fake <ILogService>(); propertiesService = A.Fake <IMessagePropertiesService>(); }