示例#1
0
        public KafkaMessageBusIt()
        {
            // address to the Kafka broker
            var kafkaBrokers = "localhost:9092";

            KafkaSettings = new KafkaMessageBusSettings(kafkaBrokers)
            {
                ProducerConfigFactory = () => new Dictionary <string, object>
                {
                    { "socket.blocking.max.ms", 1 },
                    { "queue.buffering.max.ms", 1 },
                    { "socket.nagle.disable", true }
                },
                ConsumerConfigFactory = (group) => new Dictionary <string, object>
                {
                    { "socket.blocking.max.ms", 1 },
                    { "fetch.error.backoff.ms", 1 },
                    { "statistics.interval.ms", 500000 },
                    { "socket.nagle.disable", true },
                    { "auto.offset.reset", "earliest" }
                }
            };

            MessageBusBuilder = new MessageBusBuilder()
                                .WithSerializer(new JsonMessageSerializer())
                                .WithProviderKafka(KafkaSettings);

            MessageBus = new Lazy <KafkaMessageBus>(() => (KafkaMessageBus)MessageBusBuilder.Build());
        }
        public MessageBusBaseTest()
        {
            _timeZero = DateTimeOffset.Now;
            _timeNow  = _timeZero;

            var messageBusBuilder = new MessageBusBuilder()
                                    .Publish <RequestA>(x =>
            {
                x.DefaultTopic("a-requests");
                x.DefaultTimeout(TimeSpan.FromSeconds(timeoutForA_10));
            })
                                    .Publish <RequestB>(x =>
            {
                x.DefaultTopic("b-requests");
            })
                                    .ExpectRequestResponses(x =>
            {
                x.ReplyToTopic("app01-responses");
                x.DefaultTimeout(TimeSpan.FromSeconds(timeoutDefault_20));
            })
                                    .WithDependencyResolver(new LookupDependencyResolver(t => null))
                                    .WithSerializer(new JsonMessageSerializer())
                                    .WithProvider(s => new MessageBusTested(s));

            _bus = (MessageBusTested)messageBusBuilder.Build();

            // provide current time
            _bus.CurrentTimeProvider = () => _timeNow;
        }
        private static IMessageBus BuildMessageBus()
        {
            // unique id across instances of this application (e.g. 1, 2, 3)
            var instanceId   = ConfigurationManager.AppSettings["InstanceId"];
            var kafkaBrokers = ConfigurationManager.AppSettings["Kafka.Brokers"];

            var instanceGroup   = $"webapi-{instanceId}";
            var instanceReplyTo = $"webapi-{instanceId}-response";

            var messageBusBuilder = new MessageBusBuilder()
                                    .Publish <GenerateThumbnailRequest>(x =>
            {
                // Default response timeout for this request type
                //x.DefaultTimeout(TimeSpan.FromSeconds(10));
                x.DefaultTopic("thumbnail-generation");
            })
                                    .ExpectRequestResponses(x =>
            {
                x.ReplyToTopic(instanceReplyTo);
                x.Group(instanceGroup);
                // Default global response timeout
                x.DefaultTimeout(TimeSpan.FromSeconds(30));
            })
                                    //.WithDependencyResolverAsServiceLocator()
                                    .WithDependencyResolverAsAutofac()
                                    .WithSerializer(new JsonMessageSerializer())
                                    .WithProviderKafka(new KafkaMessageBusSettings(kafkaBrokers));

            var messageBus = messageBusBuilder.Build();

            return(messageBus);
        }
示例#4
0
        public MessageBusBaseTest()
        {
            _timeZero = DateTimeOffset.Now;
            _timeNow  = _timeZero;

            BusBuilder = MessageBusBuilder.Create()
                         .Produce <RequestA>(x =>
            {
                x.DefaultTopic("a-requests");
                x.DefaultTimeout(TimeSpan.FromSeconds(TimeoutForA10));
            })
                         .Produce <RequestB>(x =>
            {
                x.DefaultTopic("b-requests");
            })
                         .ExpectRequestResponses(x =>
            {
                x.ReplyToTopic("app01-responses");
                x.DefaultTimeout(TimeSpan.FromSeconds(TimeoutDefault20));
            })
                         .WithDependencyResolver(new LookupDependencyResolver(t => null))
                         .WithSerializer(new JsonMessageSerializer())
                         .WithProvider(s =>
            {
                var bus = new MessageBusTested(s)
                {
                    // provide current time
                    CurrentTimeProvider = () => _timeNow
                };
                return(bus);
            });

            _busLazy = new Lazy <MessageBusTested>(() => (MessageBusTested)BusBuilder.Build());
        }
