我有一個RabbitMQ SimpleRpcServer,我想知道如何正確處置它,當我完成它。該模式有一個主循環,直到它接收到消息,處理消息,然後再次阻止爲止。這意味着爲了打破循環,我必須發送一個特殊編碼的消息,處理程序可以使用它來擺脫循環。如何正確處理SimpleRpcServer對象?
我讀過RabbitMQ頻道應該從創建它們的同一個線程訪問。如果這是真的(我找不到源代碼),這是否意味着要處理我的SimpleRpcServer,我將不得不創建一個專門用於將關閉消息發送到主循環的新通道?
這裏的僞代碼:
主循環(actual code here):
//I run this on a ThreadPool thread
foreach (var evt in m_subscription) //blocks until a message appears
{
ProcessRequest(evt);
}
處理程序:
private void ProcessRequest(evt)
{
if(evt.BasicProperties.ContentType == "close") //close flag
{
base.Close();
}
else
{
//process message
}
}
處置代碼(具體創建一個新的信道用於消除主循環):
//I call this from the main thread
public void Dipose()
{
var channel = new Channel();
var props = new Properties("close"); //close flag
channel.BasicPublish(queueName, props);
channel.Dispose();
}
請注意,我遺漏了一些初始化和處理代碼。我知道這段代碼不會編譯。