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