回复: Service Broker
这个是我目标机上读取队列的SP。
create proc [dbo].[receivedialogs]
as
-- 使用 Receive 命令可从队列接收消息
-- 声明变量以存储接收到的数据
SET NOCOUNT ON
DECLARE @conversationHandle uniqueidentifier
declare @message_body nvarchar(MAX)
declare @message_type_name sysname;
-- Service Broker 命令总是位于事务中
Begin Transaction;
-- Receive 命令的格式类似于一个选择列表。首先列出
-- 要获取的列,然后指定要从中获取消息
-- 的队列
RECEIVE top(1) -- 只接收一条消息,因此我们可以直接保存到变量中。
@message_type_name=message_type_name,
-- 接收的消息类型
@conversationHandle=conversation_handle,
-- 对话的标识符
-- 我们通过下列语句接收该消息
@message_body=message_body
-- 作为
-- varbinary(MAX) blob 的消息内容
FROM [myQueue]
begin try
exec(@message_body)
-- 如果这是一条 hello world 消息,则用相应的问候语回答
if @message_type_name = N'mymsg'
Begin
SEND ON CONVERSATION @conversationHandle
-- 使用下列消息接收语句的相同会话
MESSAGE TYPE [mymsg]
(N'Hello From '+@@servername )
-- 这是我们希望从初始化程序接收的唯一消息,因此
-- 现在可以安全地结束对话。
END CONVERSATION @conversationHandle
End
-- 提交事务
-- 如果此时我们回滚,所有内容将退回到
-- 我们开始时的状态 – 消息会返回到队列,并且没有发送响应
Commit
end try
begin catch
END CONVERSATION @conversationHandle
commit
end catch
我准备在修改一下,你的在 “创建队列时需要激活存储过程”,怎么讲?
另外,你没有用到回执消息以及发送结束消息标志。