Поделиться через


Практическое руководство. Получение уведомлений из кэша In-Role Azure

Важно!

Корпорация Майкрософт рекомендует все новые разработки использовать кэш Redis для Azure. Текущая документация и рекомендации по выбору предложения кэша Azure см. в статье о том, какое предложение кэша Azure подходит для меня?

Данная тема описывает порядок добавления обратного вызова уведомления кэша, который позволит вашему приложению получать уведомления кэша.

Добавление обратного вызова уведомления кэша осуществляется в два шага. Во-первых, создайте метод, который должен быть запущен, когда уведомление кэша инициируется одной или более операциями кэша. Метод, вызываемый с уведомлениями кэша, должен принимать те же параметры, что и делегат DataCacheNotificationCallback . Во-вторых, добавьте обратный вызов с помощью одного из трех доступных методов из объекта DataCache :

Используйте параметр filter для определения типов операций кэша, которые будут запускать уведомления кэша. Используйте имя метода, который вы создали на первом шаге, для параметра clientDelegate.

Добавление обратного вызова одной или более операции кэша

  1. Создайте метод, который будет запускаться уведомлением кэша. Убедитесь, что метод принимает те же параметры, что и делегат DataCacheNotificationCallback.

  2. Добавьте обратный вызов Используйте один из трех доступных методов объекта DataCache для определения области уведомлений: AddCacheLevelCallback, AddRegionLevelCallback или AddItemLevelCallback.

    1. Используйте перечисление DataCacheOperations в параметре filter , чтобы указать тип операций кэша, которые требуется активировать уведомления. Можно задать несколько значений, разделив их двоичным оператором OR для побитового выполнения OR. Чтобы сделать это, используйте символ | в C# или оператор Or в Visual Basic.

    2. Используйте имя метода, который вы хотите запустить, когда появятся эти уведомления, в параметре clientDelegate.

    3. Задайте метод обратного вызова добавления, равный объекту DataCacheNotificationDescriptor , который можно использовать в другом месте программы для удаления обратного вызова уведомления кэша.

Пример

Первым шагом при регистрации уведомлений кэша является создание метода, который будет запускаться уведомлением. Метод, вызываемый уведомлением, должен принимать те же параметры, что и делегат DataCacheNotificationCallback. Данный пример демонстрирует один метод, который может быть запущен уведомлением кэша.

'method invoked by notification "ndCacheLvlAllOps" 
Public Sub myCacheLvlDelegate(ByVal myCacheName As String, _
    ByVal myRegion As String, _
    ByVal myKey As String, _
    ByVal itemVersion As DataCacheItemVersion, _
    ByVal OperationId As DataCacheOperations, _
    ByVal nd As DataCacheNotificationDescriptor)

    'display some of the delegate parameters
    Console.WriteLine("A cache-level notification was triggered!")
    Console.WriteLine("    Cache: " + myCacheName)
    Console.WriteLine("    Region: " + myRegion)
    Console.WriteLine("    Key: " + myKey)
    Console.WriteLine("    Operation: " + OperationId.ToString())
    Console.WriteLine()
End Sub
//method invoked by notification "ndCacheLvlAllOps" 
public void myCacheLvlDelegate(string myCacheName,
    string myRegion, 
    string myKey, 
    DataCacheItemVersion itemVersion,
    DataCacheOperations OperationId, 
    DataCacheNotificationDescriptor nd)
{
    //display some of the delegate parameters
    Console.WriteLine("A cache-level notification was triggered!");
    Console.WriteLine("    Cache: " + myCacheName);
    Console.WriteLine("    Region: " + myRegion);
    Console.WriteLine("    Key: " + myKey);
    Console.WriteLine("    Operation: " + OperationId.ToString());
    Console.WriteLine();
}

Вторым шагом является добавление обратного вызова одной или более операции кэша. В данном примере уведомление создается для запуска метода из предыдущего примера. Исключительно для демонстрационных целей данное уведомление было настроено для всех возможных операций кэша с областью уведомления на уровне кэша.

Для определения более чем одной операции кэша вы можете использовать двоичный оператор OR для назначения более одного перечисления DataCacheOperations переменной DataCacheOperations, которая может быть использована для параметра фильтра. Для добавления обратного вызова для операций кэша с областью уведомления на уровне кэша используйте метод AddCacheLevelCallback.

Примечание

Мы не рекомендуем вам делать это в рабочем приложении. Данный пример приведен исключительно для демонстрационных целей.

'specify all possible item and region operations
Dim allCacheOperations As DataCacheOperations
allCacheOperations = DataCacheOperations.AddItem Or _
    DataCacheOperations.ReplaceItem Or _
    DataCacheOperations.RemoveItem Or _
    DataCacheOperations.CreateRegion Or _
    DataCacheOperations.ClearRegion Or _
    DataCacheOperations.RemoveRegion

