Exemplo n.º 1
0
        // For each message handler identified as being associated with an exchange/queue, create the
        // exchange and queue then bind it to the in-process handler.
        private async Task SubscribeToQueues(IBusModule busModule, IEnumerable <MessageQueueSubscriber> subscribers)
        {
            // Tacks the RPC queue that have been already bound.  For a given named RPC queue, we only
            // want to bind once since the command action namespace is used to determine the actual
            // handler to be called (multiple commands are sent on a single queue).
            HashSet <string> boundToRpcQueues = new HashSet <string>();

            foreach (var subscriber in subscribers)
            {
                busModule.ApplyQueueSettings(subscriber.QueueMeta);

                if (subscriber.QueueMeta.Exchange.IsRpcExchange &&
                    boundToRpcQueues.Contains(subscriber.QueueMeta.QueueName))
                {
                    continue;
                }

                var    bus   = busModule.GetBus(subscriber.QueueMeta.Exchange.BusName);
                IQueue queue = await QueueDeclareAsync(bus, subscriber.QueueMeta);

                ConsumeMessageQueue(bus, queue, subscriber);

                if (subscriber.QueueMeta.Exchange.IsRpcExchange)
                {
                    boundToRpcQueues.Add(queue.Name);
                }
            }
        }
Exemplo n.º 2
0
 public RabbitMqPublisher(ILoggerFactory loggerFactory,
                          IBusModule busModule,
                          IPublisherModule publisherModule,
                          ISerializationManager serializationManager,
                          IEntityScriptingService scripting)
 {
     Logger          = loggerFactory.CreateLogger <RabbitMqPublisher>();
     BusModule       = busModule ?? throw new ArgumentNullException(nameof(busModule));
     PublisherModule = publisherModule ?? throw new ArgumentNullException(nameof(publisherModule));
     Serialization   = serializationManager ?? throw new ArgumentNullException(nameof(serializationManager));
     Scripting       = scripting ?? throw new ArgumentNullException(nameof(scripting));
 }