Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo explica como trabalhar com associações Hubs de Eventos do Azure para Azure Functions. Azure Functions dá suporte a associações de gatilho e saída para Hubs de Eventos.
Para obter informações sobre a instalação e detalhes de configuração, confira a visão geral.
Use a associação de saída dos Hubs de Eventos para gravar eventos em um fluxo de eventos. É necessário ter permissão de envio para que um hub de eventos grave eventos nele.
Verifique se as referências de pacote necessárias estão em vigor antes de tentar implementar uma associação de saída.
Importante
Este artigo usa guias para dar suporte a várias versões do modelo de programação Node.js. O modelo v4 normalmente está disponível e foi projetado para oferecer uma experiência mais flexível e intuitiva para desenvolvedores de JavaScript e TypeScript. Para obter mais detalhes sobre como o modelo v4 funciona, consulte o Azure Functions Node.js guia do desenvolvedor. Para saber mais sobre as diferenças entre os modelos v3 e a v4, consulte o Guia de migração.
Azure Functions dá suporte a dois modelos de programação para Python. A maneira como você define suas associações depende do modelo de programação escolhido.
O modelo de programação Python v2 permite definir associações usando decoradores diretamente em seu código de função Python. Para obter mais informações, consulte o guia do desenvolvedor Python.
Este artigo dá suporte a ambos os modelos de programação.
Exemplo
O suporte do Go não está disponível para essa ligação no momento.
O exemplo a seguir mostra uma função C# que grava uma cadeia de caracteres de mensagem em um hub de eventos, usando o valor retornado do método como a saída:
[Function(nameof(EventHubFunction))]
[FixedDelayRetry(5, "00:00:10")]
[EventHubOutput("dest", Connection = "EventHubConnection")]
public string EventHubFunction(
[EventHubTrigger("src", Connection = "EventHubConnection")] string[] input,
FunctionContext context)
{
_logger.LogInformation("First Event Hubs triggered message: {msg}", input[0]);
var message = $"Output message created at {DateTime.Now}";
return message;
}
O exemplo a seguir mostra uma função TypeScript disparada pelo temporizador que envia uma única mensagem para um hub de eventos:
import { app, InvocationContext, output, Timer } from '@azure/functions';
export async function timerTrigger1(myTimer: Timer, context: InvocationContext): Promise<string> {
const timeStamp = new Date().toISOString();
return `Message created at: ${timeStamp}`;
}
app.timer('timerTrigger1', {
schedule: '0 */5 * * * *',
return: output.eventHub({
eventHubName: 'myeventhub',
connection: 'MyEventHubSendAppSetting',
}),
handler: timerTrigger1,
});
Para gerar várias mensagens, retorne uma matriz em vez de um único objeto. Por exemplo:
const timeStamp = new Date().toISOString();
const message = `Message created at: ${timeStamp}`;
return [`1: ${message}`, `2: ${message}`];
O exemplo a seguir mostra uma função JavaScript disparada pelo temporizador que envia uma única mensagem para um hub de eventos:
const { app, output } = require('@azure/functions');
const eventHubOutput = output.eventHub({
eventHubName: 'myeventhub',
connection: 'MyEventHubSendAppSetting',
});
app.timer('timerTrigger1', {
schedule: '0 */5 * * * *',
return: eventHubOutput,
handler: (myTimer, context) => {
const timeStamp = new Date().toISOString();
return `Message created at: ${timeStamp}`;
},
});
Para gerar várias mensagens, retorne uma matriz em vez de um único objeto. Por exemplo:
const timeStamp = new Date().toISOString();
const message = `Message created at: ${timeStamp}`;
return [`1: ${message}`, `2: ${message}`];
Exemplos completos do PowerShell estão pendentes.
O exemplo a seguir mostra uma associação de gatilho do hub de eventos e uma função Python que usa a associação. A função grava uma mensagem em um hub de eventos. O exemplo depende se você usa o v1 ou v2 Python modelo de programação.
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="eventhub_output")
@app.route(route="eventhub_output")
@app.event_hub_output(arg_name="event",
event_hub_name="<EVENT_HUB_NAME>",
connection="<CONNECTION_SETTING>")
def eventhub_output(req: func.HttpRequest, event: func.Out[str]):
body = req.get_body()
if body is not None:
event.set(body.decode('utf-8'))
else:
logging.info('req body is none')
return 'ok'
Aqui está Python código que envia várias mensagens:
import logging
import azure.functions as func
from typing import List
app = func.FunctionApp()
@app.function_name(name="eventhub_output")
@app.route(route="eventhub_output")
@app.event_hub_output(arg_name="event",
event_hub_name="<EVENT_HUB_NAME>",
connection="<CONNECTION_SETTING>")
def eventhub_output(req: func.HttpRequest, event: func.Out[List[str]]) -> func.HttpResponse:
my_messages=["message1", "message2","message3"]
event.set(my_messages)
return func.HttpResponse(f"Messages sent")
O exemplo a seguir mostra uma função Java que grava uma mensagem que contém a hora atual em um hub de eventos.
@FunctionName("sendTime")
@EventHubOutput(name = "event", eventHubName = "samples-workitems", connection = "AzureEventHubConnection")
public String sendTime(
@TimerTrigger(name = "sendTimeTrigger", schedule = "0 */5 * * * *") String timerInfo) {
return LocalDateTime.now().toString();
}
Na biblioteca Java functions runtime, use a anotação @EventHubOutput em parâmetros cujo valor seria publicado nos Hubs de Eventos. O parâmetro deve ser do tipo OutputBinding<T>, em que T é um POJO ou qualquer tipo de Java nativo.
Atributos
As bibliotecas C# em processo e de processo de trabalho isolado usam atributos para configurar a associação. Em vez disso, o script C# usa um arquivo de configuração function.json, conforme descrito no guia de script C#.
Use o [EventHubOutputAttribute] para definir uma associação de saída para um hub de eventos, que permite as propriedades a seguir.
| Parâmetros | Descrição |
|---|---|
| EventHubName | O nome do hub de eventos. Quando o nome do hub de eventos também está presente no cadeia de conexão, esse valor substitui essa propriedade em runtime. |
| Conexão | O nome de uma configuração de aplicativo ou coleção de configurações que especifica como se conectar aos Hubs de Eventos. Para saber mais, confira Conexões. |
Decoradores
Aplica somente para o modelo de programação Python v2.
Para Python funções v2 definidas usando um decorador, essas propriedades têm suporte para event_hub_output:
| Propriedade | Descrição |
|---|---|
arg_name |
É o nome da variável usada no código da função que representa o evento. |
event_hub_name |
o nome do hub de eventos. Quando o nome do hub de eventos também está presente no cadeia de conexão, esse valor substitui essa propriedade em runtime. |
connection |
O nome de uma configuração de aplicativo ou coleção de configurações que especifica como se conectar aos Hubs de Eventos. Para saber mais, confira Conexões. |
Para Python funções definidas usando function.json, consulte a seção Configuration.
Anotações
Na biblioteca Java functions runtime, use a anotação EventHubOutput em parâmetros cujo valor seria publicado nos Hubs de Eventos. As configurações a seguir são permitidas na anotação:
Configuração
Aplica somente para o modelo de programação Python v1.
A tabela a seguir explica as propriedades que você pode definir no objeto options transmitido para o método output.eventHub().
| Propriedade | Descrição |
|---|---|
| eventHubName | O nome do hub de eventos. Quando o nome do hub de eventos também está presente no cadeia de conexão, esse valor substitui essa propriedade em runtime. |
| conexão | O nome de uma configuração de aplicativo ou coleção de configurações que especifica como se conectar aos Hubs de Eventos. Para saber mais, confira Conexões. |
A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json, que difere pela versão do runtime.
| Propriedade function.json | Descrição |
|---|---|
| tipo | Deve ser definido como eventHub. |
| direção | Deve ser definido como out. Esse parâmetro é definido automaticamente quando você cria a associação no portal Azure. |
| nome | É o nome da variável usada no código da função que representa o evento. |
| eventHubName | Functions 2.x e posterior. O nome do hub de eventos. Quando o nome do hub de eventos também está presente no cadeia de conexão, esse valor substitui essa propriedade em runtime. |
| conexão | O nome de uma configuração de aplicativo ou coleção de configurações que especifica como se conectar aos Hubs de Eventos. Para saber mais, confira Conexões. |
Quando você estiver desenvolvendo localmente, adicione as configurações do aplicativo no arquivo local.settings.json na coleção Values.
Uso
Os tipos específicos com suporte pela associação de saída do Hubs de Eventos dependem da versão de runtime do Functions, da versão do pacote de extensão e da modalidade de C# usada.
Quando você quiser que a função escreva um único evento, a associação de saída dos Hubs de Eventos pode ser associada aos seguintes tipos:
| Tipo | Descrição |
|---|---|
string |
O evento como uma cadeia de caracteres. Use quando a mensagem for de texto simples. |
byte[] |
Os bytes do evento. |
| Tipos serializáveis JSON | Um objeto que representa o evento. O Functions tenta serializar um tipo de objeto CLR básico (POCO) em dados JSON. |
Quando você quiser que a função escreva vários eventos, a associação de saída dos Hubs de Eventos pode ser associada aos seguintes tipos:
| Tipo | Descrição |
|---|---|
T[] em que T é um dos tipos de evento único |
Uma matriz que contém vários eventos. Cada entrada representa um evento. |
Para outros cenários de saída, crie e use um EventHubProducerClient com outros tipos de Azure. Messaging.EventHubs diretamente. Consulte Register Azure clientes para obter um exemplo de como usar a injeção de dependência para criar um tipo de cliente do SDK do Azure.
Há duas opções para gerar uma mensagem dos Hubs de Eventos de uma função usando a anotação EventHubOutput:
Valor retornado: ao aplicar a anotação à própria função, o valor retornado da função será mantido como uma mensagem dos Hubs de Eventos.
Imperative: para definir explicitamente o valor da mensagem, aplique a anotação a um parâmetro específico do tipo
OutputBinding<T>, em queTé um POJO ou qualquer tipo de Java nativo. Com essa configuração, passar um valor para o métodosetValuemanterá o valor como uma mensagem dos Hubs de Eventos.
Exemplos completos do PowerShell estão pendentes.
Há duas opções para gerar uma mensagem dos Hubs de Eventos de uma função:
Valor retornado: definir a propriedade
nameno function.json para$return. Com essa configuração, o valor retornado da função será mantido como uma mensagem dos Hubs de Eventos.Imperativo: passe um valor para definir o método do parâmetro declarado como um tipo de Saída. O valor passado para
setserá mantido como uma mensagem dos Hubs de Eventos.
O parâmetro de função de saída deve ser definido como func.Out[func.EventHubEvent] ou func.Out[List[func.EventHubEvent]]. Consulte o exemplo de saída para obter detalhes.
conexões
A connection propriedade é definida como uma chave nas configurações da aplicação que retorna um valor usado pelo runtime de Funções para se conectar ao namespace dos Hubs de Eventos que contém o hub de eventos usado pela extensão. O valor da configuração da propriedade de conexão depende do tipo de conexão:
-
Conexão de identidade gerenciada: A
connectionpropriedade é compartilhada<CONNECTION_NAME_PREFIX>por um grupo de configurações que, juntas, definem uma conexão baseada em identidade com o namespace. Para mais informações, veja Definir conexões de identidade. -
Referência Key Vault: A
connectionconfiguração de propriedade retorna uma referência ao Azure Key Vault para o local onde a cadeia de conexão é mantida centralmente. Para mais informações, veja Definir conexões do Key Vault. -
Referência de App Configuration: A
connectionconfiguração de propriedade retorna uma referência ao Configuração de Aplicativos do Azure que retorna uma cadeia de conexão ou uma referência ao Key Vault. Para mais informações, veja Configuração de Aplicativos do Azure no artigo de conexões. -
Connection string: A
connectionconfiguração de propriedade retorna a cadeia de conexão real do namespace. O cadeia de conexão deve ser para um namespace dos Hubs de Eventos, não para o próprio hub de eventos. Como a cadeia de conexão contém chaves secretas compartilhadas, você deve considerar usar uma conexão de identidade gerenciada, sempre que possível. Para mais informações, veja Definir conexões.
Para saber mais sobre conexões de bindings, veja Gerenciar conexão no Azure Functions.
Para aprender como obter a cadeia de conexão para o namespace do seu Event Hubs, veja Obter uma cadeia de conexão dos Event Hubs.
Exceções e códigos de retorno
| Associação | Referência |
|---|---|
| Hubs de Eventos | Guia de Operações |