/// <summary> /// Create a consumer. /// </summary> public IConsumer CreateConsumer(ConsumerOptions options) { ThrowIfDisposed(); var correlationId = Guid.NewGuid(); var executor = new Executor(correlationId, _processManager, _exceptionHandler); var subscribe = new CommandSubscribe { ConsumerName = options.ConsumerName, InitialPosition = (CommandSubscribe.InitialPositionType)options.InitialPosition, PriorityLevel = options.PriorityLevel, ReadCompacted = options.ReadCompacted, Subscription = options.SubscriptionName, Topic = options.Topic, Type = (CommandSubscribe.SubType)options.SubscriptionType }; var messagePrefetchCount = options.MessagePrefetchCount; var batchHandler = new BatchHandler(true); var decompressorFactories = CompressionFactories.DecompressorFactories(); var factory = new ConsumerChannelFactory(correlationId, _processManager, _connectionPool, executor, subscribe, messagePrefetchCount, batchHandler, decompressorFactories); var stateManager = new StateManager <ConsumerState>(ConsumerState.Disconnected, ConsumerState.Closed, ConsumerState.ReachedEndOfTopic, ConsumerState.Faulted); var consumer = new Consumer(correlationId, ServiceUrl, options.SubscriptionName, options.Topic, _processManager, new NotReadyChannel(), executor, stateManager); if (options.StateChangedHandler is not null) { _ = StateMonitor.MonitorConsumer(consumer, options.StateChangedHandler); } var process = new ConsumerProcess(correlationId, stateManager, factory, consumer, options.SubscriptionType == SubscriptionType.Failover); _processManager.Add(process); process.Start(); return(consumer); }
private static void PrepareThreads(CancellationTokenSource cancelTokenSource) { string name = $"Consumer-{Guid.NewGuid()}"; ConsumerProcess c = new ConsumerProcess(name); consumers.Add(c); var task = Task.Factory.StartNew(() => c.Run(cancelTokenSource), cancelTokenSource.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default); tasks.Add(task); }
private static Task[] StartListeningToTopics(IConfigurationRoot configuration, CancellationToken token) { var products = new ConsumerProcess <Null, Product>(configuration.GetOptions <KafkaOptions>("kafka")); products.OnMessageConsumed += ProductsOnMessageConsumed; Task[] consumers = { products.Consume("marketing-products", token) }; return(consumers); }
public IConsumer CreateConsumer(ConsumerOptions options) { ThrowIfDisposed(); var correlationId = Guid.NewGuid(); var executor = new Executor(correlationId, _processManager, _exceptionHandler); var factory = new ConsumerChannelFactory(correlationId, _processManager, _connectionPool, executor, options); var stateManager = new StateManager <ConsumerState>(ConsumerState.Disconnected, ConsumerState.Closed, ConsumerState.ReachedEndOfTopic, ConsumerState.Faulted); var consumer = new Consumer(correlationId, _processManager, new NotReadyChannel(), new AsyncLockExecutor(executor), stateManager); var process = new ConsumerProcess(correlationId, stateManager, factory, consumer, options.SubscriptionType == SubscriptionType.Failover); _processManager.Add(process); process.Start(); return(consumer); }