如果消息是由触发器发送的,在会话 FROM SERVICE 参数中设置什么?
What to set in conversation FROM SERVICE argument if message is sent by trigger?
我有将消息发送到 Service Broker 服务的数据库触发器。要发送消息,必须首先创建对话,因为这就是 Service Broker 的工作方式(消息在服务之间的对话中发送)。我读到应该重用对话,因为每次创建新对话都会对性能产生不良影响,并且对话数量会增加很多。无论我是否会重复使用对话,我都必须至少创建第一个对话。开始对话具有以下语法:
BEGIN DIALOG [ CONVERSATION ] @dialog_handle
FROM SERVICE initiator_service_name
TO SERVICE 'target_service_name'
[ , { 'service_broker_guid' | 'CURRENT DATABASE' }]
[ ON CONTRACT contract_name ]
[ WITH
[ { RELATED_CONVERSATION = related_conversation_handle
| RELATED_CONVERSATION_GROUP = related_conversation_group_id } ]
[ [ , ] LIFETIME = dialog_lifetime ]
[ [ , ] ENCRYPTION = { ON | OFF } ] ]
[ ; ]
我不知道应该在 FROM SERVICE 参数中设置什么。通常,Service Broker 对话是双向的。我想从触发器向服务发送消息,我不想得到任何反馈,我只想向一个方向发送消息。我在 FROM SERVICE 参数中设置了目标服务并且它有效但我不确定这是否是好的做法。我是否应该创建额外的服务并将其设置在 FROM SERVICE 参数中以用于从我的触发器中使用的对话?如果 EndDialog 消息到达,也许这个服务应该有结束对话的激活过程?
我不期望目标服务有任何响应是一种好习惯吗?我知道我可以获得一些管理消息,例如 http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog or http://schemas.microsoft.com/SQL/ServiceBroker/Error。我的印象是 Service Broker 强制使用双向对话。
Service Broker 需要为启动器和目标提供服务。您的触发器是 from initiator 服务,因此您应该为其创建一个服务和队列。但是触发器不需要实现从启动器队列接收消息。
您可以有一个单独的进程(可能是一个预定的批处理进程)来监视发起者队列中的意外错误和结束对话消息,并且可能在需要时开始一个新的长-运行对话。
我有将消息发送到 Service Broker 服务的数据库触发器。要发送消息,必须首先创建对话,因为这就是 Service Broker 的工作方式(消息在服务之间的对话中发送)。我读到应该重用对话,因为每次创建新对话都会对性能产生不良影响,并且对话数量会增加很多。无论我是否会重复使用对话,我都必须至少创建第一个对话。开始对话具有以下语法:
BEGIN DIALOG [ CONVERSATION ] @dialog_handle
FROM SERVICE initiator_service_name
TO SERVICE 'target_service_name'
[ , { 'service_broker_guid' | 'CURRENT DATABASE' }]
[ ON CONTRACT contract_name ]
[ WITH
[ { RELATED_CONVERSATION = related_conversation_handle
| RELATED_CONVERSATION_GROUP = related_conversation_group_id } ]
[ [ , ] LIFETIME = dialog_lifetime ]
[ [ , ] ENCRYPTION = { ON | OFF } ] ]
[ ; ]
我不知道应该在 FROM SERVICE 参数中设置什么。通常,Service Broker 对话是双向的。我想从触发器向服务发送消息,我不想得到任何反馈,我只想向一个方向发送消息。我在 FROM SERVICE 参数中设置了目标服务并且它有效但我不确定这是否是好的做法。我是否应该创建额外的服务并将其设置在 FROM SERVICE 参数中以用于从我的触发器中使用的对话?如果 EndDialog 消息到达,也许这个服务应该有结束对话的激活过程?
我不期望目标服务有任何响应是一种好习惯吗?我知道我可以获得一些管理消息,例如 http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog or http://schemas.microsoft.com/SQL/ServiceBroker/Error。我的印象是 Service Broker 强制使用双向对话。
Service Broker 需要为启动器和目标提供服务。您的触发器是 from initiator 服务,因此您应该为其创建一个服务和队列。但是触发器不需要实现从启动器队列接收消息。
您可以有一个单独的进程(可能是一个预定的批处理进程)来监视发起者队列中的意外错误和结束对话消息,并且可能在需要时开始一个新的长-运行对话。