Abonnieren Sie ein Thema
Ein Abonnent (oder eine Clientanwendung) kann sich über ein Abonnement für ein bestimmtes Thema registrieren. Also, NCache bietet mehrere Arten von Pub/Sub-Themenabonnements.
Voraussetzungen:
- Lernen Sie die Standardvoraussetzungen kennen, die für die Arbeit mit allen erforderlich sind NCache Clientseitige Funktionen finden Sie auf der angegebenen Seite Clientseitige API-Voraussetzungen.
- Einzelheiten zur API finden Sie unter: ICache, CacheItem, IThema, IDurableTopicSubscription, Abonnement erstellen, CreateDurableSubscription,Themenname, Abonnementname, IMessagingService, GetThema, Abonnementrichtlinie, Abmelden, MessageEventArgs, Liefermodus, ThemenSuchoptionen, ITopicSubscription, Senden der nachricht fehlgeschlagen, Nutzlast.
- Lernen Sie die Standardvoraussetzungen kennen, die für die Arbeit mit allen erforderlich sind NCache Clientseitige Funktionen finden Sie auf der angegebenen Seite Clientseitige API-Voraussetzungen.
- Einzelheiten zur API finden Sie unter: Cache-Speicher, CacheItem, Betreff, ThemaAbonnement, getMessagingService, getThema, createDurableSubscription, Abonnementrichtlinie, Zeitspanne, Abmelden, MessageReceivedListener, onMessageReceived, MessageEventArgs, getMessage, Nutzlast abrufen, Abonnement erstellen, Liefermodus, ThemenSuchoptionen, addMessageDeliveryFailureListener.
- Lernen Sie die Standardvoraussetzungen kennen, die für die Arbeit mit allen erforderlich sind NCache Clientseitige Funktionen finden Sie auf der angegebenen Seite Clientseitige API-Voraussetzungen.
- Einzelheiten zur API finden Sie unter: Cache-Speicher, CacheItem, ThemaAbonnement, getMessagingService, getThema, createDurableSubscription, Abonnementrichtlinie, Zeitspanne, Abmelden, MessageEventArgs, MessageReceivedListener, getMessage, Nutzlast abrufen, Abonnement erstellen, Liefermodus, ThemenSuchoptionen, TopicListener, addMessageDeliveryFailureListener.
- Lernen Sie die Standardvoraussetzungen kennen, die für die Arbeit mit allen erforderlich sind NCache Clientseitige Funktionen finden Sie auf der angegebenen Seite Clientseitige API-Voraussetzungen.
- Einzelheiten zur API finden Sie unter: Cache-Speicher, CacheItem, get_topic, get_messaging_service, create_durable_subscription, get_payload, Zeitspanne, MessageEventArgs, get_message, create_subscription, Abmelden, add_message_delivery_failure_listener.
Methoden zum Erstellen eines Abonnements
Hier beschreiben wir, wie Sie ein nicht dauerhaftes Abonnement, ein dauerhaftes Abonnement, mehrere Abonnements und ein asynchrones Abonnement erstellen können.
Nicht dauerhafte Abonnements
Note
Diese Funktion ist auch in verfügbar NCache Professional.
Das ITopic
/Topic
Schnittstelle erleichtert das Erstellen nicht dauerhaftes Abonnement und Veröffentlichung von Nachrichten zum Thema. Die Methode „Abonnement erstellen“ registriert ein nicht dauerhaftes Abonnement für ein Thema, sofern das Thema vorhanden ist. Es ermöglicht dem Abonnenten, sich zu registrieren MessageReceivedCallback
gegen das Thema, damit es die veröffentlichten Nachrichten empfangen kann.
Das folgende Codebeispiel bewirkt Folgendes:
- Holen Sie sich ein vorhandenes Thema von Interesse, dh
NewBeverages
.
- Abonnement für jedes Thema erstellen.
- Registrieren Sie Ereignisse für Abonnenten, um Nachrichten zu erhalten, sobald sie zum Thema veröffentlicht wurden.
// 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")
Note
Um sicherzustellen, dass der Vorgang ausfallsicher ist, wird empfohlen, alle potenziellen Ausnahmen in Ihrer Anwendung zu behandeln, wie in erläutert Umgang mit Fehlern.
Dauerhafte Abonnements
Note
Diese Funktion ist auch in verfügbar NCache Professional.
Das IDurableTopicSubscription
Schnittstelle erleichtert das Erstellen dauerhafte Abonnements und Veröffentlichen von Nachrichten zu dem Thema, falls vorhanden. Es ermöglicht dem Abonnenten, eine zu registrieren MessageReceivedCallback
gegen das Thema, damit es die veröffentlichten Nachrichten empfangen kann.
Geteilte dauerhafte Abonnements
Der folgende Code veranschaulicht die gemeinsame Abonnementrichtlinie.
// 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));
Exklusive dauerhafte Abonnements
Der folgende Code demonstriert die exklusive Abonnementrichtlinie.
// 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))
Mehrere Abonnements
Mit dieser Abonnementmethode können Abonnenten Muster bereitstellen, um mit einem einzigen Anruf mehrere Themen zu abonnieren. Hierzu ist es wichtig, dass die zum Muster passenden Themen bereits auf dem Server vorhanden sind. Sobald die Abonnements erfolgreich für das musterbasierte Thema erstellt wurden, erhalten die Abonnenten Nachrichten, die zu Themen veröffentlicht wurden, die dem Muster entsprechen. Wenn ein Thema erstellt wird, nachdem das musterbasierte Abonnement für das Muster registriert wurde, wird der Abonnent außerdem für dieses Thema registriert.
Ähnlich verhält es sich mit der Aufhebung der Registrierung für ein Thema: Diese Methode meldet den Abonnenten für alle passenden Themen mit dem bereitgestellten Muster ab, ohne dass sich dies auf andere Abonnements auswirkt, die diesen Aufruf verwenden.
Note
- Ein Abonnent kann nur ein musterbasiertes Thema erhalten und darf es nicht erstellen.
- Ein Muster kann vom Herausgeber nur zum Empfangen von Fehlerbenachrichtigungen verwendet werden.
Unterstützte Platzhalter
Die musterbasierte Abonnementmethode unterstützt die folgenden drei Platzhalter:
*
: null oder viele Zeichen. Zum Beispiel, bl*
abonniert Schwarz, Blau und Unschärfe usw.
?
: ein beliebiges Zeichen. Zum Beispiel, h?t
abonniert hit, hot and hat usw.
[]
: Zeichenbereich. Zum Beispiel, b[ae]t
abonniert Wetten und Fledermäuse, aber nicht etwas.
Erstellen eines Abonnements mit Wildcard
Im folgenden Beispiel wird ein Abonnement erstellt, indem ein Muster bereitgestellt wird, auf dessen Grundlage das Thema abonniert wird, das dem Muster entspricht.
// 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)
Asynchrone Abonnements
Der Übermittlungsmodus kann beim Erstellen von Abonnements für bestellte Nachrichten angegeben werden und kann sein sync
or async
. Im folgenden Beispiel wird ein Abonnement mit erstellt CreateSubscription
Methode mit Synchronisierungsbereitstellungsmodus. Es wird empfohlen zu verwenden sync
Modus für geordnete Nachrichten und async
Modus andernfalls, um eine hohe Leistung zu erzielen.
Beim Erstellen eines Abonnements können Sie den Übermittlungsmodus angeben, der synchron oder asynchron sein kann. Insbesondere kann dafür ein synchroner Liefermodus verwendet werden geordnete Nachrichten, während der asynchrone Modus die Leistung verbessert, wenn Sie keine geordneten Nachrichten verwenden.
Note
Standardmäßig ist der Übermittlungsmodus von Nachrichten auf synchron eingestellt.
// 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")
Note
Sie können sich auch von einem Thema abmelden.
Weitere Informationen
NCache stellt eine Beispielanwendung für Pub/Sub bereit GitHub.
Siehe auch
.NETZ: Alachisoft.NCache.Runtime.Caching Namespace.
Java: com.alachisoft.ncache.runtime.caching Namespace.
Node.js: TopicSubscription-Klasse Klasse.
Python: ncache.Kundenservice Klasse.