方法:Azure In-Role Cache からの通知の受信

更新日: 2015年8月

Important重要
新しいすべての開発で Azure Redis Cache を使用することをお勧めします。Azure Cache サービスに関する現在のドキュメントとガイダンスについては、「Redis 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. DataCacheNotificationDescriptor オブジェクトにコールバックの追加メソッドをセットします。このオブジェクトをプログラムの任意の場所で使用して、キャッシュ通知コールバックを削除できます。

キャッシュ通知を登録する最初の手順として、通知によって呼び出すメソッドを作成します。通知によって呼び出すメソッドは、DataCacheNotificationCallback がデリゲートするパラメーターと同じパラメーターを受け入れる必要があります。次に、キャッシュ通知によって呼び出すことができるメソッドの一例を示します。


//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 メソッドを使用します。

noteメモ
この方法は、運用アプリケーションではお勧めしません。この例は、デモのためにのみ作成されています。


//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
DataCacheNotificationDescriptor ndRegionCreateRegOp
    = myTestCache.AddRegionLevelCallback("TestRegion",
    DataCacheOperations.CreateRegion, myRegionLvlAddDelegate);

次に、TestKey キーを使用してオブジェクトをキャッシュに追加したとき、またはオブジェクトを置換したときにのみトリガーされるアイテムレベル通知スコープを使用して、キャッシュ操作のためのコールバックを追加する例を示します。

noteメモ
AddItemReplaceItem、および RemoveItem のアイテム操作のみが、アイテムレベルのコールバックを使用してキャッシュ通知をトリガーできます。アイテムレベルのコールバックを追加するときにフィルター パラメーターでリージョン操作を指定すると、例外が発生します。


//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
DataCache myTestCache;
DataCacheNotificationDescriptor ndCacheLvlAllOps;
DataCacheNotificationDescriptor ndRegionLvlAllOps;
DataCacheNotificationDescriptor ndItemLvlAllOps;

次に、RemoveCallback メソッドを使用して、前の例の 3 つの DataCacheNotificationDescriptor オブジェクトすべてに対応するコールバックを削除する例を示します。


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

表示: