Como: Receber notificações de um Cache na Função do Azure

Atualizado: agosto de 2015

ImportantImportante
A Microsoft recomenda que todos os novos desenvolvimentos usem Cache Redis do Azure. Para documentação atual e orientação sobre como escolher uma oferta de Cache do Azure, consulte Qual oferta de Cache do Azure é ideal para mim?

Este tópico descreve como adicionar um retorno de chamada de notificação de cache que permitirá ao seu aplicativo receber notificações de cache.

A adição de um retorno de chamada de notificação de cache requer duas etapas. Primeiro, crie um método que deverá ser invocado quando uma notificação de cache for disparada por uma ou mais operações de cache. O método invocado com as notificações de cache deverá aceitar os mesmos parâmetros do delegado DataCacheNotificationCallback. A seguir, adicione um retorno de chamada usando um dos três métodos disponíveis no objeto DataCache:

Use o parâmetro filter para definir os tipos de operações de cache que deverão disparar notificações de cache. Use o nome do método criado na primeira etapa para o parâmetro clientDelegate.

  1. Crie o método que deverá ser disparado pela notificação de cache. Certifique-se de que o método aceita os mesmos parâmetros do delegado DataCacheNotificationCallback.

  2. Adicione um retorno de chamada. Use um dos três métodos disponíveis no objeto DataCache para definir o escopo de notificação: AddCacheLevelCallback, AddRegionLevelCallback ou AddItemLevelCallback.

    1. Use a enumeração DataCacheOperations no parâmetro filter para especificar quais tipos de operações de cache deverão disparar notificações. Selecione uma ou mais enumerações separando-as com o operador OR binário para executar um OR bit a bit. Para fazer isso, use o caractere | em C# e o operador Or em Visual Basic.

    2. Use o nome do método que deseja invocar quando essas notificações ocorrerem no parâmetro clientDelegate.

    3. Defina o método de adição de retorno de chamada como igual a um objeto DataCacheNotificationDescriptor, que poderá ser usado em outras partes do programa para remover o retorno de chamada de notificação de cache.

A primeira etapa do registro para notificações de cache é a criação de um método a ser invocado pela notificação. O método chamado pela notificação deverá aceitar os mesmos parâmetros do delegado DataCacheNotificationCallback. Este exemplo mostra um exemplo de um método que pode ser invocado por uma notificação de cache.


//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();
}

A segunda etapa é adicionar um retorno de chamada para uma ou mais operações de cache. Neste exemplo, uma notificação é criada para invocar o método do exemplo anterior. Apenas para fins de demonstração, essa notificação foi configurada para todas as operações de cache possíveis com um escopo de notificação em nível de cache.

Para definir mais de uma operação de cache, você pode usar o operador OR binário para atribuir mais de uma enumeração DataCacheOperations a uma variável DataCacheOperations que possa ser usada para o parâmetro de filtro. Para adicionar um retorno de chamada para operações de cache com um escopo de notificação em nível de cache, use o método AddCacheLevelCallback.

noteObservação
Não recomendamos fazer isso em um aplicativo de produção. Este exemplo é apenas para demonstração.


//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);

O próximo exemplo mostra como seria a adição de um retorno de chamada para uma operação de cache com um escopo de notificação em nível de região, para ser disparado apenas quando uma região chamada TestRegion for adicionada ao cache.


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

O próximo exemplo mostra como seria a adição de um retorno de chamada para operações de cache com um escopo de notificação em nível de item, a ser disparado apenas quando um objeto for adicionado ou substituído no cache usando a chave TestKey.

noteObservação
Somente as operações de item AddItem, ReplaceItem e RemoveItem podem disparar notificações de cache com retornos de chamada em nível de item. A especificação de operações de região no parâmetro de filtro ao adicionar um retorno de chamada em nível de item provocará uma exceção.


//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. Use o método RemoveCallback para remover o retorno de chamada de notificação de cache. Use o objeto DataCacheNotificationDescriptor adequado para o parâmetro nd. Use o NotificationDescriptor que você recebeu ao efetuar o registro de notificação para interromper o recebimento de notificações.

Neste exemplo, o cliente de cache e três objetos DataCacheNotificationDescriptor são declarados no nível de classe para que possam ser acessados por métodos que adicionam e removem retornos de chamada.


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

Este exemplo mostra um método que usa o método RemoveCallback para remover os retornos de chamada correspondentes a todos os três objetos DataCacheNotificationDescriptor do exemplo anterior.


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

Mostrar: