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); }
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()); }
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; }
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()); }
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()); }
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); }
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(); }
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()); }
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); }
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()); }
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()); }
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()); }
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); }
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()); }
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); } }
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()); }
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); }
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"); }