Services Real Time Messaging TIBCO - ASE 12.5.2


1- Introduction

Adaptive Server Enterprise 12.5.2 inclut une fonctionnalité de messaging avec le package RTDS : Real Time DataServices. Cette option simplifie le développement d'une application qui intéragit avec des systèmes de messaging et des bases de données.

RTDS permet de capturer les transactions dans une base de données Adaptive Server et de les délivrer à des applications externes en temps réel. Avec ce système, le développement de polling n'est plus nécessaire et les bus de messages en temps réel sont utilisés efficacement.

Les changements de données, ou évènements, sont délivrées aux applications à travers des bus de messages JMS (Java Messaging Services) fournis par TIBCO Enterprise for JMS ou IBM Websphere MQ (dans une version future). RTDS permet de délivrer des messages vers le fournisseur de messages JMS en Transact SQL (ou encore d'extraire des messages en Transact SQL).

2- Configuration de RTMS (Real Time Messaging Services)

Sybase RTMS est très simple à installer : Adaptive Server 12.5.2 avec la licence ASE_MESSAGING. Seuls quelques paramètres de configuration et l'installation de procédures stockées système est nécessaire.

Installation des procédures stockées RTMS :

isql -Usa -P<pwd> -S<ServerName> -i$SYBASE/$SYBASE_ASE/scripts/installmsgsvss

Le rôle messaging_role doit être attribué aux logins appropriés :

grant role messaging_role to <login>

Configuration du serveur pour l'utilisation des services RealTime Messaging :

sp_configure 'enable real time messaging', 1

Configuration de la mémoire serveur allouée aux services RealTime Messaging :

sp_configure 'messaging memory', <# de pages de 2K>

Ajout du serveur local dans sysservers si ce dernier n'est pas encore implémenté :

sp_addserver <ServerName>, local

3- Concepts RTMS

Les systèmes de messaging permettent aux émetteurs et récepteur d'être découplés. Tous les composants n'ont pas systématiquement besoin d'être up et connectés. Un système de messaging peut donc être asynchrone, dans le sens où une application peut envoyer des messages sans que l'application réceptrice soit présente.

JMS (Java Messaging Services) est une API qui définit la façon dont laquelle les clients communiquent avec les fournisseurs de messages. L'émetteur de messages et le récepteur de messages sont vus comme des clients vis-à-vis du fournisseur de messages.

RTMS fournit une méthode simple pour réaliser des opérations de messaging dans des commandes SQL ou des fonctions Transact SQL.

3-1- Modèles des messages

JMS définit du modèles de messaging :

3-1-1- Modèle point-to-point (queues)

Dans le modèle point-to-point, tout message envoyé par l'émetteur ne peut être lu que par le destinataire (application réceptrice). La destination d'un message point-to-point est une queue. Une queue peut contenir plus d'un récepteur actif mais l'API de messaging assure que le message est délivré à un unique récepteur.

3-1-2- Modèle publication-souscription (publish-and-subscribe)

Le modèle publication-souscription est un modèle dans lequel l'application envoyant le message est appelé le producteur de messages (''message producer'') et les applications recevant le message les consommateurs de message (''message consumers'').

Le producteur de messages n'est pas dépendant des consommateurs de messages dans le sens où l'émetteur publie les messages vers un topic, destination du modèle. Les consommateurs de messages établissent des souscriptions vers ce topic en fonction de l'intérêt des messages dans ce topic.

Il existe deux types de souscriptions qu'il est possible d'étable dans ce modèle :

3-2- Format des messages

Le format du message JMS comprend trois parties :

Partie           Description
Entête de message
(Message Header)
L'entête du message contient les informations spécifiées par le standard JMS. Cette information est automatiquement renseignée par le fournisseur de message (message provider)
Corps du message
(Message Body)
Le corps du message contient les données que les applications clientes échangent.
Propriétés du message
(Message Properties)

Les propriétés du message sont des entêtes additionnelles utilisateur qu'il est possible d'include dans le message. Les propriétés du message ont des types, et ces types définissent des informations utilisables ultérieurement par les consommateurs de messages afin de sélectionner les messages susceptibles de l'intéresser. Les types des propriétés des messages sont des types Java natifs : int, float ou String(classe).

3-3- Sélecteurs de messages (Message Selectors)

Les sélecteurs de message (Message Selectors) fournissent la façon dont les consommateurs de messages (dans le modèle publication-souscription) peuvent filtrer le flux de messages et sélectionner les messages l'intéressant. Ces filtres sont des critères sur les propriétés des messages et leurs valeurs. Le sélecteur de message n'est ni plus ni moins qu'une clause Where SQL Ansi 92.

4- ASE 12.5.2 - RTMS et le modèle Point-to-Point (Queues)

Avec les fonctions msgsend et msgrecv, les applications Transact-SQL peuvent envoyer des messages vers une queue JMS ou lire des messages dans une queue JMS.

Un corps de message peut être construit en utilisant la logique applicative, ou bien peut contenir des données chaînes de caractères ou binaires directement à partir des tables.

Les valeurs des propriétés des messages peuvent provenir des données relationnelles ou de la logique applicative, et spécifier alors les propriétés du message lors de l'envoi du message.

Les messages lus à partir de la queue JMS peuvent être traités par la logique applicative ou insérés directement dans des tables relationnelles. Pour filtrer les messages, il suffit de spécifier le sélecteur de message.

4-1- Envoi de messages vers une queue : msgsend

msgsend (message_body, end_point [options_and_properties] )

options_and_properties ::= [option_clause] [properties_clause]
option_clause::= [,] option option_string
properties_clause ::= [,] message property option_string
message_body := scalar_expression | (select_for_xml)
end_point := basic_character_expression

Exemples

Envoi d'un message 'hello world' avec la propriété city valant Detroit :

select msgsend('hello world', 'tibco_jms:tcp://my_jms_host:7222?queue=queue.sample'
MESSAGE PROPERTY 'city=Detroit')

Envoi d'un message 'hello' avec plusieurs propriétés :

select msgsend ('hello', 'my_jms_provider?queue=queue.sample'
MESSAGE PROPERTY 'ttl=30,category=5, rate=0.57, rank=''top'',priority=6')

Envoi d'un message dont le corps contient le résultat SQLX d'une requête SQL :

select msgsend ((select * from pubs2..publishers FOR XML), 'tibco_jms:tcp://my_jms_host:7222?queue=queue.sample')

4-2- Réception de messages en provenance d'une queue : msgrecv

msgrecv (end_point options_filter_and_returns)

options_filters_and_return ::= [option_clause] [filter_clause] [returns_clause]
>option_clause::= [,] option option_string
filter_clause::= [,] message selector message_filter
message_filter::=basic_character_expression
returns_clause ::= [,] returns sql_type
end_point := basic_character_expression
sql_type ::=varchar(integer) | java.lang.String | text | varbinary( integer ) | image

Exemples :

Réception d'un message avec le sélecteur color=red et shape=squate :

declare @mymsg varchar (16384)
select @mymsg = msgrecv('my_jms_provider?queue=queue.sample',OPTION 'timeout=1000'
MESSAGE SELECTOR 'color = ''red'' and shape=''square''')

Réception d'un message et insertion dans une table :

create table T1(c1 numeric(5,0)identity, m text)
insert into T1
select msgrecv('my_jms_provider?queue=queue.sample',RETURNS text)

5- ASE 12.5.2 - RTMS et le modèle publication-souscription (Topics)

5-1- Souscriptions aux topics : sp_msgadmin

Pour publier ou consommer des messages, une souscription doit être définie au niveau du serveur à l'aide de la procédure stockée T-SQL sp_msgadmin 'register'

sp_msgadmin ne peut être utilisée au sein d'une transaction.

sp_msgadmin 'register', 'subscription', 'subscription_1',
'my_jms_provider?topic=topic.sample,user=user1,password=pwd',
'Supplier=12345',null, 'durable1', 'client'

5-2- Envoi de messages vers un topic : msgpublish

msgpublish permet d'émettre un message vers un topic à travers une souscription créée avec sp_msgadmin

select msgpublish
('Sending order', 'subscription_1',
MESSAGE PROPERTY 'Supplier=12345')

5-3- Réception d'un message en provenance d'un topic : msgsubscribe, msgunsubscribe et msgconsume

La cinématique de consommation d'un message d'un topic défini au niveau du serveur ASE par une souscription se déroule de la façon suivante :

select msgsubscribe('subscription_1')
declare @mymsg varchar(16384)
select @mymsg = msgconsume('subscription_1')
select msgunsubscribe('subscription_1')

Annexe

Historique

Version Date Commentaires
1.0 06/2004 Version initiale
1.1 09/2005 Changement du titre et spécification du support ultérieur dans une future version pour MQ Series

Liens

Sybase Adaptive Server Enterprise 12.5.2 Books OnLine - New Functionality in Adaptive Server 12.5.2, Real Time Messaging Services
Sybase Adaptive Server Enterprise 12.5.2 Books OnLine - Messaging Services User's Guide