Ejemplo n.º 1
0
 public virtual Task StartAsync(OutboxConfig outboxConfig, CancellationToken cancellationToken = default)
 {
     OutboxConfig = outboxConfig;
     Outbox       = (IEventOutbox)ServiceProvider.GetRequiredService(outboxConfig.ImplementationType);
     Timer.Start(cancellationToken);
     return(Task.CompletedTask);
 }
Ejemplo n.º 2
0
    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));
    }
Ejemplo n.º 3
0
 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();
        }
    }
Ejemplo n.º 5
0
 public async override Task PublishFromOutboxAsync(OutgoingEventInfo outgoingEvent, OutboxConfig outboxConfig)
 {
     await PublishAsync(outgoingEvent.EventName, outgoingEvent.EventData, outgoingEvent.Id);
 }
Ejemplo n.º 6
0
    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);
    }
Ejemplo n.º 7
0
 public abstract Task PublishFromOutboxAsync(
     OutgoingEventInfo outgoingEvent,
     OutboxConfig outboxConfig
     );
Ejemplo n.º 8
0
 public override Task PublishFromOutboxAsync(
     OutgoingEventInfo outgoingEvent,
     OutboxConfig outboxConfig)
 {
     return(PublishAsync(outgoingEvent.EventName, outgoingEvent.EventData, null, eventId: outgoingEvent.Id));
 }
Ejemplo n.º 9
0
 public abstract Task PublishManyFromOutboxAsync(
     IEnumerable <OutgoingEventInfo> outgoingEvents,
     OutboxConfig outboxConfig
     );
Ejemplo n.º 10
0
 public static void UseSqlite <TDbContext>(this OutboxConfig outboxConfig)
     where TDbContext : IHasEventOutbox
 {
     outboxConfig.ImplementationType = typeof(ISqlRawDbContextEventOutbox <TDbContext>);
 }
Ejemplo n.º 11
0
    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);
    }
Ejemplo n.º 12
0
    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>);
 }
Ejemplo n.º 14
0
 public static void UseMongoDbContext <TMongoDbContext>(this OutboxConfig outboxConfig)
     where TMongoDbContext : IHasEventOutbox
 {
     outboxConfig.ImplementationType = typeof(IMongoDbContextEventOutbox <TMongoDbContext>);
 }