Exemplo n.º 1
0
        /// <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;
            }
        }
Exemplo n.º 2
0
        /// <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);
        }