下面是我想出的(使用Remus关于坚持单个合同/队列/服务的答案)。
创建基于特定类型的消息/合同/队列/服务名称:
create message [//MyPrefix/SomeTypeMessage]
create queue dbo.SomeTypeQueue
create service [//MyPrefix/SomeTypeService]
create contract [//MyPrefix/SomeTypeContract]
所以,“SOMETYPE”是可以在插入数据的某处找到的类型。当创建调用开始会话的触发器时,该类型用于连接不同的系统名称。根据在'myTypeDataField'中找到的数据,记录将被发送到不同的队列/特效。
declare @handle uniqueidentifier,
@service sysname,
@contract sysname,
@messageType sysname,
@myType varchar(50)
set @myType = (select myTypeDataField from inserted)
set @messageBody = (select * from inserted for xml auto)
set @service = N'//MyPrefix/' + @myType + 'Service'
set @contract = N'//MyPrefix/' + @myType + 'Contract'
set @messageType = N'//MyPrefix/' + @myType + 'Message'
begin tran
begin dialog conversation @handle
from service @service
to service @service, 'current database'
on contract @contract
with encryption = off;
send on conversation @handle
message type @messageType(@messageBody);
commit
感谢Remus。我将坚持使用一个服务/队列/合同,但我发现了一种更好的方式将数据中介到不同的队列。看看我的答案。 – 2012-08-03 00:45:27