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(); }
public PersistentChannel( PersistentConnection connection, ConnectionConfiguration configuration) { Preconditions.CheckNotNull(connection, "connection"); Preconditions.CheckNotNull(configuration, "configuration"); this._connection = connection; this._configuration = configuration; this.WireUpEvents(); }
/// <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)); }
/// <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); }
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; }
/// <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); } }