# Como integrar Centros de Distribuição usando Multi-Instância

## **Visão geral**

Este artigo mostra como usar o recurso de [**Multi-Instância**](https://app.gitbook.com/s/cO0A6g1dOsu8BiHYqO67/platform-administration/settings/multi-instance) da Digibee Integration Platform para resolver um cenário em que o sistema central de uma empresa de varejo precisa consumir informações de estoque de vários Centros de Distribuição, cada um com sua própria fila de mensageria.

## **Cenário**

<figure><img src="https://2538031102-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXfrDexGOLMin51pAiWkq%2Fuploads%2FHJntq669zzdk2f8qHtZ9%2FDC%201%20(1).png?alt=media&#x26;token=152ce7bc-684c-48f0-a3cd-4718d0fa7578" alt=""><figcaption></figcaption></figure>

Imagine uma rede de varejo na qual os Centros de Distribuição (**CDs**) publicam atualizações de estoque em um broker **RabbitMQ**, que posteriormente envia essas informações ao ERP (Planejamento de Recursos Empresariais).

Normalmente, bastaria um pipeline com um trigger [**RabbitMQ**](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/triggers/messaging-and-events/rabbitmq) apontando para o broker. Porém, se cada CD tiver uma fila ou até mesmo um host diferente, o trigger não poderá consumir mensagens de múltiplas origens.

O recurso **Multi-Instância** resolve esse desafio ao permitir que você:

* Mantenha **um único pipeline** com a mesma lógica de processamento.
* **Implante instâncias dedicadas** para cada CD, com parâmetros específicos (host, porta, fila, entre outros).

Dessa forma, o processamento permanece padronizado, enquanto as configurações variam conforme a necessidade.

{% hint style="warning" %}
A lógica do pipeline deve ser idêntica entre as instâncias. É uma boa prática manter as mesmas etapas em todas elas, evitando tratamentos condicionais baseados na instância.
{% endhint %}

## **Arquitetura**

<figure><img src="https://2538031102-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXfrDexGOLMin51pAiWkq%2Fuploads%2FwEofuzURCyooPox9Y3IW%2FPortuguese.png?alt=media&#x26;token=b97ee64b-862b-4189-9348-422a1e4d8e82" alt=""><figcaption></figcaption></figure>

Cada Centro de Distribuição (**CD1**, **CD2** e **CD3**) envia atualizações de estoque por meio do **RabbitMQ (AMQP)**.

Na Digibee, um **pipeline Multi-Instância** configurado com **tamanho small**, **10 consumidores** e **1 réplica** coleta as mensagens, processa as informações e as envia para o **ERP**, onde são armazenadas em um **banco de dados SQL**.

Essa arquitetura garante **centralização**, **automação** e **escalabilidade** no controle de estoque.

## **Colocando a teoria em prática**

Para construir a solução apresentada acima, siga as etapas abaixo.

{% stepper %}
{% step %}

### Crie o modelo Multi-Instância

Na página inicial da Plataforma, clique no ícone de **Configurações** no canto superior direito, acesse o menu **Multi-Instância** e clique em **Criar**.

Preencha os campos:

* **Nome:** `warehouse-stock-queue`
* **Descrição:** Insira um texto explicando o uso deste modelo, por exemplo: “Modelo Multi-Instância para consumir filas independentes de brokers RabbitMQ, com uma instância dedicada para cada centro de distribuição”.
* **Campos:** Adicione os seguintes campos, pressionando **Enter** entre cada um:
  * `warehouse-cd`: Código do centro de distribuição.
  * `host`: IP do servidor RabbitMQ do CD.
  * `port`: Porta do servidor RabbitMQ.
  * `virtual-host`: Host virtual do RabbitMQ.
  * `queue`: Fila RabbitMQ com as mensagens do CD.

Clique em **Salvar** para criar o modelo.

<figure><img src="https://2538031102-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXfrDexGOLMin51pAiWkq%2Fuploads%2Fwsasi8DNqzYTGyPhgEGy%2Fcriar-multi-instancia.png?alt=media&#x26;token=22d6083b-a37c-49af-ab13-8fef2127ee65" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Cadastre as instâncias e preencha os dados

1. Com o modelo criado, clique em **Configurar Multi-Instância** (segundo ícone na coluna de **Ações** da tabela de modelos Multi-Instância) e depois em **Criar**.
2. Cadastre as instâncias correspondentes às filas de cada CD (**cd1**, **cd2** e **cd3**):

* Preencha o campo **Nome**.
* Preencha os demais parâmetros — `port`, `host`, `virtual-host`, `warehouse-cd` e `queue` — conforme a configuração de cada ambiente.

3. Clique em **Salvar**.
4. Repita o processo para cada CD.

<figure><img src="https://2538031102-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXfrDexGOLMin51pAiWkq%2Fuploads%2FhdGOUsegmGLtWoYpvFqy%2Fcadastrar-inst%C3%A2ncia.gif?alt=media&#x26;token=7f8e3c4c-6dce-488b-b2d8-f980fa922121" alt=""><figcaption></figcaption></figure>

Para cada CD, há uma instância configurada conforme sua respectiva fila RabbitMQ, tanto para teste quanto para produção.<br>
{% endstep %}

{% step %}

### Vincule o modelo Multi-Instância ao pipeline

Com a Multi-Instância criada e configurada, o próximo passo é vinculá-la ao pipeline que utilizará esses dados.

{% hint style="info" %}
Um mesmo modelo Multi-Instância pode ser vinculado a quantos pipelines forem necessários.
{% endhint %}

Para fazer o vínculo:

1. Acesse o pipeline desejado.
2. Abra o menu de **Configurações**.
3. Marque a opção **É Multi-Instância**.
4. Selecione o modelo **`warehouse-stock-queue`**.

<figure><img src="https://2538031102-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXfrDexGOLMin51pAiWkq%2Fuploads%2FEaXGe6ehcTR1pWChnlbd%2Fvincular-pipeline.gif?alt=media&#x26;token=8dc0ab94-643f-44ad-b892-47838f9f1863" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
Após definir o pipeline como Multi-Instância, **não é possível reverter** essa configuração. Por outro lado, qualquer pipeline, implantado ou não, pode ser transformado em Multi-Instância.
{% endhint %}
{% endstep %}

{% step %}

### Referencie os campos da Multi-Instância

Conforme descrito na [documentação sobre criação de pipelines Multi-Instância](https://app.gitbook.com/s/cO0A6g1dOsu8BiHYqO67/platform-administration/settings/multi-instance/multi-instance), para referenciar o valor de um campo configurado em uma instância, use a notação:

```
{{replica.nome_da_variável_da_instância}}
```

No exemplo deste documento, esses campos são usados no trigger **RabbitMQ** da seguinte forma:

* **Hostname:** `{{replica.host}}`
* **Port:** `{{replica.port}}`
* **The RabbitMQ Queue To Consume Messages From:** `{{replica.queue}}`

<figure><img src="https://2538031102-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXfrDexGOLMin51pAiWkq%2Fuploads%2FFhB9MBDeiDSl5yM6V2Dd%2Freferenciar%20campos.png?alt=media&#x26;token=37fb595f-35e1-4006-9781-026d7fd4f763" alt=""><figcaption></figcaption></figure>

Assim, ao implantar o pipeline para uma instância (**cd1**, **cd2** ou **cd3**), o trigger assume automaticamente os valores configurados.

Os campos da Multi-Instância também podem ser usados em outros conectores.

Exemplo com o [**JSON Generator**](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/connectors/tools/json-generator):

```json
{
  "warehouse": "{{replica.warehouse-cd}}",
  "host": "{{replica.host}}",
  "port": {{replica.port}},
  "queue": "{{replica.queue}}"
}
```

{% endstep %}

{% step %}

### Teste o pipeline Multi-Instância

Para testar o pipeline, vá até o [**Painel de Execução**](https://app.gitbook.com/s/cO0A6g1dOsu8BiHYqO67/development-cycle/build-overview/canvas/execution-panel). Antes de iniciar o teste, selecione a instância desejada no campo **Multi-Instância** e clique em **Executar** para visualizar o resultado daquela instância.

<figure><img src="https://2538031102-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXfrDexGOLMin51pAiWkq%2Fuploads%2F2OUEzX0K3v0EUUgrT7At%2Ftestar-inst%C3%A2ncia.gif?alt=media&#x26;token=488d1637-91a2-4d47-8006-ab798955105b" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Implante as instâncias do pipeline

A implantação de um pipeline Multi-Instância é feita **por instância**. Embora o pipeline seja único, cada instância é implantada de forma independente (**cd1**, **cd2**, **cd3**).

Durante a [implantação](https://app.gitbook.com/s/cO0A6g1dOsu8BiHYqO67/development-cycle/overview/deployment/deployments), selecione a instância desejada no campo **Instância** do formulário.

<figure><img src="https://2538031102-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXfrDexGOLMin51pAiWkq%2Fuploads%2FRL488vrTECMX6DrCElXw%2Fimplantar-inst%C3%A2ncia.png?alt=media&#x26;token=2ca14c46-ada5-4dd5-be8f-c955965d0b40" alt=""><figcaption></figcaption></figure>

Assim, é possível escalar conforme a demanda de cada CD.

Por exemplo, se o **CD3** tiver maior volume de transações, adicione mais réplicas do pipeline apenas para ele (escala horizontal).

{% hint style="warning" %}
Cada instância implantada recebe o nome da instância como sufixo do pipeline (**cd1**, **cd2**, **cd3**). Embora compartilhem a mesma lógica, as instâncias funcionam como unidades de execução independentes.
{% endhint %}
{% endstep %}
{% endstepper %}

## **Considerações finais**

O recurso **Multi-Instância** centraliza a manutenção de pipelines e oferece flexibilidade por meio de parametrização avançada.

No cenário apresentado, cada Centro de Distribuição executa o mesmo pipeline com suas próprias configurações de fila e processamento, o que proporciona **escalabilidade**, **simplicidade operacional** e **redução de esforço de manutenção**.

Com o novo [**Modelo Baseado em Consumo**](https://app.gitbook.com/s/raAdQeslZX4ctbTfiN6W/licensing-models/consumption-based-model), o número de instâncias implantadas não impacta diretamente os custos, mantendo o modelo alinhado à demanda real de transações.

**Principais benefícios do Multi-Instância:**

* **Escalabilidade por instância:** Cada instância pode ser escalada de forma independente, horizontal ou verticalmente.
* **Manutenção centralizada:** Um único pipeline serve a todas as instâncias, simplificando a gestão.
* **Parametrização flexível:** Os campos da Multi-Instância permitem configurar variações específicas.
* **Facilidade de expansão:** Para incluir um novo CD, basta criar uma nova instância no modelo e implantá-la.
* **Implantação gradual:** Ideal para rollouts parciais e adoção progressiva.
