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);
}
}
}