代码改变世界

SQL:SQL Broker

2019-10-17 11:46  huoit  阅读(467)  评论(0)    收藏  举报

 

 

-- =============================================
--启用 Broker

USE master;
GO

ALTER DATABASE DEV_AMS
      SET ENABLE_BROKER;
GO

--或者
ALTER DATABASE 目标数据库
      SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE DEV_AMS
      SET ENABLE_BROKER;
GO
-- =============================================
--1.消息类型:创建消息类型
CREATE MESSAGE TYPE  CreateUserMessage
      VALIDATION = None
GO
 
--2.约定:创建约定
CREATE CONTRACT CreateUserContract
      (CreateUserMessage SENT BY ANY);--多个消息逗号隔开
GO

--3.队列:创建队列
--发送队列、接收队列
CREATE QUEUE CreateUserSendQueue
WITH STATUS=ON
GO
CREATE QUEUE CreateUserReceiveQueue
WITH STATUS=ON
GO


--4.服务:创建服务
--发送服务,接收服务
CREATE SERVICE CreateUserSendService
  ON QUEUE CreateUserSendQueue
  (CreateUserContract);
GO

CREATE SERVICE CreateUserReceiveService
  ON QUEUE CreateUserReceiveQueue
    (CreateUserContract);
GO



-- =============================================
--1.测试发送
--Dialog会话用于服务间信息交换
DECLARE @Init_Handler uniqueidentifier
DECLARE @UserMsg nvarchar(100)
SET @UserMsg='张三入职'

--BEGIN TRANSACTION;

BEGIN DIALOG CONVERSATION @Init_Handler
FROM SERVICE CreateUserSendService
TO SERVICE 'CreateUserReceiveService'
ON CONTRACT CreateUserContract
WITH
ENCRYPTION=OFF;--分号结束
--发送
SEND ON CONVERSATION @Init_Handler
MESSAGE TYPE [CreateUserMessage] 
(@UserMsg);

--COMMIT TRANSACTION;
GO


--2.测试接收

DECLARE @RecvReqDlgHandle uniqueidentifier
DECLARE @RecvReqMsg nvarchar(100)
DECLARE @RecvReqMsgName sysname

BEGIN TRANSACTION

WAITFOR
(
RECEIVE TOP(1)
      @RecvReqDlgHandle = conversation_handle,
      @RecvReqMsg       = message_body,
      @RecvReqMsgName   = message_type_name
FROM CreateUserReceiveQueue
),  TIMEOUT 1000;

IF @RecvReqMsgName = N'CreateUserMessage' 
BEGIN
    -- 定义准备用于返回的消息.
    DECLARE @ReplyMsg NVARCHAR(100);
    -- 简单设置.
    SELECT @ReplyMsg = '~' + @RecvReqMsg + '~';
    -- 调试输出.
    PRINT '我接收到:' + @RecvReqMsg + '; 我将反馈:' + @ReplyMsg;
    -- 发送反馈消息.
    SEND ON CONVERSATION @RecvReqDlgHandle
      MESSAGE TYPE [CreateUserMessage] (@ReplyMsg);
    END CONVERSATION @RecvReqDlgHandle;
END;

COMMIT TRANSACTION;
GO


--3
select * from [dbo].[CreateUserSendQueue]
select * from [dbo].[CreateUserReceiveQueue]

 

 

 

 

资源:

https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008/bb839495%28v%3dsql.100%29