我正在使用azure服務總線主題作爲我的解決方案的消息代理。根據我對每個訂閱的理解,Azure消息總線保持虛擬隊列,所以在接收端的消息順序不應受到干擾。Azure服務總線主題訂閱者接收訂單
但在現實中卻是有點不同,我的方案
- 輸入大致每兩秒鐘後,(時間戳是正確的,我已經驗證它)
- 如果我斷開了一段時間的接收器,消息開始在Azure上針對訂閱進行排隊。
- 那麼如果我再次連接接收器,接收代碼很快就會收到消息,但是訂單不會被保留?
- 然而如果予保持連接的客戶,消息,以便接收(兩秒後1個消息)
接收代碼
SubscriptionClient Client = SubscriptionClient.CreateFromConnectionString(connectionString, topicname, subscription_name);
// Configure the callback options.
OnMessageOptions options = new OnMessageOptions();
options.AutoComplete = false;
options.AutoRenewTimeout = TimeSpan.FromMinutes(1);
// Callback to handle received messages.
Client.OnMessage((message) =>
{
try
{
// Process message from queue.
string payload = message.GetBody<string>();
var myData = JsonConvert.DeserializeObject<MyData>(payload);
if(myData != null)
{
//Timestamp is not in order, when I connect after few minutes
Debug.WriteLine("SBC ==> " + myData.Timestamp);
}
// Remove message from queue.
message.Complete();
}
catch (Exception)
{
// Indicates a problem, unlock message in queue.
message.Abandon();
}
}, options);
輸出
SBC ==> 5/23/2017 1:06:43 PM
SBC ==> 5/23/2017 1:06:45 PM
SBC ==> 5/23/2017 1:07:23 PM
SBC ==> 5/23/2017 1:07:19 PM
SBC ==> 5/23/2017 1:07:27 PM
SBC ==> 5/23/2017 1:07:07 PM
SBC ==> 5/23/2017 1:06:49 PM
SBC ==> 5/23/2017 1:07:47 PM
SBC ==> 5/23/2017 1:06:47 PM
SBC ==> 5/23/2017 1:08:03 PM
SBC ==> 5/23/2017 1:06:55 PM
SBC ==> 5/23/2017 1:06:51 PM
SBC ==> 5/23/2017 1:07:03 PM
SBC ==> 5/23/2017 1:07:51 PM
SBC ==> 5/23/2017 1:06:57 PM
SBC ==> 5/23/2017 1:07:05 PM
SBC ==> 5/23/2017 1:07:39 PM
SBC ==> 5/23/2017 1:07:43 PM
SBC ==> 5/23/2017 1:06:59 PM
SBC ==> 5/23/2017 1:07:09 PM
SBC ==> 5/23/2017 1:06:53 PM
SBC ==> 5/23/2017 1:07:33 PM
SBC ==> 5/23/2017 1:07:25 PM
SBC ==> 5/23/2017 1:07:57 PM
SBC ==> 5/23/2017 1:08:13 PM
任何人都可以解釋爲什麼是這樣嗎?這對我有點困惑?
感謝您的意見,請您參考MSDN上的一些文檔,其中「您遇到的問題是,當您斷開接收器時,超時的消息會在一段時間後開始重試。這會導致他們失去他們發送的訂單.'描述?這將是非常有幫助的。 –
將添加到答案。 – NPhillips
已經刪除了從問題中引用的部分,因爲無法爲其提供可靠來源。前一段時間我遇到過這個問題,那是我對這個問題的理解,但是我的話當然很重要,因爲沒有文檔可以支持它。 您可能會覺得這篇博文有用,但我懷疑它有點過時了: http://www.ben-morris.com/dont-assume-message-ordering-in-azure-service-bus/ – NPhillips