S'abonner à un sujet
Un abonné (ou une application client) peut s'inscrire à un sujet particulier via un abonnement. Donc, NCache fournit plusieurs types d'abonnements à des sujets Pub/Sub.
Pré-requis
- Pour en savoir plus sur les prérequis standard requis pour travailler avec tous NCache fonctionnalités côté client, veuillez vous référer à la page donnée sur Prérequis de l'API côté client.
- Pour plus de détails sur l'API, reportez-vous à : ICache, CacheItem, ISujet, IDurableTopicAbonnement, Créer un abonnement, Créer un abonnement durable,Nom du sujet, Nom de l'abonnement, IMMessagingService, Obtenir le sujet, Politique d'abonnement, Se désabonner, MessageEventArgs, Mode de livraison, RubriqueOptions de recherche, ITopicAbonnement, MessageDeliveryFailureMessageDeliveryFailure, Charge utile.
- Pour en savoir plus sur les prérequis standard requis pour travailler avec tous NCache fonctionnalités côté client, veuillez vous référer à la page donnée sur Prérequis de l'API côté client.
- Pour plus de détails sur l'API, reportez-vous à : Cache, CacheItem, Sujet, RubriqueAbonnement, getMessagingServicegetMessagingService, obtenir le sujet, createDurableSubscription, Politique d'abonnement, Durée, Se désabonner, MessageReceivedListenerMessageReceivedListener, surMessageReçu, MessageEventArgs, obtenirMessage, getPayload, créer un abonnement, Mode de livraison, RubriqueOptions de recherche, addMessageDeliveryFailureListener.
- Pour en savoir plus sur les prérequis standard requis pour travailler avec tous NCache fonctionnalités côté client, veuillez vous référer à la page donnée sur Prérequis de l'API côté client.
- Pour plus de détails sur l'API, reportez-vous à : Cache, CacheItem, RubriqueAbonnement, getMessagingServicegetMessagingService, obtenir le sujet, createDurableSubscription, Politique d'abonnement, Durée, Se désabonner, MessageEventArgs, MessageReceivedListenerMessageReceivedListener, obtenirMessage, getPayload, créer un abonnement, Mode de livraison, RubriqueOptions de recherche, SujetListener, addMessageDeliveryFailureListener.
- Pour en savoir plus sur les prérequis standard requis pour travailler avec tous NCache fonctionnalités côté client, veuillez vous référer à la page donnée sur Prérequis de l'API côté client.
- Pour plus de détails sur l'API, reportez-vous à : Cache, CacheItem, get_topic, get_messaging_service, create_durable_subscription, get_payload, Durée, MessageEventArgs, obtenir_message, créer_abonnement, Se désabonner, add_message_delivery_failure_listener.
Méthodes pour créer un abonnement
Nous décrivons ici comment créer un abonnement non durable, un abonnement durable, des abonnements multiples et un abonnement asynchrone.
Abonnements non durables
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
La ITopic
/Topic
l'interface facilite la création abonnement non durable et publication de messages sur le sujet. La méthode de création d'abonnement enregistre un abonnement non durable pour une rubrique si la rubrique existe. Il permet à l'abonné de s'inscrire MessageReceivedCallback
contre le sujet afin qu'il puisse recevoir les messages publiés.
L'exemple de code suivant effectue les opérations suivantes :
- Obtenir un sujet d'intérêt existant, c'est-à-dire
NewBeverages
.
- Créer un abonnement pour chaque sujet.
- Enregistrez des événements pour que les abonnés reçoivent des messages une fois publiés dans le sujet.
// Precondition: Cache is already connected
// NewBeverages is the name of the topic created, beforehand
string topicName = "NewBeverages";
// Get the topic
ITopic topic = cache.MessagingService.GetTopic(topicName);
// If topic exists, Create subscription
if (topic != null)
{
// Create and register subscribers for order topic
// Message received callback is specified
ITopicSubscription subscription = topic.CreateSubscription(MessageReceived);
}
// Precondition: Cache is already connected
// NewBeverages is the name of the topic created beforehand
String topicName = "NewBeverages";
// Get the topic
Topic ordertopic = cache.getMessagingService().getTopic(topicName);
// If topic exists, Create subscription
if (ordertopic != null) {
// Create and register subscribers for order topic
ordertopic.createSubscription(new PubSubMessageReceivedListener());
System.out.println("Subscriber registered for topic: " + ordertopic.getName());
} else {
System.out.println("Topic does not exist.");
}
// This is an async method
// Topic "NewBeverages" already exists in the cache
let topicName = "NewBeverages";
// Get the topic
let ordertopic = await ncache.getMessagingService().getTopic(topicName);
if (ordertopic != null) {
// Create and register subscribers for topic
// Message received callback is specified
let ordersubscriber = await ordertopic.createSubscription(ncache.onMessageReceived());
}
else {
// No topic exists
}
# Topic "NewBeverages" already exists in the cache
topic_name = "NewBeverages"
# Get the topic
order_topic = cache.get_messaging_service().get_topic(topic_name)
if order_topic is not None:
# Create and register subscribers for the topic
# Message received callback is specified
order_subscriber = order_topic.create_subscription(on_message_received)
else:
# No topic exists
print("Topic not found")
Notes
Pour garantir la sécurité de l'opération, il est recommandé de gérer toutes les exceptions potentielles au sein de votre application, comme expliqué dans Gestion des échecs.
Abonnements durables
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
La IDurableTopicSubscription
l'interface facilite la création abonnements durables et publier des messages sur le sujet s'il existe. Il permet à l'abonné d'enregistrer un MessageReceivedCallback
contre le sujet, afin qu'il puisse recevoir les messages publiés.
Abonnements durables partagés
Le code suivant illustre la stratégie d'abonnement partagé.
// DiscountedBeverages is the name of the topic created, beforehand
string topicName = "DiscountedBeverages";
string subscriptionName = "DiscountedBeveragesSubscription";
// Get the topic
ITopic ordertopic = cache.MessagingService.GetTopic(topicName);
if (ordertopic != null)
{
// Create and register subscribers for topic
// Message received callback is specified
// The subscription policy is shared which means that the subscription can have more than one subscribers
IDurableTopicSubscription ordersubscription = ordertopic.CreateDurableSubscription (subscriptionName, SubscriptionPolicy.Shared, MessageReceived, TimeSpan.FromMinutes(20));
}
// DiscountedBeverages is the name of the topic created beforehand
String topicName = "DiscountedBeverages";
Topic ordertopic = cache.getMessagingService().getTopic(topicName);
// Get the topic
if (ordertopic != null) {
// Create and register subscribers for topic
// The subscription policy is shared which means that the subscription can have more than one subscribers
System.out.println("Topic retrieved: " + ordertopic.getName());
ordertopic.createDurableSubscription(subscriptionName, SubscriptionPolicy.Shared, new PubSubMessageReceivedListener(), TimeSpan.FromMinutes(20));
System.out.println("Durable subscriber registered for topic: " + ordertopic.getName());
} else {
System.out.println("Topic does not exist.");
}
// Topic "DiscountedBeverages" already exists in the cache
let topicName = "DiscountedBeverages";
let subscriptionName = "DiscountedBeveragesSubscription";
// Get the topic
let ordertopic = ncache.getMessagingService().getTopic(topicName);
// Create and register subscribers for order Topic
// Message received callback is specified below
// The subscription policy is Shared which means that the subscription can have more than one subscribers
let orderSubscriber = orderTopic.createDurableSubscription(subscriptionName, ncache.SubscriptionPolicy.Shared, this.messageReceived(), ncache.TimeSpan.FromMinutes(20));
// Topic "DiscountedBeverages" already exists in the cache
let topicName = "DiscountedBeverages";
let subscriptionName = "DiscountedBeveragesSubscription";
// Get the topic
let orderTopic = ncache.getMessagingService().getTopic(topicName);
// Create and register subscribers for orderTopic
// MessageReceived callback is specified below
// The subscription policy is Shared which means that the subscription can have more than one subscribers
let orderSubscriber = orderTopic.createDurableSubscription(subscriptionName, ncache.SubscriptionPolicy.Shared, this.messageReceived(), ncache.TimeSpan.FromMinutes(20));
Abonnements durables exclusifs
Le code suivant illustre la stratégie d'abonnement exclusif.
// orderTopic is the name of the topic created beforehand
string topicName = "orderTopic";
string subscriptionName = "orderTopicName";
// Get the topic
ITopic orderTopic = cache.MessagingService.GetTopic(topicName);
// Create and register subscribers for Order topic
// The subscription policy is exclusive which means that the subscription can have only one subscriber
IDurableTopicSubscription orderSubscriber = orderTopic.CreateDurableSubscription(subscriptionName, SubscriptionPolicy.Exclusive, MessageReceived, TimeSpan.FromMinutes(20));
// Get the topic
Topic orderTopic = cache.getMessagingService().getTopic(topicName);
if (orderTopic != null) {
System.out.println("Topic retrieved: " + orderTopic.getName());
// Create and register subscribers for Order topic
// The subscription policy is exclusive which means that the subscription can have only one subscriber
orderTopic.createDurableSubscription(subscriptionName,SubscriptionPolicy.Exclusive, new PubSubMessageReceivedListener(),TimeSpan.FromMinutes(20));
System.out.println("Durable subscriber registered for topic: " + orderTopic.getName());
} else {
System.out.println("Topic does not exist.");
}
// Topic "orderTopic" already exists in the cache
let topicName = "orderTopic";
let subscriptionName = "orderTopicName";
// Get the topic
let orderTopic = ncache.getMessagingService().getTopic(topicName);
// Create and register subscribers for orderTopic
// The subscription policy is Exclusive which means that the subscription can have more than one subscribers
let orderSubscriber = orderTopic.createDurableSubscription(subscriptionName, ncache.SubscriptionPolicy.Exclusive, this.messageReceived(), ncache.TimeSpan.FromMinutes(20));
# Topic "orderTopic" already exists in the cache
topic_name = "orderTopic"
subscription_name = "orderTopicName"
# Get the topic
order_topic = cache.get_messaging_service().get_topic(topic_name)
# Create and register subscribers for orderTopic
# The subscription policy is exlusive which means that the subscription can have more than one subscriber
order_subscriber = order_topic.create_durable_subscription(subscription_name, ncache.SubscriptionPolicy.EXCLUSIVE, on_message_received, ncache.TimeSpan.from_minutes(20))
Abonnements multiples
Grâce à cette méthode d'abonnement, les abonnés peuvent proposer des modèles pour s'abonner à plusieurs sujets avec un seul appel. Pour cela, il est important que les rubriques correspondant au modèle existent déjà sur le serveur. Une fois que le ou les abonnements sont créés avec succès sur le sujet basé sur un modèle, les abonnés reçoivent des messages publiés sur des sujets qui correspondent au modèle. De plus, si un sujet est créé après que l'abonnement basé sur un modèle a été enregistré auprès du modèle, il enregistrera cet abonné auprès de ce sujet.
De même, concernant la désinscription d'un sujet, cette méthode désabonne l'abonné à tous les sujets correspondants avec le modèle fourni sans affecter tout autre abonnement utilisant cet appel.
Notes
- Un abonné ne peut obtenir qu'un sujet basé sur un modèle et n'est pas autorisé à le créer.
- Un modèle ne peut être utilisé par l'éditeur que pour recevoir des notifications d'échec.
Caractères génériques pris en charge
La méthode d'abonnement basée sur un modèle prend en charge les trois caractères génériques suivants :
*
: zéro ou plusieurs caractères. Par example, bl*
s'abonne au noir, au bleu et au flou etc.
?
: n'importe quel caractère. Par example, h?t
s'abonne à hit, hot et hat etc.
[]
: plage de caractères. Par example, b[ae]t
s'abonne à bet and bat, mais pas bit.
Créer un abonnement avec Wildcard
L'exemple suivant crée un abonnement en fournissant un modèle basé sur lequel le sujet est abonné correspondant au modèle.
// Create topic name for all topics with suffix Beverages
// Only ? * [] wildcards supported
string topicName = "*Beverages";
// Get the topic
ITopic topic = cache.MessagingService.GetTopic(topicName, TopicSearchOptions.ByPattern);
// If topic exists, Create subscription
if (topic != null)
{
// Create and register subscribers for Order topic
ITopicSubscription subscription = topic.CreateSubscription(MessageReceived);
}
// Define topic name pattern
String topicNamePattern = "*ages";
// Get all topics that fulfill the pattern
Topic topic = cache.getMessagingService().getTopic(topicNamePattern, TopicSearchOptions.ByPattern);
if (topic != null) {
System.out.println("Matching topic retrieved: " + topic.getName());
// Create and register notifications for topic
topic.createSubscription(new PubSubMessageReceivedListener());
System.out.println("Subscription created for topic: " + topic.getName());
} else {
System.out.println("No matching topic found.");
}
// Topic "Beverages" exists in the cache
// Only ? * [] wildcards supported
let topicName = "*Beverages";
// Get the topic
let orderTopic = ncache.getMessagingService().getTopic(topicName, ncache.TopicSearchOptions.ByPattern);
// Create and register subscribers for orderTopic
let orderSubscriber = orderTopic.createSubscription(this.messageReceived());
# Topic "Beverages" exists in the cache
# Only ? * [] wildcards supported
topic_name = "*Beverages*"
subscription_name = "orderTopicName"
# Get the topic
order_topic = cache.get_messaging_service().get_topic(topic_name, ncache.TopicSearchOptions.BY_PATTERN)
# Create and register subscribers for orderTopic
order_subscriber = order_topic.create_subscription(on_message_received)
Abonnements asynchrones
Le mode de livraison peut être spécifié lors de la création d'abonnements pour les messages commandés et peut être sync
or async
. L'exemple suivant crée un abonnement à l'aide de CreateSubscription
méthode avec le mode de livraison synchronisé. Il est recommandé d'utiliser sync
mode pour les messages ordonnés et async
mode sinon pour obtenir des performances élevées.
Lors de la création d'un abonnement, vous pouvez spécifier le mode de livraison qui peut être synchrone ou asynchrone. En particulier, le mode de livraison synchrone peut être utilisé pour messages ordonnés, tandis que si vous n'utilisez pas de messages triés, le mode asynchrone améliore les performances.
Notes
Par défaut, le mode de livraison des messages est défini sur synchrone.
// NewBeverages is the name of the topic created beforehand
string topicName = "NewBeverages";
// Get the topic
ITopic topic = cache.MessagingService.GetTopic(topicName);
// If topic exists, Create subscription
if (topic != null)
{
// Create and register subscribers for Order topic
// Message received callback is specified
// DeliveryMode is set to async
ITopicSubscription subscription = topic.CreateSubscription(MessageReceived, DeliveryMode.Async);
}
// NewBeverages is the name of the topic created beforehand
String topicName = "NewBeverages";
// Get the topic
Topic topic = cache.getMessagingService().getTopic(topicName);
if (topic != null) {
// Create and register subscribers for Topic
// Message received callback is specified
// DeliveryMode is set to async
topic.createSubscription(new PubSubMessageReceivedListener(),DeliveryMode.Async);
} else {
System.out.println("Topic does not exist.");
}
// This is an async method
// Topic "NewBeverages" already exists in the cache
let topicName = "NewBeverages";
// Get the topic
let orderTopic = await ncache.getMessagingService().getTopic(topicName);
if (orderTopic != null) {
// Create and register subscribers for orderTopic
// Message received callback is specified
let orderSubscriber = await orderTopic.createSubscription(ncache.onMessageReceived(), ncache.DeliveryMode.Sync);
// Topics can also be unsubscribed
orderSubscriber.unSubscribe();
}
else {
// No topic exists
}
# Topic "NewBeverages" already exists in the cache
topic_name = "NewBeverages"
# Get the topic
order_topic = cache.get_messaging_service().get_topic(topic_name)
if order_topic is not None:
# Create and register subscribers for orderTopic
# Message received callback is specified
order_subscriber = order_topic.create_subscription(on_message_received, ncache.DeliveryMode.SYNC)
else:
# No topic exists
print("Topic not found")
Notes
Vous pouvez également vous désinscrire d'un sujet.
Ressources additionnelles
NCache fournit un exemple d'application pour Pub/Sub sur GitHub.
Voir aussi
.RAPPORTER: Alachisoft.NCache.Runtime.Caching espace de noms.
Java: com.alachisoft.ncache.runtime.caching espace de noms.
Node.js : Classe d'abonnement à un sujet classe.
python: ncache.services clients classe.