Sql server SQL Server Service Broker-按用户请求分组

Sql server SQL Server Service Broker-按用户请求分组,sql-server,service-broker,Sql Server,Service Broker,我正在原型化使用SQLServerServiceBroker来处理排队的项目。到目前为止,一切进展顺利 我想做的一件事是能够在不同的进程或线程上并行处理队列中的多个项目,但限制处理,以便特定用户一次只能处理一个项目,以防止一个过度热心的用户耗尽所有其他项目 并行线程上的处理很容易。每个用户的限制并不是那么简单。最初我认为可以将会话组id设置为用户的id,因此ServiceBroker会自动序列化该组的处理。在这一点上,我还没有找到一种方法来成功地实现这个选项 这是对话小组可以做到的吗?有没有一种

我正在原型化使用SQLServerServiceBroker来处理排队的项目。到目前为止,一切进展顺利

我想做的一件事是能够在不同的进程或线程上并行处理队列中的多个项目,但限制处理,以便特定用户一次只能处理一个项目,以防止一个过度热心的用户耗尽所有其他项目

并行线程上的处理很容易。每个用户的限制并不是那么简单。最初我认为可以将会话组id设置为用户的id,因此ServiceBroker会自动序列化该组的处理。在这一点上,我还没有找到一种方法来成功地实现这个选项

这是对话小组可以做到的吗?有没有一种更简单的方法,使用或不使用服务代理?我必须在服务代理之外处理它吗


我已经做了很多研究,但这些研究都开始同步进行,所以如果我错过了一些明显的东西,我深表歉意。

正如您所暗示的,您可以在对话和用户之间建立一种一对一的关系,然后,通过神奇的对话组锁定,SSSB每次只能为每个用户处理一件事情


系统为对话本身生成id,因此您无法设置它们,但您可以使用一个将用户映射到对话的表。

正如您所暗示的,您可以在对话和用户之间建立一对一的关系,然后通过神奇的对话组锁定,SSSB每次只为每个用户处理一件事情


系统会为对话本身生成id,因此您无法设置它们,但您可以使用一个表将用户映射到对话。

您能解释一下排队的原因吗?这对于回答问题的人来说很重要,因为ServiceBroker实现可能会有很大的差异。我在过去构建了它们,以便触发排队PK ID到ServiceBroker队列表中,根据业务逻辑上下移动优先级值。然后在另一端,ServiceBroker醒来,按优先级排序从队列表中提取一批项目,并执行所需的工作。这不太难,但很有情境性(因此要求提供更多细节)。很有趣。是的,我正在排队。没有考虑过使用优先级。我会调查的。你能解释一下你在排队什么吗?这对于回答问题的人来说很重要,因为ServiceBroker实现可能会有很大的差异。我在过去构建了它们,以便触发排队PK ID到ServiceBroker队列表中,根据业务逻辑上下移动优先级值。然后在另一端,ServiceBroker醒来,按优先级排序从队列表中提取一批项目,并执行所需的工作。这不太难,但很有情境性(因此要求提供更多细节)。很有趣。是的,我正在排队。没有考虑过使用优先级。我会调查的。我花了一整天的时间试图锁定谈话小组。由于团队无法转移到目标方,所以我尝试移动团队。这不起作用,所以我尝试了一个建议,将目标转换为发起方,但没有成功。在这一点上,设置优先级看起来是赢家。锁定是隐式的,您不必做任何事情来让它工作。每当队列处理器成功从队列中读取时,该会话组就会被锁定,以便其他处理器无法读取其消息。
将目标转换为发起方,但没有成功。
:通常情况下,这就是解决方案。你能解释一下为什么没有成功吗?@RemusRusanu,我猜我只是做错了,就逆流而上而言。我还没有找到一个好的、简单的例子来说明逆流到底涉及到什么。就目前而言,使用优先级是可行的,但我认为我们很有可能在不久的将来再次访问它。我花了一整天的时间试图锁定对话组。由于团队无法转移到目标方,所以我尝试移动团队。这不起作用,所以我尝试了一个建议,将目标转换为发起方,但没有成功。在这一点上,设置优先级看起来是赢家。锁定是隐式的,您不必做任何事情来让它工作。每当队列处理器成功从队列中读取时,该会话组就会被锁定,以便其他处理器无法读取其消息。
将目标转换为发起方,但没有成功。
:通常情况下,这就是解决方案。你能解释一下为什么没有成功吗?@RemusRusanu,我猜我只是做错了,就逆流而上而言。我还没有找到一个好的、简单的例子来说明逆流到底涉及到什么。目前,使用优先级是可行的,但我认为我们很有可能在不久的将来重新审视它。