Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'associazione di output di pubblicazione dapr consente di pubblicare un messaggio in un argomento Dapr durante l'esecuzione di una funzione.
Per informazioni sull'installazione e sulla configurazione dell'estensione Dapr, vedere panoramica dell'estensione Dapr.
Example
È possibile creare una funzione C# usando una delle modalità C# seguenti:
| Execution model | Description |
|---|---|
| Modello di lavoro isolato | Il codice della funzione viene eseguito in un processo di lavoro .NET separato. Usare con le versioni supportate di .NET e .NET Framework. Per altre informazioni, vedere Guida per l'esecuzione di Funzioni di Azure C# nel modello di lavoro isolato. |
| In-process model | Il codice della funzione viene eseguito nello stesso processo del processo host di Funzioni. Supporta solo versioni LTS (Long Term Support) di .NET. Per altre informazioni, vedere Sviluppare funzioni della libreria di classi C# usando Funzioni di Azure. |
Nell'esempio seguente viene illustrato l'uso di un'associazione di output di pubblicazione dapr per eseguire un'operazione di pubblicazione dapr in un componente pub/sub e in un argomento.
[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);
}
Nell'esempio seguente viene creata una "TransferEventBetweenTopics" funzione usando l'associazione DaprPublishOutput con un oggetto DaprTopicTrigger:
@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.");
}
Nell'esempio seguente, l'associazione di output di pubblicazione dapr viene associata a un trigger HTTP, registrato dall'oggetto app :
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 };
}
});
The following examples show Dapr triggers in a function.json file and PowerShell code that uses those bindings.
Here's the function.json file for daprPublish:
{
"bindings":
{
"type": "daprPublish",
"direction": "out",
"name": "pubEvent",
"pubsubname": "%PubSubName%",
"topic": "B"
}
}
For more information about function.json file properties, see the Configuration section.
In code:
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
L'esempio seguente mostra un'associazione di output Dapr Publish, che usa il modello di programmazione Python v2. Per usare daprPublish nel codice dell'app per le funzioni Python:
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'))
Attributes
In the in-process model, use the DaprPublish to define a Dapr publish output binding, which supports these parameters:
| function.json property | Description | Può essere inviato tramite Attributo | Può essere inviato tramite RequestBody |
|---|---|---|---|
| PubSubName | Nome del pub/sub dapr per inviare il messaggio. | ✔️ | ✔️ |
| Topic | Nome dell'argomento Dapr da inviare il messaggio. | ✔️ | ✔️ |
| Payload | Required. Messaggio da pubblicare. | ❌ | ✔️ |
Annotations
L'annotazione DaprPublishOutput consente di disporre di una funzione per accedere a un messaggio pubblicato.
| Element | Description | Può essere inviato tramite Attributo | Può essere inviato tramite RequestBody |
|---|---|---|---|
| pubSubName | Nome del pub/sub dapr per inviare il messaggio. | ✔️ | ✔️ |
| topic | Nome dell'argomento Dapr da inviare il messaggio. | ✔️ | ✔️ |
| payload | Required. Messaggio da pubblicare. | ❌ | ✔️ |
Configuration
Nella tabella seguente vengono illustrate le proprietà di configurazione dell'associazione impostate nel codice.
| Property | Description | Può essere inviato tramite Attributo | Può essere inviato tramite RequestBody |
|---|---|---|---|
| pubsubname | Nome del servizio componente del server di pubblicazione. | ✔️ | ✔️ |
| topic | Nome/identificatore dell'argomento dell'editore. | ✔️ | ✔️ |
| payload | Required. Messaggio da pubblicare. | ❌ | ✔️ |
The following table explains the binding configuration properties that you set in the function.json file.
| function.json property | Description | Può essere inviato tramite Attributo | Può essere inviato tramite RequestBody |
|---|---|---|---|
| pubsubname | Nome del servizio componente del server di pubblicazione. | ✔️ | ✔️ |
| topic | Nome/identificatore dell'argomento dell'editore. | ✔️ | ✔️ |
| payload | Required. Messaggio da pubblicare. | ❌ | ✔️ |
La tabella seguente illustra le proprietà di configurazione dell'associazione per @dapp.dapr_publish_output impostate nel codice Python.
| Property | Description | Può essere inviato tramite Attributo | Può essere inviato tramite RequestBody |
|---|---|---|---|
| pub_sub_name | Nome dell'evento del server di pubblicazione. | ✔️ | ✔️ |
| topic | Nome/identificatore dell'argomento dell'editore. | ✔️ | ✔️ |
| payload | Required. Messaggio da pubblicare. | ❌ | ✔️ |
Se le proprietà sono definite sia in Attributi che in RequestBody, la priorità viene assegnata ai dati forniti in RequestBody.
See the Example section for complete examples.
Usage
Per usare l'associazione di output di pubblicazione dapr, iniziare configurando un componente pub/sub dapr. Per altre informazioni sul componente da usare e su come configurarlo, vedere la documentazione ufficiale di Dapr.
- Specifiche del componente dapr pub/sub
- Procedura: Pubblicare un messaggio e sottoscrivere un argomento
Per usare daprPublish in Python v2, configurare il progetto con le dipendenze corrette.
Nel file
requirements.textaggiungere la riga seguente:azure-functions==1.18.0b3Nel terminale installare la libreria Python.
pip install -r .\requirements.txtModificare il file
local.setting.jsoncon la configurazione seguente:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
Next steps
Altre informazioni sulla pubblicazione e la sottoscrizione di Dapr.