/// <summary>
        /// Create a producer.
        /// </summary>
        public IProducer CreateProducer(ProducerOptions options)
        {
            ThrowIfDisposed();

            ICompressorFactory?compressorFactory = null;

            if (options.CompressionType != CompressionType.None)
            {
                var compressionType = (Internal.PulsarApi.CompressionType)options.CompressionType;
                compressorFactory = CompressionFactories.CompressorFactories().SingleOrDefault(f => f.CompressionType == compressionType);
                if (compressorFactory is null)
                {
                    throw new CompressionException($"Support for {compressionType} compression was not found");
                }
            }

            var correlationId = Guid.NewGuid();
            var executor      = new Executor(correlationId, _processManager, _exceptionHandler);
            var factory       = new ProducerChannelFactory(correlationId, _processManager, _connectionPool, executor, options, compressorFactory);
            var stateManager  = new StateManager <ProducerState>(ProducerState.Disconnected, ProducerState.Closed, ProducerState.Faulted);
            var producer      = new Producer(correlationId, ServiceUrl, options.Topic, options.InitialSequenceId, _processManager, new NotReadyChannel(), executor, stateManager);

            if (options.StateChangedHandler is not null)
            {
                _ = StateMonitor.MonitorProducer(producer, options.StateChangedHandler);
            }
            var process = new ProducerProcess(correlationId, stateManager, factory, producer);

            _processManager.Add(process);
            process.Start();
            return(producer);
        }
Example #2
0
        /// <summary>
        /// Create a producer.
        /// </summary>
        public IProducer <TMessage> CreateProducer <TMessage>(ProducerOptions <TMessage> options)
        {
            ThrowIfDisposed();

            ICompressorFactory?compressorFactory = null;

            if (options.CompressionType != CompressionType.None)
            {
                var compressionType = (Internal.PulsarApi.CompressionType)options.CompressionType;
                compressorFactory = CompressionFactories.CompressorFactories().SingleOrDefault(f => f.CompressionType == compressionType);

                if (compressorFactory is null)
                {
                    throw new CompressionException($"Support for {compressionType} compression was not found");
                }
            }

            var producer = new Producer <TMessage>(ServiceUrl, options, _processManager, _exceptionHandler, _connectionPool, compressorFactory);

            if (options.StateChangedHandler is not null)
            {
                _ = StateMonitor.MonitorProducer(producer, options.StateChangedHandler);
            }

            return(producer);
        }
Example #3
0
 public IProducer CreateProducer(ProducerOptions options)
 {
     lock (_lock)
     {
         ThrowIfClosed();
         var producer = new Producer(new ProducerStreamFactory(_connectionPool, options, _faultStrategy), _faultStrategy);
         _disposabels.AddFirst(producer);
         producer.StateChangedTo(ProducerState.Closed, default).AsTask().ContinueWith(t => Remove(producer));
         return(producer);
     }
 }
        /// <summary>
        /// Create a producer.
        /// </summary>
        public IProducer CreateProducer(ProducerOptions options)
        {
            ThrowIfDisposed();
            var correlationId = Guid.NewGuid();
            var executor      = new Executor(correlationId, _processManager, _exceptionHandler);
            var factory       = new ProducerChannelFactory(correlationId, _processManager, _connectionPool, executor, options);
            var stateManager  = new StateManager <ProducerState>(ProducerState.Disconnected, ProducerState.Closed, ProducerState.Faulted);
            var producer      = new Producer(correlationId, options.Topic, options.InitialSequenceId, _processManager, new NotReadyChannel(), executor, stateManager);
            var process       = new ProducerProcess(correlationId, stateManager, factory, producer);

            _processManager.Add(process);
            process.Start();
            return(producer);
        }