Para se comunicar com outros nós (ServiceBrokers) você precisa configurar um módulo de transporte. A maioria dos módulos de transporte suportados conecta-se a um broker central de mensagens que fornece uma forma confiável de troca de mensagens entre nós remotos. Esses brokers de mensagens suportam principalmente o padrão de publicação/assinatura.
Transporte
Transporter é um módulo importante se você estiver executando serviços em vários nós. O transporter se comunica com outros nós. Ele transfere eventos, chama requisições e processa respostas … etc. Se várias instâncias de um serviço estiverem sendo executadas em diferentes nós, então as solicitações serão balanceadas entre elas.
Toda a lógica da comunicação está fora da classe do módulo de transporte. Significa que é possível alternar entre módulos de transporte sem alterar linhas de código.
Existem vários módulos de transporte integrados no framework Moleculer.
TCP transporter
Este é um módulo de transporte via TCP sem dependências e configuração zero. Ele usa o Protocolo Gossip para disseminar status do nó, lista de serviço e sinais de vida. Contém um recurso integrado de descoberta UDP para detectar nós novos e nós desconectados na rede. Se o UDP for proibido na sua rede, use a opção urls
. É uma lista de endpoints remotos (host/ip, port, nodeID). Pode ser uma lista estática na sua configuração ou um caminho de arquivo que contenha a lista.
Use TCP transporter com opções padrão
// moleculer.config.js |
Todas as opções do TCP transporter com valores padrão
// moleculer.config.js |
TCP transporter com lista de endpoint estática
// moleculer.config.js |
Você não precisa definir o parâmetro port
porque ele encontra & analisa a porta TCP na lista de URL.
TCP Transporter com lista de endpoint estática e abreviada Precisa começar com tcp://
.
// moleculer.config.js |
TCP Transporter com arquivo de lista de endpoint estática
// moleculer.config.js |
// nodes.json |
Serviceless nodePor favor, note que você não precisa listar todos os nós remotos. É suficiente que pelo menos um nó esteja online. Por exemplo, crie um nó “sem serviço”, que não faz nada, apenas compartilha outros nós remotos através de mensagens redirecionadas. Portanto, todos os nós devem saber apenas o endereço do nó redirecionador para serem capazes de se comunicar com todos os outros nós.
NATS transporter
Módulo de transporte integrado para NATS.
O Servidor NATS é um sistema de mensagens de código aberto simples, de alto desempenho, para aplicativos nativos em nuvem, mensagens IoT e arquiteturas de microsserviços.
// moleculer.config.js |
DependenciesPara usar este transporter, instale o módulo
nats
com o comandonpm install nats --save
.
Exemplos
Conecte em ‘nats://localhost:4222’
// moleculer.config.js |
Conectar a um servidor NATS remoto
// moleculer.config.js |
Conecte a um servidor remoto do NATS com autenticação
// moleculer.config.js |
Conectar com opções
// moleculer.config.js |
Conectar com TLS
// moleculer.config.js |
Redis Transporter
Transporte integrado para Redis.
// moleculer.config.js |
DependenciesPara usar este transporter, instale o módulo
ioredis
usando o comandonpm install ioredis --save
.
Exemplos
Conecte com as configurações padrão
// moleculer.config.js |
Conectar-se com string de conexão
// moleculer.config.js |
Conectar a um servidor Redis seguro
// moleculer.config.js |
Conectar com opções
// moleculer.config.js |
Conectar ao cluster do Redis
// moleculer.config.js |
MQTT Transporter
Módulo de transporte integrado para protocolo MQTT (ex.: Mosquitto).
// moleculer.config.js |
DependenciesPara usar este transporter, instale o módulo
mqtt
com o comandonpm install mqtt --save
.
Exemplos
Conecte com as configurações padrão
// moleculer.config.js |
Conectar-se com string de conexão
// moleculer.config.js |
Conectar ao servidor MQTT seguro
// moleculer.config.js |
Conectar com opções
// moleculer.config.js |
AMQP (0.9) Transporter
Módulo de transporte integrado para o protocolo AMQP 0.9 (ex.: RabbitMQ).
// moleculer.config.js |
DependenciesPara usar este transporter, instale o módulo
amqplib
com o comandonpm install amqplib --save
.
Opções do transporter
As opções podem ser passadas para o método amqp.connect()
.
Conectar a ‘amqp://guest:guest@localhost:5672’
// moleculer.config.js |
Conectar a um servidor remoto
// moleculer.config.js |
Conecte-se a um servidor seguro
// moleculer.config.js |
Conecte-se a um servidor remoto com opções & credenciais
// moleculer.config.js |
AMQP 1.0 Transporter
Módulo de transporte integrado para o protocolo AMQP 1.0 (ex.: ActiveMq ou RabbitMQ + rabbitmq-amqp1.0 plugin).
Por favor note que é um transporter experimental. Não use ainda em produção!
// moleculer.config.js |
DependenciesPara usar este transporter, instale o módulo
rhea-promise
usando o comandonpm install rhea-promise --save
.
Opções do transporter
As opções podem ser passadas para o método rhea.connection.open()
, para os tópicos, as filas e as próprias mensagens.
Conectar a ‘amqp10://guest:guest@localhost:5672’
// moleculer.config.js |
Conectar a um servidor remoto
// moleculer.config.js |
Conecte-se a um servidor remoto com opções & credenciais
// moleculer.config.js |
Kafka Transporter
Módulo de transporte integrado para Kafka.
Trata-se de uma implementação simples. Transfere pacotes Moleculer para consumidores através de pub/sub. Não há offset implementado, recursos de replay… etc.
DependenciesPara usar este transporter, instale o módulo
kafka-node
com o comandonpm install kafka-node --save
.
Conectar ao Zookeeper
// moleculer.config.js |
Conectar ao Zookeeper com opções personalizadas
// moleculer.config.js |
NATS Streaming (STAN) Transporter
Módulo de Transporte integrado para NATS Streaming.
Trata-se de uma implementação simples. Transfere pacotes Moleculer para consumidores através do pub/sub. Não há offset implementado, recursos de replay… etc.
// moleculer.config.js |
DependenciesPara usar este transporter instale o módulo
node-nats-streaming
com o comandonpm install node-nats-streaming --save
.
Exemplos
Conecte com as configurações padrão
// moleculer.config.js |
Conectar-se com string de conexão
// moleculer.config.js |
Conectar com opções
// moleculer.config.js |
Módulo de Transporte personalizado
Um módulo personalizado de transporte pode ser criado. Recomendamos copiar a fonte do NatsTransporter e implementar os métodos de connect
, disconnect
, subscribe
e send
.
Criar transporter personalizado
const BaseTransporter = require("moleculer").Transporters.Base; |
Usar transporter personalizado
// moleculer.config.js |
Balanceador desativado
Alguns servidores de módulos de transporte possuem uma solução de balanceamento integrada. Ex.: RabbitMQ, NATS, NATS-Streaming. Se você quiser usar o balanceador do transporter em vez do balanceador do Moleculer, defina a opção disableBalancer
do broker como true
.
Exemplo
// moleculer.config.js |
Please noteSe você desativar o balanceamento interno do Moleculer, todas as requisições & eventos serão transferidos via transporter (incluindo requisições locais). Por exemplo, você possui um serviço de cálculo matemático local e você chama
math.add
localmente, a requisição será enviada pelo transporter.
Serialização
O transporter precisa de um módulo serializador que serializa & desserializa os pacotes transferidos. O serializador padrão é o JSONSerializer
mas há vários serializadores integrados.
Note que certos tipos de dados (por exemplo, Date, Map, BigInt) não podem ser serializados com o serializador de JSON nativo. Se você está trabalhando com esse tipo de dados considere o uso do Avro, Notepack ou qualquer outro serializador binário.
Exemplo
// moleculer.config.js |
Serializador JSON
Este é o serializador padrão. Ele serializa os pacotes para a string JSON e desserializa os dados recebidos para o pacote.
// moleculer.config.js |
Serializador Avro
Serializador Avro integrado.
// moleculer.config.js |
DependenciesPara usar este serializador instale o módulo
avsc
com o comandonpm install avsc --save
.
Serializador MsgPack
Serializador MsgPack integrado.
// moleculer.config.js |
DependenciesPara usar esse serializador instale o módulo
msgpack5
com o comandonpm install msgpack5 --save
.
Serializador Notepack
Serializador Notepack integrado.
// moleculer.config.js |
DependenciesPara usar esse serializador instale o módulo
notepack
usando o comandonpm install notepack.io --save
.
Serializador ProtoBuf
Serializador Protocol Buffer integrado.
// moleculer.config.js |
DependenciesPara usar este serializador instale o módulo
protobufjs
com o comandonpm install protobufjs --save
.
Serializador Thrift
Serializador Thrift integrado.
// moleculer.config.js |
DependenciesPara usar esse serializador instale o módulo
thrift
usando o comandonpm install thrift --save
.
Serializador CBOR
CBOR (cbor-x) é mais rápido que qualquer outro serializador.
Exemplo
// moleculer.config.js |
Serializador personalizado
Um módulo serializador personalizado pode ser criado. Recomendamos copiar a fonte do JSONSerializer e implementar os métodos serialize
e deserialize
.
Criar serializador personalizado
const BaseSerializer = require("moleculer").Serializers.Base; |
Usar serializador personalizado
// moleculer.config.js |