Notifier l'utilisation et l'implémentation des dépendances extensibles
Notes
Cette fonctionnalité n'est disponible que dans le NCache Enterprise en Serveurs .NET.
En plus des Dépendance extensible en masse, NCache fournit une autre méthode pour la dépendance du cache appelée Notification Based Extensible Dependency ou Notify Extensible Dependency. Dans Notify Extensible Dependency, le côté client est responsable du déploiement d'un fournisseur qui contient la logique derrière la dépendance et du moment où appeler cette dépendance. Le serveur appelle ensuite le cache pour les méthodes liées aux dépendances en tenant compte de la logique fournie par le client. Le cache vérifie les éléments sous Notify Extensible Dependency et s'ils doivent être supprimés ou non.
Dans la dépendance extensible basée sur les notifications, les clients ont tout le contrôle sur quand et comment appeler une dépendance sur un élément. De cette manière, les éléments peuvent expirer du cache de manière extrêmement flexible.
NCache fournit une classe abstraite NotifyExtensibleDependency
, une extension des dépendances personnalisées fournies par NCache, qui implémente ce comportement.
Conseil
Reportez-vous à Dépendances de cache personnalisées pour se familiariser avec toutes les méthodes personnalisées de dépendance de cache fournies par NCache.
Pré-requis
- Pour en savoir plus sur les prérequis standard requis pour travailler avec tous NCache fonctionnalités côté serveur, veuillez vous référer à la page donnée sur Prérequis de l'API côté serveur.
- Le projet doit être implémenté en tant que bibliothèque de classes (.dll) dans Visual Studio. Celle-ci sera déployée sur NCache .
- Assurez-vous de Déployer des fournisseurs de dépendance personnalisés utilisant l' NCache Centre de gestion.
- La
NotifyExtensibleDependency
la classe doit être déployé sur le cache - Pour plus de détails sur l'API, reportez-vous à : ICache, CacheItem, Ajouter, insérer, Effacer, Dépendance personnalisée, Créer une dépendance, ICustomDependencyProvider, NotifyExtensibleDependency, DependencyChangedHandler.
Notes
Pour obtenir des informations détaillées sur les méthodes mises en œuvre dans NotifyExtensibleDependency
, se référer au Méthodologie .
Étape 1 : Implémenter la classe NotifyExtensibleDependency
La première étape de l'introduction de votre propre logique pour Notify Extensible Dependency consiste à hériter de la NotifyExtensibleDependency
classe.
Supposons que vous souhaitiez ajouter des clients à votre base de données Cosmos avec votre propre logique de dépendance. Voici comment implémenter la dépendance extensible de notification avec Cosmos DB dans votre application.
[Serializable]
public class NotificationDependency<T> : NotifyExtensibleDependency
{
// Class parameters
public NotificationDependency(/* */)
{
// Assign values to class members
}
public override bool Initialize()
{
// Register dependency against key
RegisterDependency(_key, this);
return true;
}
public bool RegisterDependency(string key, NotifyExtensibleDependency dependency)
{
lock (this)
{
// Your logic here
dependencies.Add(key, dependency);
}
return true;
}
public void OnFeedChange(params object[] args)
{
// Find the matching dependency and fire its DependencyChangedEvent
var key = args[0];
var notifyExtensibleDep = (dependencies[key] as NotifyExtensibleDependency);
notifyExtensibleDep?.DependencyChanged.Invoke(this);
// Remove the matched keys from cache
lock (dependencies)
{
dependencies.Remove(key);
}
}
protected override void DependencyDispose()
{
// Dispose off resources
}
// This class is to be deployed on NCache
}
Étape 2 : Implémenter NotifyCustomDependencyProvider
Pour implémenter le fournisseur Notify Extensible Dependency dans votre application, utilisez l'extrait de code suivant.
public class NotifyCustomDependencyProvider : ICustomDependencyProvider
{
private string cacheName;
private string monitoredUri;
private string authKey;
private string databaseName;
public void Init(IDictionary<string, string> parameters, string cacheName)
{
// Initialize cache and class parameters
}
public NotificationDependency CreateDependency(string key, IDictionary<string, string> dependencyParameters)
{
string customerId="";
string monitoredCollection = "";
string leaseCollection = "";
if (dependencyParameters != null)
{
if (dependencyParameters.ContainsKey("Key"))
customerId = dependencyParameters["Key"];
if (dependencyParameters.ContainsKey("MonitoredCollectionName"))
monitoredCollection = dependencyParameters["MonitoredCollectionName"];
if (dependencyParameters.ContainsKey("LeaseCollectionName"))
leaseCollection = dependencyParameters["LeaseCollectionName"];
// Create notify extensible dependency
NotificationDependency<Customer> cosmosDbDependency = new NotificationDependency<Customer>(customerId,
monitoredUri, authKey, databaseName, monitoredCollection, databaseName, leaseCollection);
return cosmosDbDependency;
}
else
{
// Dependency parameters not found
}
}
public void Dispose ()
{
// Dispose off all resources
}
}
Étape 3 : Déployer l'implémentation sur le cache
Déployez cette classe et tous les autres assemblys dépendants sur NCache en se référant à Déployer des fournisseurs dans le Guide de l'administrateur pour obtenir de l'aide.
Étape 4 : Utiliser la dépendance extensible de notification
Une fois la dépendance extensible basée sur les notifications implémentée et déployée sur le cache, elle est prête à être utilisée dans votre application. Le code suivant montre comment ajouter des données à l'aide du insérer méthode avec dépendance personnalisée basée sur les notifications.
Notes
En cas de cache client, l'utilisateur doit déployer explicitement ces assemblages sur le cache client.
// Specify the connection credentials
string endPoint = ConfigurationManager.AppSettings["EndPoint"];
string authKey = ConfigurationManager.AppSettings["AuthKey"];
string monitoredCollection = ConfigurationManager.AppSettings["MonitoredCollection"];
string leaseCollection = ConfigurationManager.AppSettings["LeaseCollection"];
string databaseName = ConfigurationManager.AppSettings["DatabaseName"];
string providerName = ConfigurationManager.AppSettings["ProviderName"];
// Fetch a sample customer from the database
Customer customer = LoadCustomerFromDatabase(customerId);
// Specify the unique key of the item
string key = "Customer#" + customer.Id ;
// Create dictionary for dependency parameters
IDictionary<string, string> param = new Dictionary<string, string>();
param.Add("CustomerID", customer.Id);
param.Add("EndPOint", endPoint);
param.Add("AuthKey", authKey);
param.Add("MonitoredCollection", monitoredCollection);
param.Add("LeaseCollection", leaseCollection);
param.Add("DatabaseName", databaseName);
//Creating notification dependency
CustomDependency cosmosDbDependency = new CustomDependency(providerName, param);
// Create a cacheItem
var cacheItem = new CacheItem(customer);
cacheItem.Dependency = cosmosDbDependency;
// Add cacheItem to the cache with notification dependency
cache.Insert(key, cacheItem);
Méthodologie
Initialiser()
Chaque fois qu'un élément est ajouté au cache, le Initialize
La méthode est appelée pour vérifier si le cache dispose ou non d'une connexion sécurisée avec la source de données. Si cette méthode renvoie vrai, cela signifie que le cache peut établir une connexion sécurisée avec la source de données. Il place ensuite l'élément dans le magasin clé-valeur et dans la liste des dépendances du cache jusqu'à ce qu'il doive être supprimé.
Mais, si cette méthode renvoie false, cela montre que la source de données requise pour accéder et surveiller les données n'est pas disponible dans le cache, par conséquent, cet élément est supprimé du cache. La méthode initialize est disponible pour toutes les dépendances extensibles.
DépendanceChanged()
Une fois qu'un élément a été placé avec succès dans le cache, il est nécessaire de savoir comment invoquer une dépendance sur celui-ci. Pour cette raison, un délégué DependencyChanged
est utilisé. Un gestionnaire de ce délégué est déployé sur le cache. Le client peut contrôler quand appeler ce délégué et invoquer la dépendance sur un élément. Chaque fois que ce délégué est appelé, il supprime l'élément pour lequel il a été appelé du cache.
Ressources additionnelles
NCache fournit un exemple d'application pour la dépendance extensible de notification sur GitHub.
Voir aussi
.RAPPORTER: Alachisoft.NCache.Dépendances.d'exécution espace de noms.