示例#1
0
文件: Bus.cs 项目: wangscript007/Pole
        public async Task <bool> Publish(object @event, CancellationToken cancellationToken = default)
        {
            var eventType     = @event.GetType();
            var eventTypeCode = eventTypeFinder.GetCode(eventType);
            var eventId       = snowflakeIdGenerator.NextId();
            var eventContent  = serializer.Serialize(@event, eventType);
            var eventEntity   = new EventEntity
            {
                Added      = DateTime.UtcNow,
                Content    = eventContent,
                ExpiresAt  = null,
                Id         = eventId,
                Name       = eventTypeCode,
                Retries    = 0,
                StatusName = nameof(EventStatus.Pending)
            };

            if (Transaction?.DbTransaction == null)
            {
                await eventStorage.StoreEvent(eventEntity);
            }
            else
            {
                await eventStorage.StoreEvent(eventEntity, Transaction.DbTransaction);
            }
            PrePublishEventBuffer.Add(eventEntity);

            return(true);
        }