Bagikan melalui


RedisPubSubTrigger untuk Azure Functions

Fitur Redis menerbitkan/berlangganan fungsionalitas yang memungkinkan pesan dikirim ke Redis dan disiarkan kepada pelanggan.

Untuk informasi selengkapnya tentang pemicu dan pengikatan Azure Cache for Redis, Ekstensi Redis untuk Azure Functions.

Cakupan ketersediaan untuk pemicu fungsi

Tingkat Dasar Standar, Premium Enterprise, Enterprise Flash
Pemicu Pub/Sub Ya Ya Ya

Peringatan

Pemicu ini tidak didukung pada paket konsumsi karena Redis PubSub mengharuskan klien untuk selalu aktif mendengarkan untuk menerima semua pesan. Untuk paket konsumsi, fungsi Anda mungkin melewatkan pesan tertentu yang diterbitkan ke saluran.

Penting

Model Node.js v4 untuk Functions belum didukung oleh ekstensi Azure Cache for Redis. Untuk detail selengkapnya tentang cara kerja model v4, lihat panduan pengembang Node.js Azure Functions. Untuk mempelajari selengkapnya tentang perbedaan antara v3 dan v4, lihat panduan migrasi.

Penting

Model Python v2 untuk Functions belum didukung oleh ekstensi Azure Cache for Redis. Untuk detail selengkapnya tentang cara kerja model v2, lihat panduan pengembang Azure Functions Python.

Contoh

Model eksekusi Deskripsi
Model pekerja terisolasi Kode fungsi Anda berjalan dalam proses pekerja .NET terpisah. Gunakan dengan versi .NET dan .NET Framework yang didukung. Untuk mempelajari lebih lanjut, lihat Mengembangkan fungsi proses pekerja terisolasi .NET.
Model dalam proses Kode fungsi Anda berjalan dalam proses yang sama dengan proses host Azure Functions. Hanya mendukung versi Dukungan Jangka Panjang (LTS) .NET. Untuk mempelajari lebih lanjut, lihat Mengembangkan fungsi pustaka kelas .NET.

Penting

Untuk fungsi .NET, menggunakan model pekerja terisolasi direkomendasikan melalui model dalam proses . Untuk perbandingan model pekerja dalam proses dan terisolasi, lihat perbedaan antara model pekerja yang terisolasi dan model dalam proses untuk .NET di Azure Functions.

Sampel ini mendengarkan saluran pubsubTest.

using Microsoft.Extensions.Logging;

namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisPubSubTrigger
{
    internal class SimplePubSubTrigger
    {
        private readonly ILogger<SimplePubSubTrigger> logger;

        public SimplePubSubTrigger(ILogger<SimplePubSubTrigger> logger)
        {
            this.logger = logger;
        }

        [Function(nameof(SimplePubSubTrigger))]
        public void Run(
            [RedisPubSubTrigger(Common.connectionStringSetting, "pubsubTest")] string message)
        {
            logger.LogInformation(message);
        }
    }
}

Sampel ini mendengarkan pemberitahuan keyspace apa pun untuk kunci keyspaceTest.

using Microsoft.Extensions.Logging;

namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisPubSubTrigger
{
    internal class KeyspaceTrigger
    {
        private readonly ILogger<KeyspaceTrigger> logger;

        public KeyspaceTrigger(ILogger<KeyspaceTrigger> logger)
        {
            this.logger = logger;
        }

        [Function(nameof(KeyspaceTrigger))]
        public void Run(
            [RedisPubSubTrigger(Common.connectionStringSetting, "__keyspace@0__:keyspaceTest")] string message)
        {
            logger.LogInformation(message);
        }
    }
}

Sampel ini mendengarkan pemberitahuan apa pun keyevent untuk perintah DELhapus .

using Microsoft.Extensions.Logging;

namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisPubSubTrigger
{
    internal class KeyeventTrigger
    {
        private readonly ILogger<KeyeventTrigger> logger;

        public KeyeventTrigger(ILogger<KeyeventTrigger> logger)
        {
            this.logger = logger;
        }

        [Function(nameof(KeyeventTrigger))]
        public void Run(
            [RedisPubSubTrigger(Common.connectionStringSetting, "__keyevent@0__:del")] string message)
        {
            logger.LogInformation($"Key '{message}' deleted.");
        }
    }
}

Sampel ini mendengarkan saluran pubsubTest.

package com.function.RedisPubSubTrigger;

import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;

public class SimplePubSubTrigger {
    @FunctionName("SimplePubSubTrigger")
    public void run(
            @RedisPubSubTrigger(
                name = "req",
                connection = "redisConnectionString",
                channel = "pubsubTest")
                String message,
            final ExecutionContext context) {
            context.getLogger().info(message);
    }
}

