2017-08-09 96 views
0

我想確保我的消息在各分區服務總線均勻分佈路由算法。我們目前有一個sessionId被設置爲id.ToString()的消息,其中Id是一個整數。但是,我想知道,如果這足以足以分發消息。據我所知,沒有辦法確定如何分配會議,所以沒有辦法來測試這個。什麼是分區的消息在蔚藍的服務總線

我可以在此示例中看到,會話ID被前綴爲「會話」 https://github.com/Azure/azure-service-bus/tree/master/samples/DotNet/Microsoft.Azure.ServiceBus/BasicSessionSendReceiveUsingQueueClient

這是不是巧合我的問題?或者,這是我應該做的事情如果我的sessionId將從一個整數派生?這裏的問題是,如果服務總線使用範圍分區方案,諸如服務織物,然後是彼此接近將被放置在同一分區的整數值。

編輯:具體而言,這個問題是如何確保郵件在服務總線內部的分區均勻分佈(不負載平衡的會話competiting消費者) - 我已經更新的問題,以更好地反映這一點。

謝謝,

+0

樣本中使用的前綴可以是除「會話」以外的任何值。會話ID用於標識會話。在分配負載方面,最大併發會話數量乘以處理節點數量將會佔用會話數量。其餘的是我猜想的競爭消費者。 –

+0

謝謝@SeanFeldman - 我的問題是專門針對跨服務總線上分區的消息分佈..不會分配給消費者。我認爲這可以更一般地應用於PartitionKey的使用。 –

回答

0

作爲What are partitioned queues and topics?解釋如下:

概括地說,一個分區隊列或話題的工作原理如下:每個分區隊列或話題由多個片段的。每個片段存儲在不同的消息傳遞存儲中,並由不同的消息代理處理。 當一個消息被髮送給一個分區隊列或話題,服務總線消息分配給片段之一。該選擇由服務總線或發件人指定的分區密鑰隨機完成。

當一個消息被排隊到一個分區隊列或話題,服務總線檢查分區鍵的存在。如果它找到一個,它會根據該鍵選擇片段。 如果沒有,則選擇基於內部算法的片段。 使用分區鍵某些場景,如會話事務,需要將消息存儲在某個片段中。所有這些情況都需要使用分區密鑰。所有使用相同分區鍵的消息都被分配給相同的片段。根據情況,不同的消息屬性將用作分區鍵。

對於會議場景中,規定如下:

如果消息有的SessionID屬性集,然後服務總線使用SessionID屬性爲分區鍵。這樣一來,都屬於同一個會話的消息被分配到相同的片段,由同一消息代理處理。這允許服務總線保證消息順序以及會話狀態的一致性。

此外,如果不指定消息屬性,其將被用作分區鍵(SessionIdPartitionKeyMessageId),則服務總線分佈在以循環方式消息,將分區的所有片段隊列或主題。如果所選片段不可用,則Service Bus將該消息分配給不同的片段。

有關更多詳細信息,請參閱Partitioned Service Bus Queues and Topics

+0

感謝您的評論布魯斯。我已經多次傾倒那篇文章。它缺少的是如何「根據該鍵選擇片段」的解釋。例如,它可以使用模操作。或者它可以使用遠程分區......我確定有很多...但AzureServiceBus使用什麼? –

+0

我檢查過沒有記錄基於該鍵選擇片段的算法。如果您想知道azure服務總線如何實現它,您可以在[分區隊列和主題](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-總線分區)或添加您的反饋[這裏](https://feedback.azure.com/forums/216926-service-bus)。 –

+0

反饋更好提供在[文檔]標籤下的[GitHub問題跟蹤器](https://github.com/Azure/azure-service-bus/issues)。 –

相關問題