我遇到了和你一样的问题,我做的是编辑rabbitMQDotNetClient的源代码。
文件:RabbitMQInputChannel.cs
public override void Open(TimeSpan timeout)
{
if (State != CommunicationState.Created && State != CommunicationState.Closed)
throw new InvalidOperationException(string.Format("Cannot open the channel from the {0} state.", base.State));
OnOpening();
#if VERBOSE
DebugHelper.Start();
#endif
//Create a queue for messages destined to this service, bind it to the service URI routing key
#if USE_DEFINED_QUEUE_NAMES
//here we create a queue that uses the name given in the service address in the wcf binding.
//if the address in the web.config is: soap.amq:///QueueName
//the name of the queue will be: QueueName
//LVV
string queue = m_model.QueueDeclare(base.LocalAddress.Uri.PathAndQuery, true, false, false, null);
#else
string queue = m_model.QueueDeclare();
#endif
m_model.QueueBind(queue, Exchange, base.LocalAddress.Uri.PathAndQuery, null);
//Listen to the queue
m_messageQueue = new QueueingBasicConsumer(m_model);
m_model.BasicConsume(queue, false, m_messageQueue);
#if VERBOSE
DebugHelper.Stop(" ## In.Channel.Open {{\n\tAddress={1}, \n\tTime={0}ms}}.", LocalAddress.Uri.PathAndQuery);
#endif
OnOpened();
}
编译旗USE_DEFINED_QUEUE_NAMES。这将使用您在app.config或web.config文件中给出的名称创建一个队列名称。如果您希望队列的行为与我创建的队列行为不同,您可以随时更改QueueDeclare(...)上的队列选项。 干杯!
来源
2013-10-31 15:19:11
LVV
谢谢。这是我正在寻找的答案。如果它不能给你这个控制,它基本上使得甚至没有rabbitMQ的WCF绑定是没有意义的。 –