示例#5
0
        public void Init()
        {
            var messageBusBuilder = new MessageBusBuilder()
                                    .Publish <RequestA>(x =>
            {
                x.DefaultTopic("a-requests");
                x.DefaultTimeout(TimeSpan.FromSeconds(10));
            })
                                    .Publish <RequestB>(x =>
            {
                x.DefaultTopic("b-requests");
            })
                                    .ExpectRequestResponses(x =>
            {
                x.ReplyToTopic("app01-responses");
                x.DefaultTimeout(TimeSpan.FromSeconds(20));
            })
                                    .WithSerializer(new JsonMessageSerializer())
                                    .WithProvider(s => new MessageBusTested(s));

            _bus = (MessageBusTested)messageBusBuilder.Build();

            // provide current time
            _bus.CurrentTimeProvider = () => DateTimeOffset.UtcNow;
        }
示例#6
0
        public EventHubMessageBusIt()
        {
            _loggerFactory = NullLoggerFactory.Instance;
            _logger        = _loggerFactory.CreateLogger <EventHubMessageBusIt>();

            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            Secrets.Load(@"..\..\..\..\..\secrets.txt");

            // connection details to the Azure Event Hub
            var connectionString        = Secrets.Service.PopulateSecrets(configuration["Azure:EventHub"]);
            var storageConnectionString = Secrets.Service.PopulateSecrets(configuration["Azure:Storage"]);
            var storageContainerName    = configuration["Azure:ContainerName"];

            Settings = new EventHubMessageBusSettings(connectionString, storageConnectionString, storageContainerName);

            MessageBusBuilder = MessageBusBuilder.Create()
                                .WithLoggerFacory(_loggerFactory)
                                .WithSerializer(new JsonMessageSerializer())
                                .WithProviderEventHub(Settings);

            MessageBus = new Lazy <EventHubMessageBus>(() => (EventHubMessageBus)MessageBusBuilder.Build());
        }
示例#7
0
        public KafkaMessageBusIt()
        {
            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            var kafkaBrokers = configuration["Kafka:Brokers"];

            KafkaSettings = new KafkaMessageBusSettings(kafkaBrokers)
            {
                ProducerConfigFactory = () => new Dictionary <string, object>
                {
                    { "socket.blocking.max.ms", 1 },
                    { "queue.buffering.max.ms", 1 },
                    { "socket.nagle.disable", true }
                },
                ConsumerConfigFactory = (group) => new Dictionary <string, object>
                {
                    { "socket.blocking.max.ms", 1 },
                    { "fetch.error.backoff.ms", 1 },
                    { "statistics.interval.ms", 500000 },
                    { "socket.nagle.disable", true },
                    { KafkaConfigKeys.Consumer.AutoOffsetReset, KafkaConfigValues.AutoOffsetReset.Earliest }
                }
            };

            MessageBusBuilder = new MessageBusBuilder()
                                .WithSerializer(new JsonMessageSerializer())
                                .WithProviderKafka(KafkaSettings);

            MessageBus = new Lazy <KafkaMessageBus>(() => (KafkaMessageBus)MessageBusBuilder.Build());
        }
示例#8
0
        public static void WithJustCore()
        {
            // ... Initialization of SlimMessageBus

            // Define the recipie how to create our IMessageBus
            var busBuilder = new MessageBusBuilder()
                             .SimpleMessageBus();

            // Create the IMessageBus instance from the builder
            var bus = busBuilder
                      .Build();

            // Set the provider to resolve our bus - this setup will work as a singleton.
            MessageBus.SetProvider(() => bus);

            // ... Somewhere in your domain layer

            var greeter = new NewUserHelloGreeter();

            // Register handler explicitly
            bus.Subscribe(greeter);

            // Handlers will be executed synchronous.
            bus.Publish(new NewUserJoinedEvent("Bob"));
            bus.Publish(new NewUserJoinedEvent("Jane"));

            // .. OR

            MessageBus.Current.Publish(new NewUserJoinedEvent("Jennifer"));
            MessageBus.Current.Publish(new NewUserJoinedEvent("Tom"));

            bus.UnSubscribe(greeter);
        }
