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 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 DEL
hapus .
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",
pattern = false)
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",
pattern = false)
String message,
final ExecutionContext context) {
context.getLogger().info(message);
}
}
Sampel ini mendengarkan pemberitahuan apa pun keyevent
untuk perintah DEL
hapus .
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",
pattern = false)
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",
"pattern": false,
"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",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "index.js"
}
Berikut adalah data pengikatan untuk mendengarkan keyevent
pemberitahuan untuk perintah DEL
hapus .
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"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",
"pattern": false,
"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",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
Berikut adalah data pengikatan untuk mendengarkan keyevent
pemberitahuan untuk perintah DEL
hapus .
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"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",
"pattern": false,
"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",
"pattern": false,
"name": "message",
"direction": "in"
}
],
"scriptFile": "__init__.py"
}
Berikut adalah data pengikatan untuk mendengarkan keyevent
pemberitahuan untuk perintah DEL
hapus .
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:del",
"pattern": false,
"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 | |
pattern |
Boolean untuk menunjukkan saluran yang diberikan menggunakan matematika pola. Jika pattern benar, maka saluran diperlakukan seperti pola gaya glob alih-alih sebagai harfiah. |
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. RedisPubSubTrigger
Berlangganan 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
ataukeyevent
pemberitahuan melaluiRedisPubSubTrigger
. 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
, , DEL
dan 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"
}