在本课中,你将了解如何从目标队列接收请求消息,以及如何向发起方服务发送回复消息。 从与数据库引擎的目标实例相同的计算机上运行的 Management Studio 副本运行这些步骤。
过程
切换到 TargetDB 数据库
将以下代码复制并粘贴到“查询编辑器”窗口中,然后运行它,将上下文切换到 InstTargetDB 数据库,在该数据库中收到请求消息并将回复消息发送回 InstInitiatorDB。
USE InstTargetDB; GO
接收请求并发送答复
复制以下代码并将其粘贴到查询编辑器窗口中。 然后,运行该代码以接收来自 InstTargetQueue 的答复消息,并将答复消息发回给发起程序。 该
RECEIVE语句检索请求消息,然后以下SELECT语句显示文本,以便可以验证它是否与上一步骤中发送的消息相同。 该IF语句测试收到的消息是否为请求消息类型,以及是否SEND使用语句将答复消息发送回发起程序。 该END CONVERSATION语句用于结束对话的目标端。 最后SELECT一条语句显示答复消息的文本。DECLARE @RecvReqDlgHandle AS UNIQUEIDENTIFIER; DECLARE @RecvReqMsg AS NVARCHAR (100); DECLARE @RecvReqMsgName AS sysname; BEGIN TRANSACTION; WAITFOR (RECEIVE TOP (1) @RecvReqDlgHandle = conversation_handle, @RecvReqMsg = message_body, @RecvReqMsgName = message_type_name FROM InstTargetQueue), TIMEOUT 1000; SELECT @RecvReqMsg AS ReceivedRequestMsg; IF @RecvReqMsgName = N'//BothDB/2InstSample/RequestMessage' BEGIN DECLARE @ReplyMsg AS NVARCHAR (100); SELECT @ReplyMsg = N'<ReplyMsg>Message for Initiator service.</ReplyMsg>'; SEND ON CONVERSATION (@RecvReqDlgHandle) MESSAGE TYPE [//BothDB/2InstSample/ReplyMessage] (@ReplyMsg); END CONVERSATION @RecvReqDlgHandle; END SELECT @ReplyMsg AS SentReplyMsg; COMMIT TRANSACTION; GO
相关内容
- 结束对话(Transact-SQL)
- RECEIVE (Transact-SQL)
- SEND (Transact-SQL)
- WAITFOR (Transact-SQL)
- Service Broker 应用程序
后续步骤
已成功收到请求消息,并向发起方服务发送了回复消息。 接下来,收到来自发起程序队列的答复消息并结束对话。