示例#9
0
        public void SetupBus()
        {
            _pingConsumer = new PingConsumer();

            //var testTopic = $"test-ping-{DateTime.Now.Ticks}";
            var topic = $"test-ping";

            // some unique string across all application instances
            var instanceId = "1";
            // address to your Kafka broker
            var kafkaBrokers = "127.0.0.1:9092";

            var messageBusBuilder = new MessageBusBuilder()
                                    .Publish <PingMessage>(x =>
            {
                x.DefaultTopic(topic);
            })
                                    .SubscribeTo <PingMessage>(x =>
            {
                x.Topic(topic)
                .Group("subscriber2")
                .WithSubscriber <PingConsumer>()
                .Instances(2);
            })
                                    .ExpectRequestResponses(x =>
            {
                x.ReplyToTopic($"worker-{instanceId}-response");
                x.Group($"worker-{instanceId}");
                x.DefaultTimeout(TimeSpan.FromSeconds(10));
            })
                                    .WithSerializer(new JsonMessageSerializer())
                                    .WithDependencyResolver(new FakeDependencyResolver(_pingConsumer))
                                    .WithProviderKafka(new KafkaMessageBusSettings(kafkaBrokers)
            {
                ProducerConfigFactory = () => new Dictionary <string, object>
                {
                    { "socket.blocking.max.ms", 1 },
                    { "queue.buffering.max.ms", 1 },
                    { "socket.nagle.disable", true }
                },
                ConsumerConfigFactory = (group) => new Dictionary <string, object>
                {
                    { "socket.blocking.max.ms", 1 },
                    { "fetch.error.backoff.ms", 1 },
                    { "statistics.interval.ms", 500000 },
                    { "socket.nagle.disable", true }
                }
            });

            _bus = (KafkaMessageBus)messageBusBuilder.Build();
        }
示例#10
0
        private static void WithServiceLocator()
        {
            // Mock: the ServiceLocator (start)
            var serviceLocatorMock         = new Mock <IServiceLocator>();
            var serviceLocatorProviderMock = new Mock <ServiceLocatorProvider>();

            serviceLocatorProviderMock.Setup(x => x()).Returns(serviceLocatorMock.Object);

            Microsoft.Practices.ServiceLocation.ServiceLocator.SetLocatorProvider(serviceLocatorProviderMock.Object);

            // Mock: the ServiceLocator (end)

            // Define the recipie how to create our IMessageBus
            var busBuilder = new MessageBusBuilder()
                             .ResolveHandlersFromServiceLocator() // Needs SlimMessageBus.ServiceLocator NuGet package
                             .SimpleMessageBus();

            // Mock: Every call to ServiceLocator.GetInstance<IMessageBus>() resolves a new instance
            // The IMessageBus would be bound to the proper scope in your app (per Web Request, per Thread, per Unit Of Work, etc)
            serviceLocatorMock.Setup(x => x.GetInstance <IMessageBus>()).Returns(() =>
            {
                // Create the IMessageBus instance from the builder
                var busInstance = busBuilder
                                  .Build();
                return(busInstance);
            });

            // Set the provider to resolve our bus - this will lookup the IMessageBus instance in the ServiceLocator.
            MessageBus.SetProvider(() => Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance <IMessageBus>());

            // Mock: The handlers are registered in the DI container
            var greeter = new NewUserHelloGreeter();

            serviceLocatorMock.Setup(x => x.GetAllInstances <IHandles <NewUserJoinedEvent> >()).Returns(new[] { greeter });

            // ... Initialization finished


            // Handlers will be executed synchronous.
            // Injected from your DI container or resolved from ServiceLocator
            IMessageBus bus = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance <IMessageBus>();

            bus.Publish(new NewUserJoinedEvent("Bob"));
            bus.Publish(new NewUserJoinedEvent("Jane"));

            // OR

            MessageBus.Current.Publish(new NewUserJoinedEvent("Jennifer"));
            MessageBus.Current.Publish(new NewUserJoinedEvent("Tom"));
        }
        public FeatureToggleIntegrationTests()
        {
            var logger = NullLogger.Instance;

            var entityConnectionConfig   = new EntityConnectionConfig(new DatabaseConnectionConfig(@"(localdb)\MSSQLLocalDB", "Grumpy.FeatureToggle.Database_Model"));
            var repositoryContextFactory = new RepositoryContextFactory(logger, entityConnectionConfig);
            var messageBusBuilder        = new MessageBusBuilder();

            var messageBus = messageBusBuilder.Build();

            _cut = new Core.FeatureToggle(logger, messageBus, repositoryContextFactory);

            messageBus.Start(new CancellationToken());
        }
