Azure İşlevleri için Dapr Yayımlama çıkış bağlaması
Dapr yayımlama çıkış bağlaması, işlev yürütme sırasında bir Dapr konusuna ileti yayımlamanıza olanak tanır.
Dapr uzantısının kurulum ve yapılandırma ayrıntıları hakkında bilgi için bkz. Dapr uzantısına genel bakış.
Örnek
C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:
Yürütme modeli | Açıklama |
---|---|
Yalıtılmış çalışan modeli | İşlev kodunuz ayrı bir .NET çalışan işleminde çalışır. Desteklenen .NET ve .NET Framework sürümleriyle kullanın. Daha fazla bilgi edinmek için bkz . .NET yalıtılmış çalışan işlemi işlevleri geliştirme. |
İşlem içi model | İşlev kodunuz İşlevler konak işlemiyle aynı işlemde çalışır. .NET'in yalnızca Uzun Süreli Destek (LTS) sürümlerini destekler. Daha fazla bilgi edinmek için bkz . .NET sınıf kitaplığı işlevleri geliştirme. |
Aşağıdaki örnekte, bir pub/sub bileşeninde ve konu başlığında Dapr yayımlama işlemi gerçekleştirmek için Dapr yayımlama çıkış bağlaması kullanımı gösterilmektedir.
[FunctionName("PublishOutputBinding")]
public static void Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "topic/{topicName}")] HttpRequest req,
[DaprPublish(PubSubName = "%PubSubName%", Topic = "{topicName}")] out DaprPubSubEvent pubSubEvent,
ILogger log)
{
string requestBody = new StreamReader(req.Body).ReadToEnd();
pubSubEvent = new DaprPubSubEvent(requestBody);
}
Aşağıdaki örnek, ile bağlamasını DaprPublishOutput
kullanarak bir "TransferEventBetweenTopics"
DaprTopicTrigger
işlev oluşturur:
@FunctionName("TransferEventBetweenTopics")
public String run(
@DaprTopicTrigger(
pubSubName = "%PubSubName%",
topic = "A")
String request,
@DaprPublishOutput(
pubSubName = "%PubSubName%",
topic = "B")
OutputBinding<String> payload,
final ExecutionContext context) throws JsonProcessingException {
context.getLogger().info("Java function processed a TransferEventBetweenTopics request from the Dapr Runtime.");
}
Aşağıdaki örnekte, Dapr yayımlama çıkış bağlaması nesnesi tarafından kaydedilen bir HTTP tetikleyicisiyle app
eşleştirilir:
const { app, trigger } = require('@azure/functions');
app.generic('PublishOutputBinding', {
trigger: trigger.generic({
type: 'httpTrigger',
authLevel: 'anonymous',
methods: ['POST'],
route: "topic/{topicName}",
name: "req"
}),
return: daprPublishOutput,
handler: async (request, context) => {
context.log("Node HTTP trigger function processed a request.");
const payload = await request.text();
context.log(JSON.stringify(payload));
return { payload: payload };
}
});
Aşağıdaki örneklerde, function.json dosyasındaki Dapr tetikleyicileri ve bu bağlamaları kullanan PowerShell kodu gösterilmektedir.
için function.json dosyası aşağıdadır:daprPublish
{
"bindings":
{
"type": "daprPublish",
"direction": "out",
"name": "pubEvent",
"pubsubname": "%PubSubName%",
"topic": "B"
}
}
function.json dosya özellikleri hakkında daha fazla bilgi için Yapılandırma bölümüne bakın.
Kod:
using namespace System
using namespace Microsoft.Azure.WebJobs
using namespace Microsoft.Extensions.Logging
using namespace Microsoft.Azure.WebJobs.Extensions.Dapr
using namespace Newtonsoft.Json.Linq
# Example to use Dapr Service Invocation Trigger and Dapr State Output binding to persist a new state into statestore
param (
$subEvent
)
Write-Host "PowerShell function processed a TransferEventBetweenTopics request from the Dapr Runtime."
# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $subEvent["data"]
$messageFromTopicA = "Transfer from Topic A: $jsonString".Trim()
$publish_output_binding_req_body = @{
"payload" = $messageFromTopicA
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name pubEvent -Value $publish_output_binding_req_body
Aşağıdaki örnekte, v2 Python programlama modelini kullanan bir Dapr Yayımlama çıkış bağlaması gösterilmektedir. Python işlev uygulama kodunuzda kullanmak daprPublish
için:
import logging
import json
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="TransferEventBetweenTopics")
@app.dapr_topic_trigger(arg_name="subEvent", pub_sub_name="%PubSubName%", topic="A", route="A")
@app.dapr_publish_output(arg_name="pubEvent", pub_sub_name="%PubSubName%", topic="B")
def main(subEvent, pubEvent: func.Out[bytes]) -> None:
logging.info('Python function processed a TransferEventBetweenTopics request from the Dapr Runtime.')
subEvent_json = json.loads(subEvent)
payload = "Transfer from Topic A: " + str(subEvent_json["data"])
pubEvent.set(json.dumps({"payload": payload}).encode('utf-8'))
Özellikler
İşlem içi modelde, şu parametreleri destekleyen bir Dapr yayımlama çıkış bağlaması tanımlamak için öğesini kullanınDaprPublish
:
function.json özelliği | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
PubSubName | İletiyi göndermek için Dapr pub/sub adı. | ✔️ | ✔️ |
Konu | İletiyi göndermek için Dapr konusunun adı. | ✔️ | ✔️ |
Yükü | Gerekli. Yayımlanan ileti. | ❌ | ✔️ |
Ek Açıklamalar
Ek DaprPublishOutput
açıklama, yayımlanmış bir iletiye işlev erişimine sahip olmanıza olanak tanır.
Öğe | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
pubSubName | İletiyi göndermek için Dapr pub/sub adı. | ✔️ | ✔️ |
topic | İletiyi göndermek için Dapr konusunun adı. | ✔️ | ✔️ |
Yükü | Gerekli. Yayımlanan ileti. | ❌ | ✔️ |
Yapılandırma
Aşağıdaki tabloda kodda ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
Özellik | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
pubsubname | Yayımcı bileşen hizmetinin adı. | ✔️ | ✔️ |
topic | Yayımcı konusunun adı/tanımlayıcısı. | ✔️ | ✔️ |
Yükü | Gerekli. Yayımlanan ileti. | ❌ | ✔️ |
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
pubsubname | Yayımcı bileşen hizmetinin adı. | ✔️ | ✔️ |
topic | Yayımcı konusunun adı/tanımlayıcısı. | ✔️ | ✔️ |
Yükü | Gerekli. Yayımlanan ileti. | ❌ | ✔️ |
Aşağıdaki tabloda Python kodunuzda ayarladığınız bağlama yapılandırma özellikleri @dapp.dapr_publish_output
açıklanmaktadır.
Özellik | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
pub_sub_name | Yayımcı olayının adı. | ✔️ | ✔️ |
topic | Yayımcı konu adı/tanımlayıcısı. | ✔️ | ✔️ |
Yükü | Gerekli. Yayımlanan ileti. | ❌ | ✔️ |
Özellikler hem Özniteliklerde RequestBody
hem de içinde tanımlanmışsa, içinde sağlanan RequestBody
verilere öncelik verilir.
Tam örnekler için Örnek bölümüne bakın.
Kullanım
Dapr yayımlama çıkış bağlamasını kullanmak için bir Dapr pub/sub bileşeni ayarlayarak başlayın. Resmi Dapr belgelerinde hangi bileşenin kullanılacağı ve nasıl ayarlanacağı hakkında daha fazla bilgi edinebilirsiniz.
python v2'de kullanmak daprPublish
için projenizi doğru bağımlılıklarla ayarlayın.
Sanal ortam oluşturma ve etkinleştirme.
Dosyanıza
requirements.text
aşağıdaki satırı ekleyin:azure-functions==1.18.0b3
Terminalde Python kitaplığını yükleyin.
pip install -r .\requirements.txt
Dosyanızı
local.setting.json
aşağıdaki yapılandırmayla değiştirin:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
Sonraki adımlar
Dapr yayımlama ve abone olma hakkında daha fazla bilgi edinin.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin