Service Broker 2 bases 4/4 : exemple de dialogue...
/*
Dialogue simple entre les deux instances
*/
:setvar serv1 "READY-12-01"
:setvar serv2 "READY-12-02"
:connect $(serv1)
--------------------------------------------------------------------------
-- Etape 4.1 -- sur serv1
--------------------------------------------------------------------------
USE [Test SB];
GO
--on commence un dialogue et
-- on envoie un message *** MAL FORMÉ ***
DECLARE @h uniqueidentifier --le handle sur la conversation
DECLARE @msg xml; --contenu du message
BEGIN DIALOG CONVERSATION @h
FROM SERVICE Service1 TO SERVICE 'Service2'
ON CONTRACT [Ctract];
SET @msg = '<DemandInventaire xmlns="https://ReadySA">
<ProductID>1234</ProductID>
<Quantite>6.6</Quantite>
<Prix>12.4</Prix>
</DemandInventaire>';
SEND ON CONVERSATION @h
MESSAGE TYPE [sendmsg]
(@msg);
--on affiche le message d'erreur
--SELECT * FROM q1
--SELECT CAST(message_body as XML)from q1
DECLARE @m xml; --le message
DECLARE @h uniqueidentifier; -- le handle sur la conversation
RECEIVE @m = message_body,@h = conversation_handle
FROM q1
SELECT @m;
-----------------------------------------------------------
-- on envoie deux messages *** BIEN FORMÉ ***
-----------------------------------------------------------
USE [Test SB];
GO
DECLARE @h uniqueidentifier --le handle sur la conversation
DECLARE @msg xml; --contenu du message
BEGIN DIALOG CONVERSATION @h
FROM SERVICE Service1 TO SERVICE 'Service2'
ON CONTRACT [Ctract];
SET @msg = '<DemandInventaire xmlns="https://ReadySA">
<ProductID>456</ProductID>
<Quantite>10</Quantite>
</DemandInventaire>';
SEND ON CONVERSATION @h
MESSAGE TYPE [sendmsg]
(@msg);
-----------------------------------------------------------
-- et un deuxième *** BIEN FORMÉ ***
-----------------------------------------------------------
--on vérifie
SELECT * FROM sys.transmission_queue
SELECT * FROM q1
-- ou
--DECLARE @txmsg varchar(max)
--SELECT TOP(1) @txmsg = transmission_status
--FROM sys.transmission_queue
--IF @txmsg <> ''
-- BEGIN
-- RAISERROR(@txmsg, 16, 1)
-- END
--GO
--Si tout est OK, on peut aller voir le résultat
--dans la queue distante
--------------------------------------------------------------------------
-- Etape 4.2 -- sur serv2
--------------------------------------------------------------------------
:setvar serv2 "READY-12-02"
:connect $(serv2)
USE [Test SB];
GO
SELECT * FROM q2
GO
--------------------------------------------------------------------------------------
--on consomme le 1er message
--------------------------------------------------------------------------------------
:setvar serv2 "READY-12-02"
:connect $(serv2)
USE [Test SB];
GO
DECLARE @m xml; --le message
DECLARE @h uniqueidentifier; -- le handle sur la conversation
RECEIVE TOP(1) @m = message_body,
@h = conversation_handle
FROM q2
--on affiche le message
SELECT @m;
--------------------------------------------------------------------------------------
--on répond
--------------------------------------------------------------------------------------
:setvar serv2 "READY-12-02"
:connect $(serv2)
USE [Test SB];
GO
DECLARE @m xml; --le message
DECLARE @h uniqueidentifier; -- le handle sur la conversation
RECEIVE TOP(1) @m = message_body,
@h = conversation_handle
FROM q2
DECLARE @msg xml; --return msg
SET @msg = '<OK/>';
SEND ON CONVERSATION @h
MESSAGE TYPE [recmsg]
(@msg);
END CONVERSATION @h;
GO
--------------------------------------------------------------------------------------
--Retour sur Serv1
--------------------------------------------------------------------------------------
:setvar serv1 "READY-12-01"
:connect $(serv1)
USE [Test SB];
GO
SELECT * FROM q1
GO
DECLARE @m xml; --le message
DECLARE @h uniqueidentifier; -- le handle sur la conversation
RECEIVE TOP(1) @m = message_body,
@h = conversation_handle
FROM q1
--on affiche le message
SELECT @m;
--C'est fini , il n'y a plus qu'à développer l'application ! :-)