public void SendMessage(IPipeline pipeline, EndpointMessage message)
        {
            ConcurrentDictionary <IEndpoint, BlockingCollection <EndpointMessage> > endpointStorage;

            if (pipelineStorage.TryGetValue(pipeline, out endpointStorage))
            {
                foreach (var store in endpointStorage)
                {
                    var endpoint = store.Key;

                    bool accept = false;
                    foreach (var messageHeader in message.RoutingHeaders)
                    {
                        if (endpoint.RoutingHeaders.ContainsKey(messageHeader.Key))
                        {
                            accept = endpoint.RoutingHeaders[messageHeader.Key] == messageHeader.Value;
                        }
                        if (accept)
                        {
                            break;
                        }
                    }
                    if (!accept)
                    {
                        continue;
                    }

                    store.Value.TryAdd(message);
                }
            }
        }
 public void Push(EndpointMessage message)
 {
     if (message.PublishDelayInMiliseconds == long.MinValue)
         pipeline.Push(message);
     else
         scheduler.Push(message);
 }
 public void Acknowledge(EndpointMessage message)
 {
     try
     {
         safeChannel.Channel.BasicAck(dequeuedMessages[message].DeliveryTag, false);
         dequeuedMessages.Remove(message);
     }
     catch (EndOfStreamException ex) { Close(); throw new EndpointClosedException(String.Format("The Endpoint '{0}' was closed", Name), ex); }
     catch (AlreadyClosedException ex) { Close(); throw new EndpointClosedException(String.Format("The Endpoint '{0}' was closed", Name), ex); }
     catch (OperationInterruptedException ex) { Close(); throw new EndpointClosedException(String.Format("The Endpoint '{0}' was closed", Name), ex); }
     catch (Exception) { Close(); throw; }
 }
        public bool BlockDequeue(IEndpoint endpoint, uint timeoutInMiliseconds, out EndpointMessage msg)
        {
            msg = null;
            BlockingCollection <EndpointMessage> endpointStorage;

            if (TryGetEndpointStorage(endpoint, out endpointStorage))
            {
                if (endpointStorage.TryTake(out msg, (int)timeoutInMiliseconds))
                {
                    TotalMessagesConsumed++;
                    return(true);
                }
                return(false);
            }
            return(false);
        }
Exemple #5
0
 public void Push(EndpointMessage message)
 {
     transport.SendMessage(this, message);
 }
Exemple #6
0
 public void Push(EndpointMessage message)
 {
     transport.SendMessage(this, message);
 }
Exemple #7
0
 public bool BlockDequeue(uint timeoutInMiliseconds, out EndpointMessage msg)
 {
     return transport.BlockDequeue(this, timeoutInMiliseconds, out msg);
 }
Exemple #8
0
 public void Acknowledge(EndpointMessage message) { }
        public EndpointMessage DequeueNoWait()
        {
            if (consumer == null) throw new EndpointClosedException(String.Format("The Endpoint '{0}' is closed", Name));

            try
            {
                var result = consumer.Queue.DequeueNoWait(null);
                if (result == null)
                    return null;
                var msg = new EndpointMessage(result.Body, result.RoutingKey, result.BasicProperties.Headers);
                dequeuedMessages.Add(msg, result);
                return msg;
            }
            catch (EndOfStreamException ex) { Close(); throw new EndpointClosedException(String.Format("The Endpoint '{0}' was closed", Name), ex); }
            catch (AlreadyClosedException ex) { Close(); throw new EndpointClosedException(String.Format("The Endpoint '{0}' was closed", Name), ex); }
            catch (OperationInterruptedException ex) { Close(); throw new EndpointClosedException(String.Format("The Endpoint '{0}' was closed", Name), ex); }
            catch (Exception ex) { Close(); throw ex; }
        }
        public bool BlockDequeue(uint timeoutInMiliseconds, out EndpointMessage msg)
        {
            msg = null;
            BasicDeliverEventArgs result;
            if (consumer == null) throw new EndpointClosedException(String.Format("The Endpoint '{0}' is closed", Name));

            try
            {
                if (consumer.Queue.Dequeue((int)timeoutInMiliseconds, out result) == false)
                    return false;
                msg = new EndpointMessage(result.Body, result.RoutingKey, result.BasicProperties.Headers);
                dequeuedMessages.Add(msg, result);
                return true;
            }
            catch (EndOfStreamException ex) { Close(); throw new EndpointClosedException(String.Format("The Endpoint '{0}' was closed", Name), ex); }
            catch (AlreadyClosedException ex) { Close(); throw new EndpointClosedException(String.Format("The Endpoint '{0}' was closed", Name), ex); }
            catch (OperationInterruptedException ex) { Close(); throw new EndpointClosedException(String.Format("The Endpoint '{0}' was closed", Name), ex); }
            catch (Exception) { Close(); throw; }
        }
        public override void Push(EndpointMessage message)
        {
            if (ReferenceEquals(null, safeChannel)) throw new PipelineClosedException($"The Pipeline '{name}' was closed.");

            try
            {
                message.RoutingHeaders.Add("x-delay", message.PublishDelayInMiliseconds);
                IBasicProperties properties = new BasicProperties();
                properties.Headers = message.RoutingHeaders;
                properties.Persistent = true;
                properties.Priority = 9;
                safeChannel.Channel.BasicPublish(name, message.RoutingKey, false, properties, message.Body);
            }
            catch (EndOfStreamException ex) { throw new PipelineClosedException($"The Pipeline '{name}' was closed.", ex); }
            catch (AlreadyClosedException ex) { throw new PipelineClosedException($"The Pipeline '{name}' was closed.", ex); }
            catch (OperationInterruptedException ex) { throw new PipelineClosedException($"The Pipeline '{name}' was closed.", ex); }
        }
Exemple #12
0
 public bool BlockDequeue(uint timeoutInMiliseconds, out EndpointMessage msg)
 {
     return(transport.BlockDequeue(this, timeoutInMiliseconds, out msg));
 }
Exemple #13
0
 public void Acknowledge(EndpointMessage message)
 {
 }