3  /  4  页   1234 跳转 查看:40863

Service Broker

回复: Service Broker

自动处理,你怎么实现?
 
虽有智慧,不如乘势;虽有鎡基,不如待时。
君子学以聚之,问以辨之,宽以居之,仁以行之。
独学而无友,则孤陋而寡闻。
 

回复: 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

我准备在修改一下,你的在 “创建队列时需要激活存储过程”,怎么讲?
另外,你没有用到回执消息以及发送结束消息标志。
 

回复: Service Broker

可以看一下这篇文章:

http://www.windbi.com/showtopic-352.aspx
虽有智慧,不如乘势;虽有鎡基,不如待时。
君子学以聚之,问以辨之,宽以居之,仁以行之。
独学而无友,则孤陋而寡闻。
 

回复: Service Broker

看了,和我配置的稍微有点区别。你这样的证书模式,能配置成功吗?
另外,一个queue能激活多个SP吗?
 

回复: Service Broker

我按照那样的配置,当然配置成功了。

一个queue能否激活多个SP,不太清楚,估计是不行,因为你Receive一个消息后,该消息就被删除了。但你可以在被激活的这个sp里调用其他的sp;我还了解一点可以并行激活,但具体我没试验过。
虽有智慧,不如乘势;虽有鎡基,不如待时。
君子学以聚之,问以辨之,宽以居之,仁以行之。
独学而无友,则孤陋而寡闻。
 

回复: Service Broker

我使用alter queue把queue指定到了SP,可是,不能正常激活,怎么回事呢?
 

回复: Service Broker

:) 研究中。。。SQL如此扩展,不知道什么时候是尽头:(
 

回复: Service Broker

拓狼,我现在碰到一个问题,创建好会话后,不能生成消息了,这个有碰到过吗,什么原因呢?
 

回复: Service Broker

我现在的架构是,在SQL Server 2000的业务表上有一个触发器,当有插入或更新的时候触发一台有SQL Server 2005的服务器上的发送消息的那个存储过程,接收消息的存储过程在同一台服务器上,接收消息后会在该SQL Server 2005所在的服务器上进行处理,同时对另外一台有SQL Server 2005的服务器进行处理。

以前出现过不能在另一台有SQL Server 2005的服务器上处理的情况,但在前面的回帖中我已经指明了解决方法。不能发送消息的情况还没有遇到过。
虽有智慧,不如乘势;虽有鎡基,不如待时。
君子学以聚之,问以辨之,宽以居之,仁以行之。
独学而无友,则孤陋而寡闻。
 
3  /  4  页   1234 跳转

版权所有 微软BI开拓者 

Powered by Discuz!NT 2.1.202    Copyright © 2001-2012 Comsenz Inc.
Processed in 0.0937524 second(s) , 4 queries.
返顶部