# Event Publisher

Um evento é uma mensagem que notifica outros componentes sobre uma mudança de estado, uma ação ou um fato ocorrido. O **Event Publisher** publica um evento para que outros *pipelines* configurados para escutá-lo possam reagir quando a publicação ocorrer.

Para mais informações, [leia a documentação sobre Arquitetura orientada a eventos](/documentation/resources/pt-br/best-practices/event-oriented-architecture.md).

## Parâmetros

Dê uma olhada nos parâmetros de configuração do componente. Parâmetros suportados por [expressões *Double Braces*](/documentation/connectors-and-triggers/pt-br/double-braces/overview.md) estão marcados com `(DB)`.

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th width="291">Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>Event</strong> <code>(DB)</code></td><td>Nome do evento criado que será publicado para consumo por outros <em>pipelines</em>.</td><td>{{ DEFAULT(message.eventName, "new-event") }}</td><td><em>String</em></td></tr><tr><td><strong>Body</strong> <code>(DB)</code></td><td><em>Payload</em> a ser enviado com o evento.</td><td>{{ message.$ }}</td><td>JSON</td></tr><tr><td><strong>Log Each Event Sent</strong></td><td>Quando ativada, a opção irá gerar uma entrada de <em>log</em> para cada evento enviado.</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Fail On Error</strong></td><td>Se a opção estiver habilitada, a execução do pipeline com erro será interrompida; do contrário, a execução do pipeline continua, mas o resultado vai mostrar um valor falso para a propriedade "success".</td><td><em>False</em></td><td>Booleano</td></tr></tbody></table>

## Como o Event Publisher é utilizado? <a href="#como-o-event-publisher--utilizado" id="como-o-event-publisher--utilizado"></a>

Para implementar uma Arquitetura Orientada a Eventos é necessário definir:

* o *pipeline* que publicará o evento (Publicador);
* um ou mais *pipelines* que irão consumir o evento (Assinantes).

Para configurar o *pipeline* que publicará o evento:

* arraste o **Event Publisher** para o *canvas* do *pipeline* Publicador;
* configure o nome do evento no parâmetro **Event** do **Event Publisher**;
* caso deseje passar um *payload* junto com o evento, defina o conteúdo do parâmetro **Body**.

Para configurar o *pipeline* que consumirá o evento:

* altere o tipo do *trigger* para [**Event Trigger**](/documentation/connectors-and-triggers/pt-br/triggers/messaging-and-events/event.md) no *pipeline* Assinante;
* abra as configurações do *trigger* e informe o nome do evento a ser consumido no parâmetro **Event Name**. Esse valor deve ser idêntico ao informado no **Event Publisher** do *pipeline* Publicador.

## **Cenários de erro**

### **java.util.NoSuchElementException: Timeout waiting for idle object**

Quando utilizar o **Event Publisher**, o seguinte erro pode ocorrer: `java.util.NoSuchElementException: Timeout waiting for idle object`

Isso significa que o componente está com dificuldades para lidar com a grande quantidade de eventos que estão sendo enviados ao mesmo tempo. Para resolver essa situação, você tem duas opções:

* **Aumentar o número de réplicas do&#x20;*****pipeline***: isso ajuda a distribuir a carga de eventos de forma mais eficiente e reduzir a pressão sobre o componente para que ele processe os eventos de maneira mais fluida.
* **Implementar um tratamento de erros com o Retry:** essa abordagem envolve o uso do componente **Retry** para para fazer novas tentativas de envio dos eventos que causaram o erro. Isso pode ser útil para lidar com picos de carga temporários ou eventos que ocasionalmente falham.

## Fluxo de mensagens <a href="#fluxo-de-mensagens" id="fluxo-de-mensagens"></a>

### **Entrada** <a href="#entrada" id="entrada"></a>

O componente espera uma mensagem válida em formato JSON. Não é esperado nenhum atributo específico. A mensagem de entrada poderá ser referenciada através de *Double Braces* tanto para a configuração do parâmetro **Event** quanto do parâmetro **Body**. Por exemplo, digamos que a mensagem abaixo fosse passada para o **Event Publisher**:

```
{
"eventName": "example",
"body": {
"id": "1",
"description": "Description of the case"
}
}
```

Você poderia definir uma expressão *Double Braces* no parâmetro **Event** para obter o valor do atributo `eventName`:

```
{{ message.eventName }}
```

O atributo `body` também poderia ser configurado da mesma forma:

```
{{ message.body }}
```

### **Saída** <a href="#sada" id="sada"></a>

O componente repassa a mensagem recebida do componente anterior sem nenhuma alteração. No caso do exemplo acima, a mensagem repassada seria:

```
{
"eventName": "example",
"body": {
"id": "1",
"description": "Description of the case"
}
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/connectors/queues-and-messaging/event-publisher.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
