什么是天蓝色服务总线中的分区消息路由算法

时间:2017-08-09 06:06:18

标签: azureservicebus

我想确保我的消息均匀分布在服务总线的分区中。我们当前发送的消息是将sessionId设置为id.ToString(),其中Id是一个整数。但是,我想知道,如果这足以足够好地分发消息。据我所知,无法确认会话的分发方式,因此无法对此进行测试。

我可以在此示例中看到会话ID的前缀为“session”https://github.com/Azure/azure-service-bus/tree/master/samples/DotNet/Microsoft.Azure.ServiceBus/BasicSessionSendReceiveUsingQueueClient

这是否与我的问题巧合?或者这是我应该做的事情如果我的sessionId将从整数派生?这里需要关注的是,如果服务总线使用远程分区方案(例如服务结构的分区方案),那么彼此接近的整数值将被放置在同一分区上。

编辑:具体来说,这个问题是关于确保消息在服务总线内的分区上均匀分布(而不是负载平衡会话的竞争消费者) - 我已经更新了问题以更好地反映这一点。

谢谢,

1 个答案:

答案 0 :(得分:1)

由于What are partitioned queues and topics?解释如下:

  

简而言之,分区队列或主题的工作原理如下:每个分区队列或主题由多个片段组成。每个片段存储在不同的消息传递存储中,并由不同的消息代理处理。 当消息发送到分区队列或主题时,Service Bus会将消息分配给其中一个片段。选择由Service Bus或发件人指定的分区键随机完成

  

当邮件排入分区队列或主题时,Service Bus 会检查是否存在分区密钥。如果找到一个,则根据该键选择片段。 如果没有,则根据内部算法选择片段使用分区键某些情况(例如会话事务)要求将邮件存储在特定片段中。所有这些方案都需要使用分区键。使用相同分区键的所有消息都分配给同一个片段。根据方案,不同的消息属性将用作分区键。

对于会话场景,它说明如下:

  

如果邮件设置了 SessionId 属性,则Service Bus 使用SessionId属性作为分区键。这样,属于同一会话的所有消息都将分配给同一个片段,并由同一个消息代理处理。这允许Service Bus保证消息排序以及会话状态的一致性。

此外,如果您未指定将用作分区键的消息属性(SessionIdPartitionKeyMessageId),则Service Bus会将消息分发到循环方式分区队列或主题的所有片段。如果所选片段不可用,Service Bus会将消息分配给不同的片段。

有关详细信息,请参阅Partitioned Service Bus Queues and Topics

相关问题