我有两个队列,还有更多...我希望使用外部激活器在外部激活这些队列。
当我编辑EAService.config以激活队列#1时,它可以正常工作 当我编辑EAService.config以激活队列#2时,它工作得很好。
如果我把两者都放在配置中,那么首先列出的那个就会被激活。
这两个队列实际上都是由同一个exe进行处理的...这个例子不起作用就是这个......
<NotificationServiceList>
<NotificationService name="my_notif_svc1" id="100" enabled="true">
<Description>my notification service 1</Description>
<ConnectionString>
<Unencrypted>server=my_pc01;database=my_db;Application Name=External Activator;Integrated Security=true;</Unencrypted>
</ConnectionString>
</NotificationService>
<NotificationService name="my_notif_svc2" id="100" enabled="true">
<Description>my notification service 2</Description>
<ConnectionString>
<Unencrypted>server=my_pc01;database=my_db;Application Name=External Activator;Integrated Security=true;</Unencrypted>
</ConnectionString>
</NotificationService>
</NotificationServiceList>
<ApplicationServiceList>
<ApplicationService name="myMessageApp1" enabled="true">
<OnNotification>
<ServerName>my_pc01</ServerName>
<DatabaseName>my_db</DatabaseName>
<SchemaName>dbo</SchemaName>
<QueueName>my_user_queue1</QueueName>
</OnNotification>
<LaunchInfo>
<ImagePath>c:\test\myMessageReceiver.exe</ImagePath>
<CmdLineArgs>whatever cmd-line arguments you need to pass to your receiver application</CmdLineArgs>
<WorkDir>c:\test</WorkDir>
</LaunchInfo>
<Concurrency min="1" max="4" />
</ApplicationService>
<ApplicationService name="myMessageApp2" enabled="true">
<OnNotification>
<ServerName>my_pc01</ServerName>
<DatabaseName>my_db</DatabaseName>
<SchemaName>dbo</SchemaName>
<QueueName>my_user_queue2</QueueName>
</OnNotification>
<LaunchInfo>
<ImagePath>c:\test\myMessageReceiver.exe</ImagePath>
<CmdLineArgs>whatever cmd-line arguments you need to pass to your receiver application</CmdLineArgs>
<WorkDir>c:\test</WorkDir>
</LaunchInfo>
<Concurrency min="1" max="4" />
</ApplicationService>
</ApplicationServiceList>
另外我不明白id =“100”正在做什么...我尝试过相同的#和不同的#...即100&amp; 101但它并没有什么区别。激活器服务仅适用于“ApplicationServiceList”
中列出的第一个帮助!
答案 0 :(得分:1)
我想出了我的问题......
来自文档
系统可以使用外部激活 对于多个Service Broker 应用程序队列。有一个 多对一的关系 应用程序队列和激活 通知服务。有一个 一对一的关系 激活通知服务和 外部激活服务。
我是上面列出的两个通知服务(my_notif_svc1&amp; my_notif_svc2)。我切换了我的事件通知(创建事件通知......)以使用相同的“TO SERVICE”,现在它可以工作。
因此,您必须为外部激活器使用一个“服务”,但您可以为指向该服务的多个队列创建多个事件通知。
我仍然认为我设置它的方式应该可行,但这绝对有效......
答案 1 :(得分:0)
我也遇到了同样的问题,如果他们为什么以及他们是否会尊重SSBEA中列出的多个通知服务而不仅仅是列表中的第一个通知服务,那么很高兴得到微软的正式回复。最后,我们使用相同的解决方案,这是一个有用的代码片段,用于动态获取Guid并将队列激活事件设置为SINGLE服务(ServiceBrokerNotification.NotificationService)。
DECLARE @sbn nvarchar(100) = 'servicebrokernotification'
DECLARE @sbnid nvarchar(60)
SELECT @sbnid = ''''+CAST(service_broker_guid AS nvarchar(60))+'''' FROM sys.databases WHERE name = @sbn
SELECT @sbnid
DECLARE @Str nvarchar(max)
DECLARE @createEventSql nvarchar(max)
Set @Str = 'CREATE EVENT NOTIFICATION NotificationEvent ON QUEUE [TargetQueue]
FOR QUEUE_ACTIVATION TO SERVICE ''NotificationService'' ,' + @sbnid;
Select @Str
EXECUTE (@Str)