public RabbitMqPublisher <TMessageModel> SetPublishStrategy(IRabbitMqPublishStrategy publishStrategy)
        {
            ThrowIfStarted();

            _publishStrategy = publishStrategy;
            return(this);
        }
        public RawMessagePublisher(
            string name,
            ILog log,
            IPublisherBuffer buffer,
            IRabbitMqPublishStrategy publishStrategy,
            RabbitMqSubscriptionSettings settings,
            bool publishSynchronously,
            bool submitTelemetry)
        {
            Name                  = name;
            _log                  = log;
            _buffer               = buffer;
            _settings             = settings;
            _publishSynchronously = publishSynchronously;
            _publishStrategy      = publishStrategy;
            _submitTelemetry      = submitTelemetry;
            _exchangeQueueName    = _settings.GetQueueOrExchangeName();

            _publishLock             = new AutoResetEvent(false);
            _cancellationTokenSource = new CancellationTokenSource();

            _thread = new Thread(ConnectionThread)
            {
                Name = "RabbitMqPublisherLoop"
            };

            _thread.Start();
        }
        public RawMessagePublisher(
            [NotNull] string name,
            [NotNull] ILogFactory logFactory,
            [NotNull] IPublisherBuffer buffer,
            [NotNull] IRabbitMqPublishStrategy publishStrategy,
            [NotNull] RabbitMqSubscriptionSettings settings,
            bool publishSynchronously,
            bool submitTelemetry)
        {
            if (logFactory == null)
            {
                throw new ArgumentNullException(nameof(logFactory));
            }

            Name                  = name ?? throw new ArgumentNullException(nameof(name));
            _buffer               = buffer ?? throw new ArgumentNullException(nameof(buffer));
            _settings             = settings ?? throw new ArgumentNullException(nameof(settings));
            _publishSynchronously = publishSynchronously;
            _publishStrategy      = publishStrategy ?? throw new ArgumentNullException(nameof(publishStrategy));
            _submitTelemetry      = submitTelemetry;
            _exchangeQueueName    = _settings.GetQueueOrExchangeName();

            _log = logFactory.CreateLog(this, Name);

            _publishLock             = new AutoResetEvent(false);
            _cancellationTokenSource = new CancellationTokenSource();

            _thread = new Thread(ConnectionThread)
            {
                Name = "RabbitMqPublisherLoop"
            };

            _thread.Start();
        }
示例#4
0
        private void AddRabbitPublisher <T>(ContainerBuilder builder,
                                            RabbitPublisherSettings settings,
                                            IRabbitMqPublishStrategy rabbitMqPublishStrategy = null,
                                            IRabbitMqSerializer <T> serializer = null)
        {
            rabbitMqPublishStrategy = rabbitMqPublishStrategy ?? new DefaultFanoutPublishStrategy(settings);
            serializer = serializer ?? new JsonMessageSerializer <T>();

            builder.RegisterInstance(
                new RabbitMqPublisher <T>(settings)
                .SetSerializer(serializer)
                .SetLogger(_log)
                .SetPublishStrategy(rabbitMqPublishStrategy)
                .DisableInMemoryQueuePersistence())
            .As <IMessageProducer <T> >()
            .As <IStartStop>();
        }