internal static void BasicPublish(string exchange, string routingKey, IBasicProperties basicProperties, object body) { EnsureAMQPDefaultExists(); Queue<InSingleProcessMemoryMessage> exchangeBag; lock (Exchanges) Exchanges.TryGetValue(exchange, out exchangeBag); if (exchangeBag == null) throw new ArgumentException("Could not find exchange {0}", exchange); var message = new InSingleProcessMemoryMessage ( NextPublishSeqNo++, routingKey, basicProperties, body ); lock (exchangeBag) { exchangeBag.Enqueue(message); } }
private static void DispatchMessageToBoundQueues(string exchange, InSingleProcessMemoryMessage message) { InSingleProcessMemoryBinding[] bindings; lock (Bindings) bindings = Bindings.ToArray(); foreach (var binding in bindings) { if (IsBoundExchange(exchange, binding) && (IsBoundRoutingKey(message, binding))) { Queue<InSingleProcessMemoryMessage> queueBag; lock (Queues) Queues.TryGetValue(binding.QueueName, out queueBag); if (queueBag != null) { lock (queueBag) queueBag.Enqueue(message); } } } BasicAcks(typeof(InSingleProcessMemoryBus), new BasicAckEventArgs(message.DeliveryTag)); }
private static bool IsBoundRoutingKey(InSingleProcessMemoryMessage message, InSingleProcessMemoryBinding binding) { return binding.RoutingKey == message.RoutingKey || binding.RoutingKey == "#"; }