Sql server SQL Server 2014-Service Broker:最大服务

Sql server SQL Server 2014-Service Broker:最大服务,sql-server,delphi,firedac,Sql Server,Delphi,Firedac,我正在使用SQL Server 2014,使用Delphi XE7中的FireDAC连接到数据库 如果某些数据在特殊表中发生更改,我们需要一个事件来自动打开表单。因此,我们找到了tfdeventaleter,我们使用它为每个用户创建了队列和服务 UserEvent.Names.Add('QUEUE=qUserEvent'); UserEvent.Names.Add('SERVICE=s' + Username); UserEvent.Names.Add('CHANGE1=usr;SELECT I

我正在使用SQL Server 2014,使用Delphi XE7中的FireDAC连接到数据库

如果某些数据在特殊表中发生更改,我们需要一个事件来自动打开表单。因此,我们找到了tfdeventaleter,我们使用它为每个用户创建了队列和服务

UserEvent.Names.Add('QUEUE=qUserEvent');
UserEvent.Names.Add('SERVICE=s' + Username);
UserEvent.Names.Add('CHANGE1=usr;SELECT ID FROM dbo.MsgBox WHERE Status = 'A');
因此,我们有一个队列和许多正在侦听该队列的服务。一般来说,这种设置工作正常

但是,如果很多用户(在我的例子中是550个)连接到数据库并向队列中添加新服务,那么我们就会遇到这样的问题:由于每个服务不时阻塞一个工作线程,线程池饥饿导致我们的性能变差

那么,有人知道为什么在SQL Server 2014中对Service Broker使用服务存在限制吗


有没有其他方法可以在不创建500个服务的情况下,对500个用户使用tfdeventaleter?在我看来,我们并没有像以前那样使用<强> tfDevestAdvult<强>。

如果您通过中间层中的DATAMAP服务器使用数据库的三层访问,那么您不需要500个FD事件提醒器。您可以在datasnap服务器中有一个事件警报,并让它在500个客户端中调用回调方法?每当我实现ServiceBroker时,它都是1:1。@MartynA:谢谢你的想法。如果真的没有其他方法使用,我们将实现此解决方案EventAlerter@BenThul:您是对的,通常我们为每个服务使用一个单独的队列。所以也是1:1。但对于我的测试来说,这不会改变任何事情。我们的问题是服务的数量,而不是队列的数量。您是否可以使用一个服务和一个队列,但在会话句柄和用户之间有一个映射?也就是说,当您的应用程序接收到消息时,它将知道它与哪个用户关联,因为与消息关联的是哪个会话句柄。或者,您可以在消息本身中嵌入标识用户权限的信息吗?