Sampel ini mendengarkan pemberitahuan keyspace apa pun untuk kunci myKey.

package com.function.RedisPubSubTrigger;

import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;

public class KeyspaceTrigger {
    @FunctionName("KeyspaceTrigger")
    public void run(
            @RedisPubSubTrigger(
                name = "req",
                connection = "redisConnectionString",
                channel = "__keyspace@0__:keyspaceTest")
                String message,
            final ExecutionContext context) {
            context.getLogger().info(message);
    }
}

Sampel ini mendengarkan pemberitahuan apa pun keyevent untuk perintah DELhapus .

package com.function.RedisPubSubTrigger;

import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;

public class KeyeventTrigger {
    @FunctionName("KeyeventTrigger")
    public void run(
            @RedisPubSubTrigger(
                name = "req",
                connection = "redisConnectionString",
                channel = "__keyevent@0__:del")
                String message,
            final ExecutionContext context) {
            context.getLogger().info(message);
    }
}

Sampel ini menggunakan file yang sama index.js , dengan mengikat data dalam function.json file yang menentukan saluran mana pemicu terjadi.

Berikut adalah filenya index.js :

module.exports = async function (context, message) {
    context.log(message);
}

Dari function.json:

Berikut adalah data pengikatan untuk mendengarkan saluran pubsubTest.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "pubsubTest",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "index.js"
}

Berikut adalah data pengikatan untuk mendengarkan pemberitahuan keyspace untuk kunci keyspaceTest.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyspace@0__:keyspaceTest",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "index.js"
}

Berikut adalah data pengikatan untuk mendengarkan keyevent pemberitahuan untuk perintah DELhapus .

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyevent@0__:del",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "index.js"
}

Sampel ini menggunakan file yang sama run.ps1 , dengan mengikat data dalam function.json file yang menentukan saluran mana pemicu terjadi.

Berikut adalah filenya run.ps1 :

param($message, $TriggerMetadata)
Write-Host $message

Dari function.json:

Berikut adalah data pengikatan untuk mendengarkan saluran pubsubTest.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "pubsubTest",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "run.ps1"
}

Berikut adalah data pengikatan untuk mendengarkan pemberitahuan keyspace untuk kunci keyspaceTest.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyspace@0__:keyspaceTest",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "run.ps1"
}

Berikut adalah data pengikatan untuk mendengarkan keyevent pemberitahuan untuk perintah DELhapus .

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyevent@0__:del",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "run.ps1"
}

Model pemrograman Python v1 mengharuskan Anda menentukan pengikatan dalam file function.json terpisah di folder fungsi. Untuk informasi selengkapnya, lihat panduan pengembang Python.

Sampel ini menggunakan file yang sama __init__.py , dengan mengikat data dalam function.json file yang menentukan saluran mana pemicu terjadi.

Berikut adalah filenya __init__.py :

import logging

def main(message: str):
    logging.info(message)

Dari function.json:

Berikut adalah data pengikatan untuk mendengarkan saluran pubsubTest.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "pubsubTest",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "__init__.py"
}

Berikut adalah data pengikatan untuk mendengarkan pemberitahuan keyspace untuk kunci keyspaceTest.

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyspace@0__:keyspaceTest",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "__init__.py"
}

Berikut adalah data pengikatan untuk mendengarkan keyevent pemberitahuan untuk perintah DELhapus .

{
  "bindings": [
    {
      "type": "redisPubSubTrigger",
      "connection": "redisConnectionString",
      "channel": "__keyevent@0__:del",
      "name": "message",
      "direction": "in"
    }
  ],
  "scriptFile": "__init__.py"
}

Atribut

Parameter Deskripsi Wajib diisi Default
Connection Nama pengaturan aplikasi yang berisi string koneksi cache, seperti:<cacheName>.redis.cache.windows.net:6380,password... Ya
Channel Sub saluran pub yang harus didengarkan pemicunya. Mendukung pola saluran gaya glob. Bidang ini dapat diselesaikan menggunakan INameResolver. Ya

Anotasi

Parameter Deskripsi Wajib diisi Default
name Nama variabel yang menyimpan nilai yang dikembalikan oleh fungsi . Ya
connection Nama pengaturan aplikasi yang berisi string koneksi cache, seperti:<cacheName>.redis.cache.windows.net:6380,password... Ya
channel Sub saluran pub yang harus didengarkan pemicunya. Mendukung pola saluran gaya glob. Ya

Konfigurasi

