这就是我想出的(使用 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