コード例 #1
0
        public static PubSubOptionsBuilder UseInMemory(this PubSubOptionsBuilder pubSubOptbuilder, Action <InMemorySubOptionsBuilder> action = null)
        {
            var optionsBuilder = new InMemorySubOptionsBuilder();

            action?.Invoke(optionsBuilder);

            pubSubOptbuilder.Services.AddSingleton <ConcurrentQueue <MessageEnvelope> >();
            pubSubOptbuilder.Services.AddSingleton <IConsumer>(provider =>
            {
                var queue = provider.GetRequiredService <ConcurrentQueue <MessageEnvelope> >();
                return(new InMemoryConsumer(queue, optionsBuilder.Options));
            });
            pubSubOptbuilder.Services.AddScoped <IPublisher, InMemoryPublisher>();
            pubSubOptbuilder.Services.AddHostedService(provider =>
            {
                using (var scope = provider.CreateScope())
                {
                    var consumer = scope.ServiceProvider.GetRequiredService <IConsumer>();
                    var mediator = scope.ServiceProvider.GetRequiredService <IMediator>();
                    return(new ConsumerBackgroundService(consumer, mediator));
                }
            });

            return(pubSubOptbuilder);
        }
コード例 #2
0
        public static PubSubOptionsBuilder UseKafka(this PubSubOptionsBuilder pubSubOptbuilder, Action <KafkaPubSubOptionsBuilder> action)
        {
            var kafkaOptionsBuilder = new KafkaPubSubOptionsBuilder();

            action?.Invoke(kafkaOptionsBuilder);

            pubSubOptbuilder.Services.AddSingleton(kafkaOptionsBuilder);

            pubSubOptbuilder.Services.AddSingleton <IConsumer>(provider =>
            {
                var config = new ConsumerConfig
                {
                    GroupId          = kafkaOptionsBuilder.Options.ConsumerGroup,
                    BootstrapServers = string.Concat(',', kafkaOptionsBuilder.Options.Servers)
                };
                return(new KafkaConsumer(config, kafkaOptionsBuilder.Options.Subscriptions));
            });

            pubSubOptbuilder.Services.AddSingleton(provider =>
            {
                return(new ProducerConfig
                {
                    BootstrapServers = string.Join(',', kafkaOptionsBuilder.Options.Servers),
                    TransactionalId = kafkaOptionsBuilder.Options.TransactionalId
                });
            });

            pubSubOptbuilder.Services.AddHostedService(provider =>
            {
                using (var scope = provider.CreateScope())
                {
                    var consumer = scope.ServiceProvider.GetRequiredService <IConsumer>();
                    var mediator = scope.ServiceProvider.GetRequiredService <IMediator>();
                    return(new ConsumerBackgroundService(consumer, mediator));
                }
            });

            pubSubOptbuilder.Services.AddScoped <IPublisher, KafkaPublisher>();

            return(pubSubOptbuilder);
        }