Azure İşlevleri için Dapr Invoke çıkış bağlaması
Dapr çağırma çıkış bağlaması, bir işlev yürütmesi sırasında başka bir Dapr uygulaması çağırmanı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 örnek, başka bir Dapr-ized uygulamasında barındırılan bir Dapr hizmeti çağırma işlemi gerçekleştirmek için Bir Dapr çağırma çıkış bağlaması kullanmayı gösterir. Bu örnekte işlev bir ara sunucu gibi davranır.
[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();
}
Aşağıdaki örnek, ile bağlamasını DaprInvokeOutput
kullanarak bir "InvokeOutputBinding"
HttpTrigger
işlev oluşturur:
@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)
Aşağıdaki örnekte, Dapr çağırma çıkış bağlaması nesnesi tarafından kaydedilen bir HTTP tetikleyicisiyle app
eşleştirilir:
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 };
}
});
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:daprInvoke
{
"bindings":
{
"type": "daprInvoke",
"direction": "out",
"appId": "{appId}",
"methodName": "{methodName}",
"httpVerb": "post",
"name": "payload"
}
}
function.json dosya özellikleri hakkında daha fazla bilgi için Yapılandırma bölümüne bakın.
Kod:
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
})
Aşağıdaki örnekte, v2 Python programlama modelini kullanan bir Dapr Invoke çıkış bağlaması gösterilmektedir. Python işlev uygulama kodunuzda kullanmak daprInvoke
için:
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'
Özellikler
İşlem içi modelde, şu parametreleri destekleyen bir Dapr çağırma çıkış bağlaması tanımlamak için özniteliğini kullanınDaprInvoke
:
Parametre | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
Appıd | Çağrılacak Dapr uygulama kimliği. | ✔️ | ✔️ |
Methodname | Çağrılacak uygulamanın yöntem adı. | ✔️ | ✔️ |
HttpVerb | isteğe bağlı. Çağırmak için uygulamanın kullanıldığı HTTP fiili. Varsayılan POST değeridir. |
✔️ | ✔️ |
Gövde | Gerekli. İsteğin gövdesi. | ❌ | ✔️ |
Ek Açıklamalar
Ek DaprInvokeOutput
açıklama işlevinizin bir çıkış bağlamasını çağırmasını ve dinlemesini sağlar.
Öğe | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
Appıd | Çağırma bağlamasında yer alan uygulamanın uygulama kimliği. | ✔️ | ✔️ |
Methodname | Yöntem değişkeninin adı. | ✔️ | ✔️ |
httpVerb | Gönderin veya alın. | ✔️ | ✔️ |
gövde | Gerekli. İsteğin gövdesi. | ❌ | ✔️ |
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 |
---|---|---|---|
Appıd | Çağırma bağlamasında yer alan uygulamanın uygulama kimliği. | ✔️ | ✔️ |
Yöntemler | Gönderin veya alın. | ✔️ | ✔️ |
gövde | Gerekli. İsteğin gövdesi. | ❌ | ✔️ |
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 |
---|---|---|---|
Appıd | Çağırma bağlamasında yer alan uygulamanın uygulama kimliği. | ✔️ | ✔️ |
Methodname | Yöntem değişkeninin adı. | ✔️ | ✔️ |
httpVerb | Gönderin veya alın. | ✔️ | ✔️ |
gövde | Gerekli. İsteğin gövdesi. | ❌ | ✔️ |
Aşağıdaki tabloda Python kodunuzda ayarladığınız bağlama yapılandırma özellikleri @dapp.dapr_invoke_output
açıklanmaktadır.
Özellik | Açıklama | Öznitelik aracılığıyla gönderilebilir | RequestBody aracılığıyla gönderilebilir |
---|---|---|---|
app_id | Çağırma bağlamasında yer alan uygulamanın uygulama kimliği. | ✔️ | ✔️ |
method_name | Yöntem değişkeninin adı. | ✔️ | ✔️ |
http_verb | Ayarlanan post veya get . |
✔️ | ✔️ |
gövde | Gerekli. İsteğin gövdesi. | ❌ | ✔️ |
Ö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 hizmeti çağırma çıkış bağlamasını kullanmak için resmi Dapr belgelerinde Dapr hizmeti çağırmayı kullanma hakkında daha fazla bilgi edinin.
python v2'de kullanmak daprInvoke
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