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(); }