'add cache-level notification callback 
'all cache operations from a notifications-enabled cache
Dim ndCacheLvlAllOps as DataCacheNotificationDescriptor = _
    myTestCache.AddCacheLevelCallback(allCacheOperations, AddressOf myCacheLvlDelegate)
//specify all possible item and region operations
DataCacheOperations allCacheOperations = DataCacheOperations.AddItem |
    DataCacheOperations.ReplaceItem |
    DataCacheOperations.RemoveItem |
    DataCacheOperations.CreateRegion |
    DataCacheOperations.ClearRegion |
    DataCacheOperations.RemoveRegion;

//add cache-level notification callback 
//all cache operations from a notifications-enabled cache
DataCacheNotificationDescriptor ndCacheLvlAllOps
    = myTestCache.AddCacheLevelCallback(allCacheOperations, myCacheLvlDelegate);

Следующий пример демонстрирует, как выглядит добавление обратного вызова для операции кэша с областью уведомления на уровне области, который запускается, только когда область с именем TestRegion добавляется в кэш.

'add region-level notification callback for region "TestRegion"
'trigger notification with CreateRegion operation
Dim ndRegionCreateRegOp As DataCacheNotificationDescriptor
ndRegionCreateRegOp = _
    myTestCache.AddRegionLevelCallback("TestRegion", _
    DataCacheOperations.CreateRegion, AddressOf myRegionLvlAddDelegate)
//add region-level notification callback for region "TestRegion"
//trigger notification with CreateRegion operation
DataCacheNotificationDescriptor ndRegionCreateRegOp
    = myTestCache.AddRegionLevelCallback("TestRegion",
    DataCacheOperations.CreateRegion, myRegionLvlAddDelegate);

Следующий пример демонстрирует, как выглядит добавление обратного вызова для операций кэша с областью уведомления на уровне элемента, который запускается только когда объект добавляется или заменяется в кэше с использованием ключа TestKey.

Примечание

Только операции элементов AddItem, ReplaceItem, и RemoveItem могут запускать уведомления кэша с обратными вызовами на уровне элемента. Указание операций области в параметре фильтра при добавлении обратного вызова на уровне элемента вызовет исключение.

'add item-level notification callback for item "TestKey"
'trigger notification with AddItem and ReplaceItem operations
Dim ndItemUpdateOps As DataCacheNotificationDescriptor
ndItemUpdateOps = _
    myTestCache.AddItemLevelCallback("TestKey", _
    (DataCacheOperations.AddItem Or DataCacheOperations.ReplaceItem), _
    AddressOf myItemLvlUpdateDelegate)
//add item-level notification callback for item "TestKey"
//trigger notification with AddItem and ReplaceItem operations
DataCacheNotificationDescriptor ndItemUpdateOps
    = myTestCache.AddItemLevelCallback("TestKey",
        (DataCacheOperations.AddItem | DataCacheOperations.ReplaceItem),
        myItemLvlUpdateDelegate);

Удаление обратного вызова уведомления кэша

  1. Используйте метод RemoveCallback , чтобы удалить обратный вызов уведомления кэша. Используйте соответствующий объект DataCacheNotificationDescriptor для параметра nd. Используйте NotificationDescriptor, который вы получаете при регистрации уведомления, для прекращения получения уведомлений.

Пример

В этом примере клиент кэша и три объекта DataCacheNotificationDescriptor объявляются на уровне класса, чтобы доступ к ним можно было получить с помощью методов, которые добавляют и удаляют обратные вызовы.

'define variables for class
Dim myTestCache As DataCache
Dim ndCacheLvlAllOps As DataCacheNotificationDescriptor
Dim ndRegionLvlAllOps As DataCacheNotificationDescriptor
Dim ndItemLvlAllOps As DataCacheNotificationDescriptor
//define variables for class
DataCache myTestCache;
DataCacheNotificationDescriptor ndCacheLvlAllOps;
DataCacheNotificationDescriptor ndRegionLvlAllOps;
DataCacheNotificationDescriptor ndItemLvlAllOps;

В этом примере показан метод, использующий метод RemoveCallback для удаления обратных вызовов, соответствующих всем трем объектам DataCacheNotificationDescriptor из предыдущего примера.

'remove cache notification callbacks
Public Sub RemoveNotificationCallbacks()
    myTestCache.RemoveCallback(ndCacheLvlAllOps)
    myTestCache.RemoveCallback(ndRegionLvlAllOps)
    myTestCache.RemoveCallback(ndItemLvlAllOps)
End Sub
//remove cache notification callbacks
public void RemoveNotificationCallbacks()
{
    myTestCache.RemoveCallback(ndCacheLvlAllOps);
    myTestCache.RemoveCallback(ndRegionLvlAllOps);
    myTestCache.RemoveCallback(ndItemLvlAllOps);
}