Example #1
0
        public virtual void Publish <T>(T message) where T : IMessage
        {
            var descriptor = _messageTopicResolver.Resolve(message);

            var headers = _coreSessionProvider.Session.ToHeaders();

            if (headers != null)
            {
                var rich = new RichMessageDescriptor(descriptor.MessageGroup, descriptor.MessageTopic);
                foreach (var item in headers)
                {
                    rich.Headers.Add(item.Key, item.Value);
                }
                descriptor = rich;
            }

            if (_messageStore.IsPublishedAsync(descriptor, message).GetAwaiter().GetResult())
            {
                _logger.LogWarning($"[{descriptor.MessageGroup}][{descriptor.MessageTopic}]Message has already published");
                return;
            }
            var wrapper = new MessageWrapper(descriptor, message);

            _messagePublisherWrapper.Publish(wrapper);
            _messageStore.StoreAsync(descriptor, message).GetAwaiter().GetResult();
        }