A Dapr meghívja a kimeneti kötést az Azure Functionshez
A Dapr-hívás kimeneti kötése lehetővé teszi egy másik Dapr-alkalmazás meghívását egy függvény végrehajtása során.
A Dapr-bővítmény beállítási és konfigurációs részleteiről a Dapr bővítmény áttekintésében olvashat.
Példa
A C#-függvények a következő C#-módok egyikével hozhatók létre:
Végrehajtási modell | Leírás |
---|---|
Izolált feldolgozói modell | A függvénykód egy külön .NET-feldolgozófolyamatban fut. A .NET és a .NET-keretrendszer támogatott verzióival használható. További információ: .NET izolált feldolgozói folyamatfüggvények fejlesztése. |
Folyamaton belüli modell | A függvénykód ugyanabban a folyamatban fut, mint a Functions gazdafolyamata. Csak a .NET hosszú távú támogatási (LTS) verzióit támogatja. További információ: .NET-osztálykódtár-függvények fejlesztése. |
Az alábbi példa azt mutatja be, hogy egy Dapr-meghívási kimeneti kötés használatával hajt végre egy másik Dapr-alapú alkalmazásban üzemeltetett Dapr-szolgáltatáshívási műveletet. Ebben a példában a függvény proxyként működik.
[FunctionName("InvokeOutputBinding")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "invoke/{appId}/{methodName}")] HttpRequest req,
[DaprInvoke(AppId = "{appId}", MethodName = "{methodName}", HttpVerb = "post")] IAsyncCollector<InvokeMethodParameters> output,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
var outputContent = new InvokeMethodParameters
{
Body = requestBody
};
await output.AddAsync(outputContent);
return new OkResult();
}
Az alábbi példa egy függvényt "InvokeOutputBinding"
hoz létre a DaprInvokeOutput
kötéssel egy HttpTrigger
következővel:
@FunctionName("InvokeOutputBinding")
public String run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS,
route = "invoke/{appId}/{methodName}")
HttpRequestMessage<Optional<String>> request,
@DaprInvokeOutput(
appId = "{appId}",
methodName = "{methodName}",
httpVerb = "post")
OutputBinding<String> payload,
final ExecutionContext context)
Az alábbi példában a Dapr meghívja a kimeneti kötést egy HTTP-eseményindítóval párosítva, amelyet az app
objektum regisztrál:
const { app, trigger } = require('@azure/functions');
app.generic('InvokeOutputBinding', {
trigger: trigger.generic({
type: 'httpTrigger',
authLevel: 'anonymous',
methods: ['POST'],
route: "invoke/{appId}/{methodName}",
name: "req"
}),
return: daprInvokeOutput,
handler: async (request, context) => {
context.log("Node HTTP trigger function processed a request.");
const payload = await request.text();
context.log(JSON.stringify(payload));
return { body: payload };
}
});
Az alábbi példák a Dapr-eseményindítókat mutatják be egy function.json fájlban és a PowerShell-kódban, amely ezeket a kötéseket használja.
A következő function.json fájl:daprInvoke
{
"bindings":
{
"type": "daprInvoke",
"direction": "out",
"appId": "{appId}",
"methodName": "{methodName}",
"httpVerb": "post",
"name": "payload"
}
}
A function.json fájltulajdonságokról a Konfiguráció szakaszban talál további információt.
Kódban:
using namespace System.Net
# Input bindings are passed in via param block.
param($req, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "Powershell InvokeOutputBinding processed a request."
$req_body = $req.Body
$invoke_output_binding_req_body = @{
"body" = $req_body
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name payload -Value $invoke_output_binding_req_body
Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $req_body
})
Az alábbi példa egy Dapr Invoke kimeneti kötést mutat be, amely a v2 Python programozási modellt használja. A Python-függvényalkalmazás kódjában való használathoz daprInvoke
:
import logging
import json
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="InvokeOutputBinding")
@app.route(route="invoke/{appId}/{methodName}", auth_level=dapp.auth_level.ANONYMOUS)
@app.dapr_invoke_output(arg_name = "payload", app_id = "{appId}", method_name = "{methodName}", http_verb = "post")
def main(req: func.HttpRequest, payload: func.Out[str] ) -> str:
# request body must be passed this way "{\"body\":{\"value\":{\"key\":\"some value\"}}}" to use the InvokeOutputBinding, all the data must be enclosed in body property.
logging.info('Python function processed a InvokeOutputBinding request from the Dapr Runtime.')
body = req.get_body()
logging.info(body)
if body is not None:
payload.set(body)
else:
logging.info('req body is none')
return 'ok'
Attribútumok
A folyamatban lévő modellben az DaprInvoke
attribútum használatával definiáljon egy Dapr-meghívási kimeneti kötést, amely támogatja az alábbi paramétereket:
Paraméter | Leírás | Attribútumon keresztül küldhető el | Elküldhető a RequestBody-on keresztül |
---|---|---|---|
Appid | A meghívandó Dapr-alkalmazás azonosítója. | ✔️ | ✔️ |
MethodName | A meghívni kívánt alkalmazás metódusneve. | ✔️ | ✔️ |
HttpVerb | Opcionális. HTTP-parancs az alkalmazás meghívásához. Az alapértelmezett szint a POST . |
✔️ | ✔️ |
Törzs | Szükséges. A kérelem törzse. | ❌ | ✔️ |
Jegyzetek
A DaprInvokeOutput
jegyzettel meghívhatja a függvényt, és meghallgathatja a kimeneti kötést.
Elem | Leírás | Attribútumon keresztül küldhető el | Elküldhető a RequestBody-on keresztül |
---|---|---|---|
Appid | A meghívási kötésben érintett alkalmazás alkalmazásazonosítója. | ✔️ | ✔️ |
methodName | A metódusváltozó neve. | ✔️ | ✔️ |
httpVerb | Közzététel vagy lekérés. | ✔️ | ✔️ |
Szervezet | Szükséges. A kérelem törzse. | ❌ | ✔️ |
Konfiguráció
Az alábbi táblázat a kódban beállított kötéskonfigurációs tulajdonságokat ismerteti.
Tulajdonság | Leírás | Attribútumon keresztül küldhető el | Elküldhető a RequestBody-on keresztül |
---|---|---|---|
Appid | A meghívási kötésben érintett alkalmazás alkalmazásazonosítója. | ✔️ | ✔️ |
Módszerek | Közzététel vagy lekérés. | ✔️ | ✔️ |
Szervezet | Szükséges. A kérelem törzse. | ❌ | ✔️ |
Az alábbi táblázat a function.json fájlban beállított kötéskonfigurációs tulajdonságokat ismerteti.
function.json tulajdonság | Leírás | Attribútumon keresztül küldhető el | Elküldhető a RequestBody-on keresztül |
---|---|---|---|
Appid | A meghívási kötésben érintett alkalmazás alkalmazásazonosítója. | ✔️ | ✔️ |
methodName | A metódusváltozó neve. | ✔️ | ✔️ |
httpVerb | Közzététel vagy lekérés. | ✔️ | ✔️ |
Szervezet | Szükséges. A kérelem törzse. | ❌ | ✔️ |
Az alábbi táblázat a Python-kódban beállított kötéskonfigurációs tulajdonságokat @dapp.dapr_invoke_output
ismerteti.
Tulajdonság | Leírás | Attribútumon keresztül küldhető el | Elküldhető a RequestBody-on keresztül |
---|---|---|---|
app_id | A meghívási kötésben érintett alkalmazás alkalmazásazonosítója. | ✔️ | ✔️ |
method_name | A metódusváltozó neve. | ✔️ | ✔️ |
http_verb | Beállítás vagy post get . |
✔️ | ✔️ |
Szervezet | Szükséges. A kérelem törzse. | ❌ | ✔️ |
Ha a tulajdonságok attribútumokban vannak definiálva, és RequestBody
a rendszer prioritást ad a megadott RequestBody
adatoknak.
A teljes példákért tekintse meg a Példa szakaszt .
Használat
A Dapr szolgáltatáshívás kimeneti kötésének használatához további információ a Dapr szolgáltatáshívás használatáról a hivatalos Dapr-dokumentációban.
A Python v2-ben való daprInvoke
használatához állítsa be a projektet a megfelelő függőségekkel.
Virtuális környezet létrehozása és aktiválása.
requirements.text
A fájlban adja hozzá a következő sort:azure-functions==1.18.0b3
Telepítse a Python-kódtárat a terminálban.
pip install -r .\requirements.txt
Módosítsa a
local.setting.json
fájlt a következő konfigurációval:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1