示例#12
0
        private static IMessageBus BuildMessageBus(IConfigurationRoot configuration)
        {
            // unique id across instances of this application (e.g. 1, 2, 3)
            var instanceId   = configuration["InstanceId"];
            var kafkaBrokers = configuration["Kafka:Brokers"];

            var instanceGroup = $"worker-{instanceId}";
            var sharedGroup   = $"workers";

            var messageBusBuilder = new MessageBusBuilder()
                                    .Handle <GenerateThumbnailRequest, GenerateThumbnailResponse>(s =>
            {
                s.Topic("thumbnail-generation", t =>
                {
                    t.Group(sharedGroup)
                    .WithHandler <GenerateThumbnailRequestHandler>()
                    .Instances(3);

                    //t.Group(sharedGroup)
                    //    .WithConsumer<GenerateThumbnailRequestSubscriber>()
                    //    .Instances(3);
                });
            })
                                    //.WithDependencyResolverAsServiceLocator()
                                    .WithDependencyResolverAsAutofac()
                                    .WithSerializer(new JsonMessageSerializer())
                                    .WithProviderKafka(new KafkaMessageBusSettings(kafkaBrokers)
            {
                ConsumerConfigFactory = (group) => new Dictionary <string, object>
                {
                    { KafkaConfigKeys.Consumer.AutoCommitEnableMs, 5000 },
                    { KafkaConfigKeys.Consumer.StatisticsIntervalMs, 60000 },
                    {
                        "default.topic.config", new Dictionary <string, object>
                        {
                            { KafkaConfigKeys.Consumer.AutoOffsetReset, KafkaConfigValues.AutoOffsetReset.Latest }
                        }
                    }
                }
            });

            var messageBus = messageBusBuilder.Build();

            return(messageBus);
        }
示例#13
0
        public KafkaMessageBusIt()
        {
            _loggerFactory = NullLoggerFactory.Instance;
            _logger        = _loggerFactory.CreateLogger <KafkaMessageBusIt>();

            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            Secrets.Load(@"..\..\..\..\..\secrets.txt");

            var kafkaBrokers  = configuration["Kafka:Brokers"];
            var kafkaUsername = Secrets.Service.PopulateSecrets(configuration["Kafka:Username"]);
            var kafkaPassword = Secrets.Service.PopulateSecrets(configuration["Kafka:Password"]);

            // Topics on cloudkarafka.com are prefixed with username
            TopicPrefix = $"{kafkaUsername}-";

            KafkaSettings = new KafkaMessageBusSettings(kafkaBrokers)
            {
                ProducerConfig = (config) =>
                {
                    AddSsl(kafkaUsername, kafkaPassword, config);

                    config.LingerMs           = 5; // 5ms
                    config.SocketNagleDisable = true;
                },
                ConsumerConfig = (config) => {
                    AddSsl(kafkaUsername, kafkaPassword, config);

                    config.FetchErrorBackoffMs = 1;
                    config.SocketNagleDisable  = true;

                    config.StatisticsIntervalMs = 500000;
                    config.AutoOffsetReset      = AutoOffsetReset.Earliest;
                }
            };

            MessageBusBuilder = MessageBusBuilder.Create()
                                .WithLoggerFacory(_loggerFactory)
                                .WithSerializer(new JsonMessageSerializer())
                                .WithProviderKafka(KafkaSettings);

            MessageBus = new Lazy <KafkaMessageBus>(() => (KafkaMessageBus)MessageBusBuilder.Build());
        }
