DevWeek 2006 - my simple Service Broker example
I delivered a session to a full house on Tuesday which included a small demo on Service Broker. A big thanks to all who showed. I hope to see some of you again on Thursday in my intro to BI session.
I promised to post the code - enjoy.
CREATE DATABASE TestSB
go
USE TestSB
go
ALTER DATABASE TestSB SET ENABLE_BROKER
go
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Password01'
go
-- SETUP: setup the infrastructure to send a message via service broker
-- Need a sender Q (TxQ) and receiver Q (RxQ)
CREATE QUEUE TxQ
CREATE QUEUE RxQ
-- Need a message type to send
CREATE MESSAGE TYPE Msg
-- Need a contract that says who can send the message type
CREATE CONTRACT MsgContract(Msg SENT BY ANY)
-- Need services to look after the Qs
CREATE SERVICE TxSvc ON QUEUE TxQ
CREATE SERVICE RxSvc ON QUEUE RxQ (MsgContract)
-- TEST IT: Send one message - need to send as part of a dialog
DECLARE @h uniqueidentifier
BEGIN DIALOG CONVERSATION @h
FROM SERVICE TxSvc TO SERVICE 'RxSvc'
ON CONTRACT MsgContract;
SEND ON CONVERSATION @h MESSAGE TYPE Msg ('Hello');
SEND ON CONVERSATION @h MESSAGE TYPE Msg ('World');
END CONVERSATION @h;
-- Check the destination Q
SELECT * FROM RxQ
SELECT message_type_name, CAST(message_body as VARCHAR) as Body FROM RxQ
-- Troubleshooting
SELECT * FROM sys.transmission_queue
SELECT transmission_status FROM sys.transmission_queue
-- TEST IT: Run this in a SECOND Window to wait for a message on the destination q
WAITFOR (RECEIVE TOP(1)
CAST(message_body as VARCHAR)
FROM RxQ);