public virtual Task StartAsync(OutboxConfig outboxConfig, CancellationToken cancellationToken = default) { OutboxConfig = outboxConfig; Outbox = (IEventOutbox)ServiceProvider.GetRequiredService(outboxConfig.ImplementationType); Timer.Start(cancellationToken); return(Task.CompletedTask); }
public override Task PublishFromOutboxAsync( OutgoingEventInfo outgoingEvent, OutboxConfig outboxConfig) { var eventType = EventTypes.GetOrDefault(outgoingEvent.EventName); var eventData = Serializer.Deserialize(outgoingEvent.EventData, eventType); return(PublishToEventBusAsync(eventType, eventData)); }
public override Task PublishFromOutboxAsync( OutgoingEventInfo outgoingEvent, OutboxConfig outboxConfig) { return(PublishAsync( AbpKafkaEventBusOptions.TopicName, outgoingEvent.EventName, outgoingEvent.EventData, new Headers { { "messageId", System.Text.Encoding.UTF8.GetBytes(outgoingEvent.Id.ToString("N")) } } )); }
public async override Task PublishManyFromOutboxAsync( IEnumerable <OutgoingEventInfo> outgoingEvents, OutboxConfig outboxConfig) { using (var channel = ConnectionPool.Get(AbpRabbitMqEventBusOptions.ConnectionName).CreateModel()) { var outgoingEventArray = outgoingEvents.ToArray(); channel.ConfirmSelect(); foreach (var outgoingEvent in outgoingEventArray) { await PublishAsync( channel, outgoingEvent.EventName, outgoingEvent.EventData, properties : null, eventId : outgoingEvent.Id); } channel.WaitForConfirmsOrDie(); } }
public async override Task PublishFromOutboxAsync(OutgoingEventInfo outgoingEvent, OutboxConfig outboxConfig) { await PublishAsync(outgoingEvent.EventName, outgoingEvent.EventData, outgoingEvent.Id); }
public async override Task PublishManyFromOutboxAsync(IEnumerable <OutgoingEventInfo> outgoingEvents, OutboxConfig outboxConfig) { var outgoingEventArray = outgoingEvents.ToArray(); var publisher = await _publisherPool.GetAsync( _options.TopicName, _options.ConnectionName); using var messageBatch = await publisher.CreateMessageBatchAsync(); foreach (var outgoingEvent in outgoingEventArray) { var message = new ServiceBusMessage(outgoingEvent.EventData) { Subject = outgoingEvent.EventName }; if (message.MessageId.IsNullOrWhiteSpace()) { message.MessageId = outgoingEvent.Id.ToString(); } if (!messageBatch.TryAddMessage(message)) { throw new AbpException( "The message is too large to fit in the batch. Set AbpEventBusBoxesOptions.OutboxWaitingEventMaxCount to reduce the number"); } } await publisher.SendMessagesAsync(messageBatch); }
public abstract Task PublishFromOutboxAsync( OutgoingEventInfo outgoingEvent, OutboxConfig outboxConfig );
public override Task PublishFromOutboxAsync( OutgoingEventInfo outgoingEvent, OutboxConfig outboxConfig) { return(PublishAsync(outgoingEvent.EventName, outgoingEvent.EventData, null, eventId: outgoingEvent.Id)); }
public abstract Task PublishManyFromOutboxAsync( IEnumerable <OutgoingEventInfo> outgoingEvents, OutboxConfig outboxConfig );
public static void UseSqlite <TDbContext>(this OutboxConfig outboxConfig) where TDbContext : IHasEventOutbox { outboxConfig.ImplementationType = typeof(ISqlRawDbContextEventOutbox <TDbContext>); }
public override Task PublishManyFromOutboxAsync(IEnumerable <OutgoingEventInfo> outgoingEvents, OutboxConfig outboxConfig) { var producer = ProducerPool.Get(); var outgoingEventArray = outgoingEvents.ToArray(); producer.BeginTransaction(); try { foreach (var outgoingEvent in outgoingEventArray) { var messageId = outgoingEvent.Id.ToString("N"); var headers = new Headers { { "messageId", System.Text.Encoding.UTF8.GetBytes(messageId) } }; producer.Produce( AbpKafkaEventBusOptions.TopicName, new Message <string, byte[]> { Key = outgoingEvent.EventName, Value = outgoingEvent.EventData, Headers = headers }); } producer.CommitTransaction(); } catch (Exception e) { producer.AbortTransaction(); throw; } return(Task.CompletedTask); }
public async override Task PublishManyFromOutboxAsync(IEnumerable <OutgoingEventInfo> outgoingEvents, OutboxConfig outboxConfig) { var outgoingEventArray = outgoingEvents.ToArray(); using (var scope = new RebusTransactionScope()) { foreach (var outgoingEvent in outgoingEventArray) { await PublishFromOutboxAsync(outgoingEvent, outboxConfig); } await scope.CompleteAsync(); } }
public static void UseNpgsql <TDbContext>(this OutboxConfig outboxConfig) where TDbContext : IHasEventOutbox { outboxConfig.ImplementationType = typeof(IPostgreSqlDbContextEventOutbox <TDbContext>); }
public static void UseMongoDbContext <TMongoDbContext>(this OutboxConfig outboxConfig) where TMongoDbContext : IHasEventOutbox { outboxConfig.ImplementationType = typeof(IMongoDbContextEventOutbox <TMongoDbContext>); }