示例#14
0
        public RedisMessageBusIt()
        {
            LogManager.Adapter = new DebugLoggerFactoryAdapter();

            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            Secrets.Load(@"..\..\..\..\..\secrets.txt");

            var connectionString = Secrets.Service.PopulateSecrets(configuration["Redis:ConnectionString"]);

            MessageBusBuilder = MessageBusBuilder.Create()
                                .WithSerializer(new JsonMessageSerializer())
                                .WithProviderRedis(new RedisMessageBusSettings(connectionString));

            MessageBus = new Lazy <RedisMessageBus>(() => (RedisMessageBus)MessageBusBuilder.Build());
        }
示例#15
0
        public MemoryMessageBusIt()
        {
            LogManager.Adapter = new DebugLoggerFactoryAdapter();

            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            Secrets.Load(@"..\..\..\..\..\secrets.txt");

            MessageBusSettings = new MemoryMessageBusSettings();

            MessageBusBuilder = MessageBusBuilder.Create()
                                .WithSerializer(new JsonMessageSerializer())
                                .WithProviderMemory(MessageBusSettings);

            MessageBus = new Lazy <MemoryMessageBus>(() => (MemoryMessageBus)MessageBusBuilder.Build());
        }
        public KafkaMessageBusIt()
        {
            _loggerFactory = NullLoggerFactory.Instance;
            _logger        = _loggerFactory.CreateLogger <KafkaMessageBusIt>();

            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            Secrets.Load(@"..\..\..\..\..\secrets.txt");

            var kafkaBrokers  = configuration["Kafka:Brokers"];
            var kafkaUsername = Secrets.Service.PopulateSecrets(configuration["Kafka:Username"]);
            var kafkaPassword = Secrets.Service.PopulateSecrets(configuration["Kafka:Password"]);

            // Topics on cloudkarafka.com are prefixed with username
            TopicPrefix = $"{kafkaUsername}-";

            KafkaSettings = new KafkaMessageBusSettings(kafkaBrokers)
            {
                ProducerConfigFactory = () => AddSsl(kafkaUsername, kafkaPassword, new Dictionary <string, object>
                {
                    { "socket.blocking.max.ms", 1 },
                    { "queue.buffering.max.ms", 1 },
                    { "socket.nagle.disable", true },
                    //{"request.required.acks", 0}
                }),
                ConsumerConfigFactory = (group) => AddSsl(kafkaUsername, kafkaPassword, new Dictionary <string, object>
                {
                    { "socket.blocking.max.ms", 1 },
                    { "fetch.error.backoff.ms", 1 },
                    { "statistics.interval.ms", 500000 },
                    { "socket.nagle.disable", true },
                    { KafkaConfigKeys.ConsumerKeys.AutoOffsetReset, KafkaConfigValues.AutoOffsetReset.Earliest }
                })
            };

            MessageBusBuilder = MessageBusBuilder.Create()
                                .WithLoggerFacory(_loggerFactory)
                                .WithSerializer(new JsonMessageSerializer())
                                .WithProviderKafka(KafkaSettings);

            MessageBus = new Lazy <KafkaMessageBus>(() => (KafkaMessageBus)MessageBusBuilder.Build());
        }
