Powiązanie danych wyjściowych języka Dapr dla usługi Azure Functions
Powiązanie danych wyjściowych języka Dapr umożliwia wysyłanie wartości do powiązania wyjściowego języka Dapr podczas wykonywania funkcji.
Aby uzyskać informacje na temat konfiguracji i szczegółów konfiguracji rozszerzenia Języka Dapr, zobacz Omówienie rozszerzenia Języka Dapr.
Przykład
Funkcję języka C# można utworzyć przy użyciu jednego z następujących trybów języka C#:
Model wykonania | opis |
---|---|
Model izolowanego procesu roboczego | Kod funkcji jest uruchamiany w osobnym procesie roboczym platformy .NET. Używaj z obsługiwanymi wersjami platform .NET i .NET Framework. Aby dowiedzieć się więcej, zobacz Develop .NET isolated worker process functions (Tworzenie izolowanych funkcji procesów roboczych platformy .NET). |
Model w procesie | Kod funkcji jest uruchamiany w tym samym procesie co proces hosta usługi Functions. Obsługuje tylko wersje long term support (LTS) platformy .NET. Aby dowiedzieć się więcej, zobacz Tworzenie funkcji biblioteki klas platformy .NET. |
W poniższym przykładzie pokazano użycie wyzwalacza wywołania usługi Dapr i powiązania danych wyjściowych języka Dapr w celu odczytu i przetwarzania żądania powiązania.
[FunctionName("SendMessageToKafka")]
public static async Task Run(
[DaprServiceInvocationTrigger] JObject payload,
[DaprBinding(BindingName = "%KafkaBindingName%", Operation = "create")] IAsyncCollector<object> messages,
ILogger log)
{
log.LogInformation("C# function processed a SendMessageToKafka request.");
await messages.AddAsync(payload);
}
Poniższy przykład tworzy "SendMessagetoKafka"
funkcję przy użyciu DaprBindingOutput
powiązania z elementem DaprServiceInvocationTrigger
:
@FunctionName("SendMessageToKafka")
public String run(
@DaprServiceInvocationTrigger(
methodName = "SendMessageToKafka")
String payload,
@DaprBindingOutput(
bindingName = "%KafkaBindingName%",
operation = "create")
OutputBinding<String> product,
final ExecutionContext context) {
context.getLogger().info("Java function processed a SendMessageToKafka request.");
product.setValue(payload);
return payload;
}
W poniższym przykładzie powiązanie danych wyjściowych języka Dapr jest sparowane z wyzwalaczem danych wyjściowych wywołania języka Dapr, który jest zarejestrowany przez app
obiekt:
const { app, trigger } = require('@azure/functions');
app.generic('SendMessageToKafka', {
trigger: trigger.generic({
type: 'daprServiceInvocationTrigger',
name: "payload"
}),
return: daprBindingOuput,
handler: async (request, context) => {
context.log("Node function processed a SendMessageToKafka request from the Dapr Runtime.");
context.log(context.triggerMetadata.payload)
return { "data": context.triggerMetadata.payload };
}
});
W poniższych przykładach pokazano wyzwalacze języka Dapr w pliku function.json i kodzie programu PowerShell, który używa tych powiązań.
Oto plik function.json dla elementu daprBinding
:
{
"bindings":
{
"type": "daprBinding",
"direction": "out",
"bindingName": "%KafkaBindingName%",
"operation": "create",
"name": "messages"
}
}
Aby uzyskać więcej informacji na temat function.json właściwości pliku, zobacz sekcję Konfiguracja.
W kodzie:
using namespace System.Net
# Input bindings are passed in via param block.
param($req, $TriggerMetadata)
Write-Host "Powershell SendMessageToKafka processed a request."
$invoke_output_binding_req_body = @{
"data" = $req
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name messages -Value $invoke_output_binding_req_body
W poniższym przykładzie przedstawiono powiązanie wyjściowe powiązania języka Dapr, które używa modelu programowania w języku Python w wersji 2. Aby użyć @dapp.dapr_binding_output
w kodzie aplikacji funkcji języka Python:
import logging
import json
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="SendMessageToKafka")
@app.dapr_service_invocation_trigger(arg_name="payload", method_name="SendMessageToKafka")
@app.dapr_binding_output(arg_name="messages", binding_name="%KafkaBindingName%", operation="create")
def main(payload: str, messages: func.Out[bytes]) -> None:
logging.info('Python processed a SendMessageToKafka request from the Dapr Runtime.')
messages.set(json.dumps({"data": payload}).encode('utf-8'))
Atrybuty
W modelu przetwarzania użyj DaprBinding
polecenia , aby zdefiniować powiązanie wyjściowe powiązania języka Dapr, które obsługuje następujące parametry:
Parametr | Opis | Można wysłać za pośrednictwem atrybutu | Można wysłać za pośrednictwem elementu RequestBody |
---|---|---|---|
BindingName | Nazwa powiązania języka Dapr. | ✔️ | ✔️ |
Operacja | Skonfigurowana operacja powiązania. | ✔️ | ✔️ |
Metadane | Przestrzeń nazw metadanych. | ❌ | ✔️ |
Data | Wymagany. Dane operacji powiązania. | ❌ | ✔️ |
Adnotacje
Adnotacja DaprBindingOutput
umożliwia utworzenie funkcji, która wysyła powiązanie wyjściowe.
Element | opis | Można wysłać za pośrednictwem atrybutu | Można wysłać za pośrednictwem elementu RequestBody |
---|---|---|---|
bindingName | Nazwa powiązania języka Dapr. | ✔️ | ✔️ |
Wyjście | Skonfigurowana operacja powiązania. | ✔️ | ✔️ |
metadane | Przestrzeń nazw metadanych. | ❌ | ✔️ |
data | Wymagany. Dane operacji powiązania. | ❌ | ✔️ |
Konfigurowanie
W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione w kodzie.
Właściwości | opis | Można wysłać za pośrednictwem atrybutu | Można wysłać za pośrednictwem elementu RequestBody |
---|---|---|---|
bindingName | Nazwa powiązania. | ✔️ | ✔️ |
rozdzielnicy | Operacja powiązania. | ✔️ | ✔️ |
metadane | Przestrzeń nazw metadanych. | ❌ | ✔️ |
data | Wymagany. Dane operacji powiązania. | ❌ | ✔️ |
W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione w pliku function.json.
właściwość function.json | opis | Można wysłać za pośrednictwem atrybutu | Można wysłać za pośrednictwem elementu RequestBody |
---|---|---|---|
bindingName | Nazwa powiązania. | ✔️ | ✔️ |
rozdzielnicy | Operacja powiązania. | ✔️ | ✔️ |
metadane | Przestrzeń nazw metadanych. | ❌ | ✔️ |
data | Wymagany. Dane operacji powiązania. | ❌ | ✔️ |
W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione @dapp.dapr_binding_output
w kodzie języka Python.
Właściwości | opis | Można wysłać za pośrednictwem atrybutu | Można wysłać za pośrednictwem elementu RequestBody |
---|---|---|---|
binding_name | Nazwa zdarzenia powiązania. | ✔️ | ✔️ |
rozdzielnicy | Nazwa/identyfikator operacji powiązania. | ✔️ | ✔️ |
metadane | Przestrzeń nazw metadanych. | ❌ | ✔️ |
data | Wymagany. Dane operacji powiązania. | ❌ | ✔️ |
Jeśli właściwości są zdefiniowane zarówno w atrybutach, jak i RequestBody
, priorytet jest przypisywany do danych podanych w pliku RequestBody
.
Zobacz sekcję Przykład, aby zapoznać się z kompletnymi przykładami.
Użycie
Aby użyć powiązania danych wyjściowych języka Dapr, rozpocznij od skonfigurowania składnika powiązania danych wyjściowych języka Dapr. Więcej informacji na temat tego, który składnik ma być używany i jak go skonfigurować, znajdziesz w oficjalnej dokumentacji języka Dapr.
- Specyfikacje składnika powiązania wyjściowego języka Dapr
- Instrukcje: używanie powiązań wyjściowych do interfejsu z zasobami zewnętrznymi
Aby użyć elementu daprBinding
w języku Python w wersji 2, skonfiguruj projekt przy użyciu poprawnych zależności.
Tworzenie i aktywowanie środowiska wirtualnego.
requirements.text
W pliku dodaj następujący wiersz:azure-functions==1.18.0b3
W terminalu zainstaluj bibliotekę języka Python.
pip install -r .\requirements.txt
local.setting.json
Zmodyfikuj plik przy użyciu następującej konfiguracji:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1