RPCBase.Server.AmqpAdaptor.BeginReceive C# (CSharp) 메소드

BeginReceive() 공개 메소드

public BeginReceive ( ) : void
리턴 void
        public void BeginReceive()
        {
            if (isPumped)
            {
                return;
            }
            isPumped = true;
            HashSet<string> queues = new HashSet<string>();
            lock (mqChannel)
            {
                foreach (var kv in implements)
                {
                    var rule = MetaData.GetServiceRoutingRule(kv.Key);
                    var serviceQueueName = rule.AmqpRule.GetImplQueueName();
                    //var serviceQueueName = rule.GetImplQueueName();
                    if (string.IsNullOrEmpty(serviceQueueName))
                    {
                        serviceQueueName = privateQueueName;
                    }
                    else
                    {
                        mqChannel.QueueDeclare(serviceQueueName, false, false, true, null);
                        queues.Add(serviceQueueName);
                    }

                    mqChannel.QueueBind(serviceQueueName, rule.AmqpRule.GetImplExchangeName(), rule.AmqpRule.GetImplBindingKey(), null);
                    //mqChannel.QueueBind(serviceQueueName, rule.GetImplExchangeName(), rule.GetImplBindingKey(""), null);
                }
                foreach (var kv in delegates)
                {
                    var rule = MetaData.GetServiceRoutingRule(kv.Key);
                    var returnBindingKey = rule.AmqpRule.GetReturnBindingKey(uuid);
                    //string returnBindingKey = rule.GetReturnBindingKey(uuid.ToString());
                    if (!string.IsNullOrEmpty(returnBindingKey))
                    {
                        mqChannel.QueueBind(privateQueueName, rule.AmqpRule.GetReturnExchangeName(), returnBindingKey, null);
                        //mqChannel.QueueBind(privateQueueName, rule.GetReturnExchangeName(), returnBindingKey, null);
                    }

                    // declare inter-server queue in advance
                    var serviceQueueName = rule.AmqpRule.GetImplQueueName();
                    //var serviceQueueName = rule.GetImplQueueName();
                    if (!string.IsNullOrEmpty(serviceQueueName))
                    {
                        mqChannel.QueueDeclare(serviceQueueName, false, false, true, null);
                        mqChannel.QueueBind(serviceQueueName, rule.AmqpRule.GetImplExchangeName(), rule.AmqpRule.GetImplBindingKey(), null);
                        //mqChannel.QueueBind(serviceQueueName, rule.GetImplExchangeName(), rule.GetImplBindingKey(""), null);
                    }
                }
                mqChannel.BasicConsume(privateQueueName, true, pumpHandle);
                foreach (string queue in queues)
                {
                    mqChannel.BasicConsume(queue, true, pumpHandle);
                }
            }
        }

Usage Example

예제 #1
0
        static void Main(string[] args)
        {
            AutoInit.Init();
            AmqpAdaptor AmqpAdaptor = new AmqpAdaptor(ConfigManager.MQIP(), ConfigManager.AMQPPort(),
                ConfigManager.MQUser(), ConfigManager.MQPass());
            ServiceImplementStub.Bind<ICli2LoginImpl>(AmqpAdaptor, new LoginClientServiceImpl());
            ServiceImplementStub.Bind<ILoginNotifyImpl>(AmqpAdaptor, new LoginNotifyImpl());
            AmqpAdaptor.BeginReceive();

            RedisAdaptor = new RedisAdaptor(ConfigManager.CacheConn());
            CacheDataService = new RedisDataServiceDelegate(RedisAdaptor);

            Console.ReadKey();
        }
All Usage Examples Of RPCBase.Server.AmqpAdaptor::BeginReceive