示例#17
0
        public EventHubMessageBusIt()
        {
            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            // address to the Kafka broker
            var connectionString        = configuration["Azure:EventHub"];
            var storageConnectionString = configuration["Azure:Storage"];
            var storageContainerName    = configuration["Azure:ContainerName"];

            Settings = new EventHubMessageBusSettings(connectionString, storageConnectionString, storageContainerName);

            MessageBusBuilder = new MessageBusBuilder()
                                .WithSerializer(new JsonMessageSerializer())
                                .WithProviderEventHub(Settings);

            MessageBus = new Lazy <EventHubMessageBus>(() => (EventHubMessageBus)MessageBusBuilder.Build());
        }
        public RedisMessageBusIt()
        {
            _loggerFactory = NullLoggerFactory.Instance;
            _logger        = _loggerFactory.CreateLogger <RedisMessageBusIt>();

            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            Secrets.Load(@"..\..\..\..\..\secrets.txt");

            var connectionString = Secrets.Service.PopulateSecrets(configuration["Redis:ConnectionString"]);

            MessageBusBuilder = MessageBusBuilder.Create()
                                .WithLoggerFacory(_loggerFactory)
                                .WithSerializer(new JsonMessageSerializer())
                                .WithProviderRedis(new RedisMessageBusSettings(connectionString));

            MessageBus = new Lazy <RedisMessageBus>(() => (RedisMessageBus)MessageBusBuilder.Build());
        }
        public MemoryMessageBusIt()
        {
            _loggerFactory = NullLoggerFactory.Instance;
            _logger        = _loggerFactory.CreateLogger <MemoryMessageBusIt>();

            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            Secrets.Load(@"..\..\..\..\..\secrets.txt");

            MessageBusSettings = new MemoryMessageBusSettings();

            MessageBusBuilder = MessageBusBuilder.Create()
                                .WithLoggerFacory(_loggerFactory)
                                .WithSerializer(new JsonMessageSerializer())
                                .WithProviderMemory(MessageBusSettings);

            MessageBus = new Lazy <MemoryMessageBus>(() => (MemoryMessageBus)MessageBusBuilder.Build());
        }
        protected override void Process(CancellationToken cancellationToken)
        {
            Logger = new ConsoleLogger(ServiceName, (message, level) => level >= _logLevel, false);

            var appSettings = ConfigurationManager.AppSettings;

            Enum.TryParse(appSettings["LogLevel"], true, out _logLevel);

            var entityConnectionConfig   = new EntityConnectionConfig(new DatabaseConnectionConfig(appSettings["DatabaseServer"], appSettings["DatabaseName"]));
            var repositoryContextFactory = new RepositoryContextFactory(Logger, entityConnectionConfig);
            var messageBusBuilder        = new MessageBusBuilder();

            messageBusBuilder.WithLogger(Logger);
            messageBusBuilder.WithServiceName(ServiceName);

            _messageBus = messageBusBuilder.Build();

            _featureToggle = new Core.FeatureToggle(Logger, _messageBus, repositoryContextFactory);

            _messageBus.Start(cancellationToken);
        }
示例#21
0
        public KafkaMessageBusIt()
        {
            LogManager.Adapter = new DebugLoggerFactoryAdapter();
            //LogManager.Adapter = new NoOpLoggerFactoryAdapter();

            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            Secrets.Load(@"..\..\..\..\..\secrets.txt");

            var kafkaBrokers  = configuration["Kafka:Brokers"];
            var kafkaUsername = Secrets.Service.PopulateSecrets(configuration["Kafka:Username"]);
            var kafkaPassword = Secrets.Service.PopulateSecrets(configuration["Kafka:Password"]);

            KafkaSettings = new KafkaMessageBusSettings(kafkaBrokers)
            {
                ProducerConfigFactory = () => new Dictionary <string, object>
                {
                    { "socket.blocking.max.ms", 1 },
                    { "queue.buffering.max.ms", 1 },
                    { "socket.nagle.disable", true },
                    //{"request.required.acks", 0}
                },
                ConsumerConfigFactory = (group) => new Dictionary <string, object>
                {
                    { "socket.blocking.max.ms", 1 },
                    { "fetch.error.backoff.ms", 1 },
                    { "statistics.interval.ms", 500000 },
                    { "socket.nagle.disable", true },
                    { KafkaConfigKeys.ConsumerKeys.AutoOffsetReset, KafkaConfigValues.AutoOffsetReset.Earliest }
                }
            };
            MessageBusBuilder = MessageBusBuilder.Create()
                                .WithSerializer(new JsonMessageSerializer())
                                .WithProviderKafka(KafkaSettings);

            MessageBus = new Lazy <KafkaMessageBus>(() => (KafkaMessageBus)MessageBusBuilder.Build());
        }
