Service Broker 2 bases 3/4 : mise en place des objects spécifiques Service Broker...

/*

Mise en place des objets spécifiques à

Service Broker : dialogue, contrat...

*/

:setvar serv1 "READY-12-01"

:setvar serv2 "READY-12-02"

:connect $(serv1)

--------------------------------------------------------------------------

-- Etape 3.1 -- sur serv1

--------------------------------------------------------------------------

USE [Test SB];

GO

-- ¤¤¤¤¤

--

-- Message type :

-----------------

-- <DemandInventaire xmlns="https://ReadySA">

-- <ProductID>1234</ProductID>

-- <Quantite>6</Quantite>

-- </DemandInventaire>

-- Définition du schéma XML

IF EXISTS (SELECT * FROM sys.xml_schema_collections

WHERE name = 'SchemaInventaire')

DROP XML SCHEMA COLLECTION SchemaInventaire

GO

CREATE XML SCHEMA COLLECTION SchemaInventaire AS '

<schema xmlns="https://www.w3.org/2001/XMLSchema"

targetNamespace="https://ReadySA">

<element name="DemandInventaire" type="anyType"/>

<element name="ProductID" type="string"/>

<element name="Quantite" type="decimal"/>

</schema>'

GO

--on définit 2 types de messages

--¤¤¤¤¤

CREATE MESSAGE TYPE [sendmsg]

VALIDATION = VALID_XML WITH SCHEMA COLLECTION SchemaInventaire

GO

CREATE MESSAGE TYPE [recmsg]

VALIDATION = WELL_FORMED_XML;

GO

--on définit le contrat et

-- qui envoie quoi

--¤¤¤¤¤

CREATE CONTRACT [Ctract]

( [sendmsg] sent by initiator,

[recmsg] sent by target);

GO

--on crée la queue 1

--¤¤¤¤¤

CREATE QUEUE q1

-- WITH ACTIVATION (

-- MAX_QUEUE_READERS = <max_readers>)

-- ON <filegroup>

;

GO

--on crée le service

CREATE SERVICE [Service1]

on queue q1

([Ctract] );

go

--on crée la route

--¤¤¤¤¤

CREATE ROUTE [RouteVers2]

WITH SERVICE_NAME = 'Service2',

ADDRESS = 'TCP://$(serv2):4022';

GO

--on vérifie la création

SELECT * FROM sys.routes

--on définit le "binding" distant

--¤¤¤¤¤

CREATE REMOTE SERVICE BINDING [ServiceDistant]

TO SERVICE 'Service2'

WITH USER = UtilDiagDistant1,

ANONYMOUS=Off

--on donne les droits d'envoyer des messages

GRANT SEND ON SERVICE::Service1 TO UtilDiagDistant1;

GO

:connect $(serv2)

--------------------------------------------------------------------------

-- Etape 3.2 -- sur serv2

--------------------------------------------------------------------------

USE [Test SB];

GO

-- Définition du schéma XML

IF EXISTS (SELECT * FROM sys.xml_schema_collections

WHERE name = 'SchemaInventaire')

DROP XML SCHEMA COLLECTION SchemaInventaire

GO

CREATE XML SCHEMA COLLECTION SchemaInventaire AS '

<schema xmlns="https://www.w3.org/2001/XMLSchema"

targetNamespace="https://ReadySA">

<element name="DemandInventaire" type="anyType"/>

<element name="ProductID" type="string"/>

<element name="Quantite" type="decimal"/>

</schema>'

GO

--on définit 2 types de messages

CREATE MESSAGE TYPE [sendmsg]

VALIDATION = VALID_XML WITH SCHEMA COLLECTION SchemaInventaire

GO

CREATE MESSAGE TYPE [recmsg]

VALIDATION = WELL_FORMED_XML;

GO

--on définit le contrat et

-- qui envoie quoi

CREATE CONTRACT [Ctract]

( [sendmsg] sent by initiator,

[recmsg] sent by target);

GO

--on crée la queue 2

CREATE QUEUE q2;

GO

--on crée le service

CREATE SERVICE [Service2]

on queue q2

([Ctract] );

go

--on crée la route

CREATE ROUTE [RouteVers1]

WITH SERVICE_NAME = 'Service1',

ADDRESS = 'TCP://$(serv1):4022';

GO

--on vérifie la création

SELECT * FROM sys.routes

--on définit le "binding" distant

CREATE REMOTE SERVICE BINDING [ServiceDistant]

TO SERVICE 'Service1'

WITH USER = UtilDiagDistant2,

ANONYMOUS=Off

--on donne les droits d'envoyer des messages

GRANT SEND ON SERVICE::Service2 TO UtilDiagDistant2;

GO