Share via


方法: Azure In-Role キャッシュから通知を受信する

重要

Microsoft では、すべての新しい開発で Azure Redis Cache を使用することをお勧めします。 Azure Cache オファリングの選択に関する最新のドキュメントとガイダンスについては、「自分に適した Azure Cache オファリング」を参照してください。

このトピックでは、アプリケーションでキャッシュ通知を受け取ることができるキャッシュ通知コールバックを追加する方法を説明します。

キャッシュ通知コールバックを追加するには、2 つの手順が必要です。 最初に、1 つ以上のキャッシュ操作によってキャッシュ通知がトリガーされると呼び出されるメソッドを作成します。 キャッシュ通知で呼び出すメソッドは、 DataCacheNotificationCallback デリゲートと同じパラメーターを受け取る必要があります。 次に、 DataCache オブジェクトから使用可能な 3 つのメソッドのいずれかを使用してコールバックを追加します。

filter パラメーターを使用して、キャッシュ通知をトリガーするキャッシュ操作の種類を定義します。 clientDelegate パラメーターには、最初の手順で作成したメソッドの名前を使用します。

キャッシュ操作に対するコールバックを追加するには

  1. キャッシュ通知によってトリガーされるメソッドを作成します。 DataCacheNotificationCallback 委任と同じパラメーターをメソッドが受け取るようにします。

  2. コールバックを追加します。 DataCache オブジェクトから使用可能な 3 つのメソッドのいずれかを使用して、通知スコープ (AddCacheLevelCallbackAddRegionLevelCallback、または AddItemLevelCallback) を定義します。

    1. 通知をトリガーするキャッシュ操作の種類をfilter指定するには、パラメーターで DataCacheOperations 列挙体を使用します。 ビット単位の OR を実行するバイナリ OR 演算子で列挙値を区切ることによって、複数の列挙値を選択します。 そのためには、C# では文字 |、Visual Basic では Or 演算子を使用します。

    2. clientDelegate パラメーターでは、これらの通知が発生したときに呼び出すメソッドの名前を使用します。

    3. Add コールバック メソッドを 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();
}

2 つ目の手順は、1 つまたは複数のキャッシュ操作のためにコールバックを追加することです。 この例では、通知を作成して、前の例のメソッドを呼び出しています。 この例はデモのためにのみ作成されており、キャッシュレベル通知スコープを使用して、すべてのキャッシュ操作を対象に通知が構成されています。

複数のキャッシュ操作を定義するには、バイナリの 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 キーを使用してオブジェクトをキャッシュに追加したとき、またはオブジェクトを置換したときにのみトリガーされるアイテムレベル通知スコープを使用して、キャッシュ操作のためのコールバックを追加する例を示します。

注意

AddItemReplaceItem、および 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 メソッドを使用します。 nd パラメーターに適切な DataCacheNotificationDescriptor オブジェクトを使用します。 通知のために登録したときに受け取った NotificationDescriptor を使用して、通知の受け取りを停止します。

この例では、キャッシュ クライアントと 3 つの 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 メソッドを使用して、前の例の 3 つの 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);
}