示例#22
0
        public Tester()
        {
            var appSettings = ConfigurationManager.AppSettings;

            if (Enum.TryParse(appSettings["LogLevel"], true, out LogLevel logLevel))
            {
                _logLevel = logLevel;
            }

            _logger = new ConsoleLogger("Tester", (message, level) => level >= _logLevel, false);
            var builder = new MessageBusBuilder().WithLogger(_logger);

            _processInformation      = new ProcessInformation();
            _cancellationTokenSource = new CancellationTokenSource();

            Console.WriteLine("Alt+1: Publish Topic=PersonCreated Dto=PersonDto Persistent=true");
            Console.WriteLine("Alt+2: Publish Topic=TripCreated Dto=TripDto Persistent=false");
            Console.WriteLine("Alt+3: Request Name=Person");
            Console.WriteLine("Alt+4: Publish Topic=CarCreated Dto=CarDto Persistent=true");
            Console.WriteLine("Alt+5: RequestSync Name=Person with id 1 (n Times)");
            Console.WriteLine("Alt+6: RequestAsync Name=Person with id 1 (n Times)");
            Console.WriteLine("Alt+7: Publish Persistent Message (n Times)");
            Console.WriteLine("Alt+8: Publish Non-Persistent Message (n Times)");
            Console.WriteLine("Alt+9: Request NonExisting");
            Console.WriteLine($"The {_processInformation.ProcessName} tester is now running, press Control+C to exit.");

            try
            {
                _messageBus = builder.Build();
                _messageBus.Start(_cancellationTokenSource.Token);

                Console.WriteLine("RipplesMQ MessageBus Started");
            }
            catch (Exception exception)
            {
                _logger.Error(exception, "Exception {@Exception}", exception);
            }
        }
示例#23
0
        public KafkaMessageBusIt()
        {
            LogManager.Adapter = new DebugLoggerFactoryAdapter();

            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            var kafkaBrokers = configuration["Kafka:Brokers"];

            KafkaSettings = new KafkaMessageBusSettings(kafkaBrokers)
            {
                ProducerConfigFactory = () => new Dictionary <string, object>
                {
                    { "socket.blocking.max.ms", 1 },
                    { "queue.buffering.max.ms", 1 },
                    { "socket.nagle.disable", true },
                    { "request.timeout.ms", 2000 }, // when no response within 2 sec of sending a msg, report error
                    { "message.timeout.ms", 5000 }
                    //{"delivery.timeout.ms", 10000 } // when no delivery ack within 10 sek, report error
                },
                ConsumerConfigFactory = (group) => new Dictionary <string, object>
                {
                    { "socket.blocking.max.ms", 1 },
                    { "fetch.error.backoff.ms", 1 },
                    { "statistics.interval.ms", 500000 },
                    { "socket.nagle.disable", true },
                    { KafkaConfigKeys.ConsumerKeys.AutoOffsetReset, KafkaConfigValues.AutoOffsetReset.Earliest }
                }
            };

            MessageBusBuilder = MessageBusBuilder.Create()
                                .WithSerializer(new JsonMessageSerializer())
                                .WithProviderKafka(KafkaSettings);

            MessageBus = new Lazy <KafkaMessageBus>(() => (KafkaMessageBus)MessageBusBuilder.Build());
        }
示例#24
0
        private static IMessageBus BuildMessageBus()
        {
            // unique id across instances of this application (e.g. 1, 2, 3)
            var instanceId   = "1";
            var kafkaBrokers = "172.16.4.241:9092";

            var instanceGroup = $"worker-{instanceId}";
            var sharedGroup   = $"workers";


            var kafkaSettings = new KafkaMessageBusSettings(kafkaBrokers);


            kafkaSettings.ProducerConfigFactory = () => new Dictionary <string, object>
            {
                { "batch.num.messages", 1 },
                { "message.max.bytes", 1000 },
                { "api.version.request", true },
                { "queue.buffering.max.ms", 1 },
                { "socket.blocking.max.ms", 1 },
                { "fetch.wait.max.ms", 10 },
                { "fetch.error.backoff.ms", 10 },
                { "fetch.min.bytes", 10 },
                { "socket.nagle.disable", true }
            };
            kafkaSettings.ConsumerConfigFactory = (group) => new Dictionary <string, object>
            {
                { "fetch.wait.max.ms", 10 },
                { "fetch.error.backoff.ms", 10 },
                { "queued.min.messages", 1 },
                { "api.version.request", true },
                { "queue.buffering.max.ms", 1 },
                { "socket.blocking.max.ms", 1 },
                { "fetch.min.bytes", 10 },
                { "statistics.interval.ms", 500000 },
                { "socket.nagle.disable", true }
            };



            var messageBusBuilder = new MessageBusBuilder()
                                    .Handle <PingRequest, PingResponse>(s =>
            {
                s.Topic("test-ping", t =>
                {
                    t.Group("ponggroup")
                    .WithHandler <PingHandler>()
                    .Instances(3);

                    //t.Group(sharedGroup)
                    //    .WithConsumer<GenerateThumbnailRequestSubscriber>()
                    //    .Instances(3);
                });
            })
                                    .WithDependencyResolverAsServiceLocator()
                                    .WithSerializer(new JsonMessageSerializer())
                                    .WithProviderKafka(kafkaSettings);

            var messageBus = messageBusBuilder.Build();

            return(messageBus);
        }
