Exemplo n.º 1
0
        public RabbitAdvancedBus(
            ConnectionFactoryWrapper connectionFactory,
            ConsumerFactory consumerFactory,
            IPublisher publisher,
            ConnectionConfiguration connectionConfiguration)
        {
            Preconditions.CheckNotNull(connectionFactory, "connectionFactory");
            Preconditions.CheckNotNull(consumerFactory, "consumerFactory");
            Preconditions.CheckNotNull(publisher, "publisher");
            Preconditions.CheckNotNull(connectionConfiguration, "connectionConfiguration");

            this._consumerFactory         = consumerFactory;
            this._publisher               = publisher;
            this._connectionConfiguration = connectionConfiguration;

            this._connection = new PersistentConnection(connectionFactory);

            EventBus.Instance.Subscribe <ConnectionCreatedEvent>(e => this.OnConnected());
            EventBus.Instance.Subscribe <ConnectionDisconnectedEvent>(e => this.OnDisconnected());
            EventBus.Instance.Subscribe <ReturnedMessageEvent>(this.OnMessageReturned);
            EventBus.Instance.Subscribe <ConfirmedMessageEvent>(this.OnMessageConfirmed);
            EventBus.Instance.Subscribe <ConfirmedMessageTimeOutEvent>(this.OnMessageConfirmedTimeout);

            PersistentChannelFactory persistentChannelFactory = new PersistentChannelFactory(connectionConfiguration);

            this._clientCommandDispatcher = new ClientCommandDispatcherSingleton(this._connection, persistentChannelFactory);
        }
        public ClientCommandDispatcherSingleton(
            PersistentConnection connection,
            PersistentChannelFactory persistentChannelFactory)
        {
            Preconditions.CheckNotNull(connection, "connection");
            Preconditions.CheckNotNull(persistentChannelFactory, "persistentChannelFactory");

            this._persistentChannel = persistentChannelFactory.CreatePersistentChannel(connection);

            this.StartDispatcherThread();
        }
Exemplo n.º 3
0
        public PersistentChannel(
            PersistentConnection connection,
            ConnectionConfiguration configuration)
        {
            Preconditions.CheckNotNull(connection, "connection");
            Preconditions.CheckNotNull(configuration, "configuration");

            this._connection    = connection;
            this._configuration = configuration;

            this.WireUpEvents();
        }
Exemplo n.º 4
0
        /// <summary>
        /// Create the correct implementation of IConsumer based on queue properties
        /// </summary>
        /// <param name="queue"></param>
        /// <param name="onMessage"></param>
        /// <param name="connection"></param>
        /// <param name="configuration"></param>
        /// <returns></returns>
        private IConsumer CreateConsumerInstance(
            IQueue queue,
            Func <byte[], MessageProperties, MessageReceivedInfo, Task> onMessage,
            PersistentConnection connection,
            ConsumerConfiguration configuration)
        {
            if (queue.IsExclusive)
            {
                return(new TransientConsumer(queue, onMessage, connection, configuration, this._internalConsumerFactory));
            }

            return(new PersistentConsumer(queue, onMessage, connection, configuration, this._internalConsumerFactory));
        }
Exemplo n.º 5
0
        /// <summary>
        /// 创建一个消费者
        /// </summary>
        /// <param name="queue"></param>
        /// <param name="onMessage"></param>
        /// <param name="connection"></param>
        /// <param name="configuration"></param>
        /// <returns></returns>
        public IConsumer CreateConsumer(
            IQueue queue,
            Func <byte[], MessageProperties, MessageReceivedInfo, Task> onMessage,
            PersistentConnection connection,
            ConsumerConfiguration configuration
            )
        {
            Preconditions.CheckNotNull(queue, "queue");
            Preconditions.CheckNotNull(onMessage, "onMessage");
            Preconditions.CheckNotNull(connection, "connection");

            var consumer = this.CreateConsumerInstance(queue, onMessage, connection, configuration);

            this._consumers.TryAdd(consumer, null);
            return(consumer);
        }
Exemplo n.º 6
0
        public PersistentConsumer(
            IQueue queue,
            Func <byte[], MessageProperties, MessageReceivedInfo, Task> onMessage,
            PersistentConnection connection,
            ConsumerConfiguration configuration,
            InternalConsumerFactory internalConsumerFactory)
        {
            Preconditions.CheckNotNull(queue, "queue");
            Preconditions.CheckNotNull(onMessage, "onMessage");
            Preconditions.CheckNotNull(connection, "connection");
            Preconditions.CheckNotNull(configuration, "configuration");
            Preconditions.CheckNotNull(internalConsumerFactory, "internalConsumerFactory");

            this._queue                   = queue;
            this._onMessage               = onMessage;
            this._connection              = connection;
            this._configuration           = configuration;
            this._internalConsumerFactory = internalConsumerFactory;
        }
Exemplo n.º 7
0
        /// <summary>
        /// 收消息
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="queue"></param>
        /// <param name="onMessage"></param>
        /// <param name="configuration"></param>
        public void StartConsuming(PersistentConnection connection, IQueue queue, Func <byte[], MessageProperties, MessageReceivedInfo, Task> onMessage, ConsumerConfiguration configuration)
        {
            Preconditions.CheckNotNull(connection, "connection");
            Preconditions.CheckNotNull(queue, "queue");
            Preconditions.CheckNotNull(onMessage, "onMessage");
            Preconditions.CheckNotNull(configuration, "configuration");

            this.queue      = queue;
            this._onMessage = onMessage;
            var consumerTag = Conventions.ConsumerTagConvention();//目前就是一个Guid的值
            IDictionary <string, object> arguments = new Dictionary <string, object>
            {
                { "x-priority", configuration.Priority },
                { "x-cancel-on-ha-failover", configuration.CancelOnHaFailover || this._connectionConfiguration.CancelOnHaFailover }
            };

            try
            {
                this.Model = connection.CreateModel();

                this.Model.BasicQos(0, configuration.PrefetchCount, false);

                this.Model.BasicConsume(
                    queue.Name,         // queue
                    false,              // noAck
                    consumerTag,        // consumerTag
                    arguments,          // arguments
                    this);              // consumer

                ConsoleLogger.InfoWrite("Declared Consumer. queue='{0}', consumer tag='{1}' prefetchcount={2} priority={3} x-cancel-on-ha-failover={4}", queue.Name, consumerTag, _connectionConfiguration.PrefetchCount, configuration.Priority, configuration.CancelOnHaFailover);
            }
            catch (Exception exception)
            {
                ConsoleLogger.ErrorWrite("Consume failed. queue='{0}', consumer tag='{1}', message='{2}'", queue.Name, consumerTag, exception.Message);
            }
        }