Properti function.json Deskripsi Wajib diisi Default
type Jenis pemicu. Untuk sub pemicu pub, jenisnya adalah redisPubSubTrigger. Ya
connection Nama pengaturan aplikasi yang berisi string koneksi cache, seperti:<cacheName>.redis.cache.windows.net:6380,password... Ya
channel Nama sub saluran pub yang sedang berlangganan Ya
name Nama variabel yang menyimpan nilai yang dikembalikan oleh fungsi . Ya
direction Harus diatur ke in. Ya

Penting

Parameter connection tidak menahan cache Redis string koneksi itu sendiri. Sebaliknya, menunjuk ke nama variabel lingkungan yang menyimpan string koneksi. Ini membuat aplikasi lebih aman. Untuk informasi selengkapnya, lihat Redis string koneksi.

Penggunaan

Fitur Redis menerbitkan/berlangganan fungsionalitas yang memungkinkan pesan dikirim ke Redis dan disiarkan kepada pelanggan. memungkinkan RedisPubSubTrigger Azure Functions dipicu pada aktivitas pub/sub. RedisPubSubTriggerBerlangganan pola saluran tertentu menggunakan PSUBSCRIBE, dan menampilkan pesan yang diterima pada saluran tersebut ke fungsi .

Prasyarat dan batasan

  • RedisPubSubTrigger tidak mampu mendengarkan pemberitahuan keyspace pada cache berkluster.
  • Fungsi tingkat dasar tidak mendukung pemicu pada keyspace atau keyevent pemberitahuan melalui RedisPubSubTrigger.
  • RedisPubSubTrigger tidak didukung pada paket konsumsi karena Redis PubSub mengharuskan klien untuk selalu aktif mendengarkan untuk menerima semua pesan. Untuk paket konsumsi, fungsi Anda mungkin melewatkan pesan tertentu yang diterbitkan ke saluran.
  • Fungsi dengan RedisPubSubTrigger tidak boleh diskalakan ke beberapa instans. Setiap instans mendengarkan dan memproses setiap sub pesan pub, menghasilkan pemrosesan duplikat.

Peringatan

Pemicu ini tidak didukung pada paket konsumsi karena Redis PubSub mengharuskan klien untuk selalu aktif mendengarkan untuk menerima semua pesan. Untuk paket konsumsi, fungsi Anda mungkin melewatkan pesan tertentu yang diterbitkan ke saluran.

Memicu pemberitahuan keyspace

Redis menawarkan konsep bawaan yang disebut pemberitahuan keyspace. Saat diaktifkan, fitur ini menerbitkan pemberitahuan berbagai tindakan cache ke saluran pub/sub khusus. Tindakan yang didukung mencakup tindakan yang memengaruhi kunci tertentu, yang disebut pemberitahuan keyspace, dan perintah tertentu, yang disebut pemberitahuan keyevent. Berbagai tindakan Redis didukung, seperti SET, , DELdan EXPIRE. Daftar lengkap dapat ditemukan dalam dokumentasi pemberitahuan keyspace.

Pemberitahuan keyspace dan keyevent diterbitkan dengan sintaks berikut:

PUBLISH __keyspace@0__:<affectedKey> <command>
PUBLISH __keyevent@0__:<affectedCommand> <key>

Karena peristiwa ini dipublikasikan di pub/sub saluran, RedisPubSubTrigger mampu mengambilnya. Lihat bagian RedisPubSubTrigger untuk contoh selengkapnya.

Penting

Di Azure Cache for Redis, keyspace peristiwa harus diaktifkan sebelum pemberitahuan diterbitkan. Untuk informasi selengkapnya, lihat Pengaturan Tingkat Lanjut.

Tipe Deskripsi
string Pesan saluran yang diserialisasikan sebagai JSON (UTF-8 dikodekan untuk jenis byte) dalam format berikut.
Custom Pemicu menggunakan serialisasi Json.NET untuk memetakan pesan dari saluran ke dalam jenis kustom yang diberikan.

Format string JSON

{
  "SubscriptionChannel":"__keyspace@0__:*",
  "Channel":"__keyspace@0__:mykey",
  "Message":"set"
}

Tipe Deskripsi
string Pesan saluran yang diserialisasikan sebagai JSON (UTF-8 dikodekan untuk jenis byte) dalam format berikut.
Custom Pemicu menggunakan serialisasi Json.NET untuk memetakan pesan dari saluran dari string ke dalam jenis kustom.
{
  "SubscriptionChannel":"__keyspace@0__:*",
  "Channel":"__keyspace@0__:mykey",
  "Message":"set"
}