示例#25
0
        static void Main(string[] args)
        {
            SlimMessageBus.IMessageBus _bus;

            //var testTopic = $"test-ping-{DateTime.Now.Ticks}";
            var topic = $"test-ping";

            // some unique string across all application instances
            var instanceId = "1";
            // address to your Kafka broker
            var kafkaBrokers  = "172.16.4.241:9092";
            var kafkaSettings = new KafkaMessageBusSettings(kafkaBrokers);

            kafkaSettings.ProducerConfigFactory = () => new Dictionary <string, object>
            {
                { "batch.num.messages", 1 },
                { "message.max.bytes", 1000 },
                { "api.version.request", true },
                { "queue.buffering.max.ms", 1 },
                { "socket.blocking.max.ms", 1 },
                { "fetch.wait.max.ms", 10 },
                { "fetch.error.backoff.ms", 10 },
                { "fetch.min.bytes", 10 },
                { "socket.nagle.disable", true }
            };
            kafkaSettings.ConsumerConfigFactory = (group) => new Dictionary <string, object>
            {
                { "fetch.wait.max.ms", 10 },
                { "fetch.error.backoff.ms", 10 },
                { "queued.min.messages", 1 },
                { "api.version.request", true },
                { "queue.buffering.max.ms", 1 },
                { "socket.blocking.max.ms", 1 },
                { "fetch.min.bytes", 10 },
                { "statistics.interval.ms", 500000 },
                { "socket.nagle.disable", true }
            };
            //  conf->set("fetch.min.bytes", "1", errstr);
            //  conf->set("queued.min.messages", "1", errstr);
            var messageBusBuilder = new MessageBusBuilder()
                                    .Publish <PingRequest>(x =>
            {
                x.DefaultTopic(topic);
            })
                                    .ExpectRequestResponses(x =>
            {
                x.ReplyToTopic($"worker-{instanceId}-response");
                x.Group($"worker-{instanceId}");
                x.DefaultTimeout(TimeSpan.FromSeconds(30));
            })
                                    .WithSerializer(new JsonMessageSerializer())
                                    .WithProviderKafka(kafkaSettings);

            _bus = (KafkaMessageBus)messageBusBuilder.Build();
            var  b      = new Program();
            bool cancel = false;

            Console.CancelKeyPress += delegate {
                cancel = true;
            };
            Log.Info("Starting worker...");
            //   using (var container = ContainerSetup.Create())
            {
                //       var messagBus = container.Resolve<IMessageBus>();
                Log.Info("Worker ready");

                while (!cancel)
                {
                    Log.Info("Sending message");
                    //var tasks = new List<Task<PingResponse>>();
                    //for (int i = 0; i < 1; i++)
                    //{
                    var t = Send(_bus);
                    //         tasks.Add(t);
                    //       }
                    //      Task.WaitAll(tasks.OfType<Task>().ToArray());
                    //       foreach (var t in tasks)
                    {
                        var r = t.Result;
                        Console.WriteLine("{0} {1} {2}", r.Key, r.Timestamp, (DateTime.Now - r.Timestamp).ToString());
                    }

                    //   System.Threading.Thread.Sleep(100);
                }
            }
            Log.Info("Worker stopped");
        }