Esempio n. 1
0
        public async Task PublishAsync(Type messageType, object message, TimeSpan?delay = null, MessageOptions options = null, CancellationToken cancellationToken = default)
        {
            if (messageType == null || message == null)
            {
                return;
            }

            await EnsureTopicCreatedAsync(cancellationToken).AnyContext();
            await PublishImplAsync(GetMappedMessageType(messageType), message, delay, options ?? new MessageOptions(), cancellationToken).AnyContext();
        }
Esempio n. 2
0
 protected abstract Task PublishImplAsync(string messageType, object message, TimeSpan?delay, MessageOptions options, CancellationToken cancellationToken);
Esempio n. 3
0
 public static Task PublishAsync <T>(this IMessagePublisher publisher, T message, TimeSpan?delay = null, MessageOptions options = null) where T : class
 {
     return(publisher.PublishAsync(typeof(T), message, delay, options));
 }
Esempio n. 4
0
 public Task PublishAsync(Type messageType, object message, TimeSpan?delay = null, MessageOptions options = null, CancellationToken cancellationToken = default)
 {
     return(Task.CompletedTask);
 }
Esempio n. 5
0
        protected override async Task PublishImplAsync(string messageType, object message, TimeSpan?delay, MessageOptions options, CancellationToken cancellationToken)
        {
            Interlocked.Increment(ref _messagesSent);
            _messageCounts.AddOrUpdate(messageType, t => 1, (t, c) => c + 1);
            var mappedType = GetMappedMessageType(messageType);

            if (_subscribers.IsEmpty)
            {
                return;
            }

            bool isTraceLogLevelEnabled = _logger.IsEnabled(LogLevel.Trace);

            if (delay.HasValue && delay.Value > TimeSpan.Zero)
            {
                if (isTraceLogLevelEnabled)
                {
                    _logger.LogTrace("Schedule delayed message: {MessageType} ({Delay}ms)", messageType, delay.Value.TotalMilliseconds);
                }
                SendDelayedMessage(mappedType, message, delay.Value);
                return;
            }

            byte[] body        = SerializeMessageBody(messageType, message);
            var    messageData = new Message(() => DeserializeMessageBody(messageType, body))
            {
                Type    = messageType,
                ClrType = mappedType,
                Data    = body
            };

            try {
                await SendMessageToSubscribersAsync(messageData).AnyContext();
            } catch (Exception ex) {
                // swallow exceptions from subscriber handlers for the in memory bus
                _logger.LogWarning(ex, "Error sending message to subscribers: {ErrorMessage}", ex.Message);
            }
        }