/// <summary> /// Publish a mesage to Azure Service Bus /// </summary> /// <typeparam name="T"></typeparam> /// <param name="payload">The message</param> /// <param name="eventEnum">Enum representing message type</param> /// <param name="correlationToken">Unique value passed with request for tracking</param> /// <returns></returns> public async Task Publish <T>(T payload, MessageEventEnum eventEnum, string correlationToken) { try { var jsonMessage = JsonConvert.SerializeObject(payload); var message = new Message { MessageId = new Guid().ToString(), Body = Encoding.UTF8.GetBytes(jsonMessage), UserProperties = { { "Event", eventEnum.ToString() }, { "correlationToken", correlationToken } } }; var topicClient = _serviceBusPersisterConnection.CreateModel(); await topicClient.SendAsync(message); } catch (Exception ex) { _logger = ServiceProvider.GetService <ILogger <EventBusServiceBus> >(); _logger.LogError(new EventId(ex.HResult), ex, "Exception throw in Event.Publish for {eventType} : {message}", eventEnum, ex.Message); throw; } }
/// <summary> /// Regsiter Service Event Type /// </summary> /// <param name="eventName">Enum Representation of Event</param> /// <param name="eventType">Type of the underlying Event</param> public void Subscribe(MessageEventEnum eventName, Type eventType) { // Ensure that eventType implements IIntegratedEventHandler if (!typeof(IIntegratedEventHandler).IsAssignableFrom(eventType)) { throw new ArgumentException($"{eventType} is not valid agrument for EventBus.Subscribe"); } // Make sure that the IServiceProvider property has been set if (ServiceProvider == null) { throw new MissingFieldException("IServiceProvider must be set in EventBus"); } _handlers.Add(eventName, eventType); }