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 ! :-)