Transporter is an important module if you are running services on multiple nodes. Transporter communicates with other nodes. It transfers events, calls requests and processes responses …etc. If a service runs on multiple instances on different nodes, the requests will be load-balanced among live nodes.
Built-in transporters
TCP transporter 
This is a no-dependency, zero-configuration TCP transporter. It uses Gossip protocol to disseminate node statuses, service list and heartbeats. It contains an integrated UDP discovery feature to detect new and disconnected nodes on the network.
If the UDP is prohibited on your network, you can use urls option. It is a list of remote endpoints (host/ip, port, nodeID). It can be a static list in your configuration or a file path which contains the list.
Please note, it is an experimental transporter. Do not use it in production yet!
Use TCP transporter with default options
const broker = new ServiceBroker({ |
All TCP transporter options with default values
const broker = new ServiceBroker({ |
TCP transporter with static endpoint list
const broker = new ServiceBroker({ |
You don’t need to set port because it find & parse the self TCP port from URL list.
TCP transporter with shorthand static endpoint list
It needs to start with tcp://.
const broker = new ServiceBroker({ |
TCP transporter with static endpoint list file
const broker = new ServiceBroker({ |
// nodes.json |
Serviceless nodePlease note, you don’t need to list all remote nodes. It’s enough at least one node which is online. For example, you can create a “serviceless” gossiper node, which does nothing, just shares other remote nodes addresses by gossip messages. So all nodes need to know only the gossiper node address to be able to communicate with all other nodes.
NATS Transporter 
Built-in transporter for NATS.
NATS Server is a simple, high performance open source messaging system for cloud-native applications, IoT messaging, and microservices architectures.
let { ServiceBroker } = require("moleculer"); |
DependenciesTo use this transporter install the
natsmodule withnpm install nats --savecommand.
Examples
// Connect to 'nats://localhost:4222' |
Redis Transporter 
Built-in transporter for Redis.
let { ServiceBroker } = require("moleculer"); |
DependenciesTo use this transporter install the
ioredismodule withnpm install ioredis --savecommand.
Examples
// Connect with default settings |
MQTT Transporter 
Built-in transporter for MQTT protocol (e.g.: Mosquitto).
let { ServiceBroker } = require("moleculer"); |
DependenciesTo use this transporter install the
mqttmodule withnpm install mqtt --savecommand.
Examples
// Connect with default settings |
AMQP Transporter 
Built-in transporter for AMQP protocol (e.g.: RabbitMQ).
let { ServiceBroker } = require("moleculer"); |
DependenciesTo use this transporter install the
amqplibmodule withnpm install amqplib --savecommand.
Transporter options
You can pass options to amqp.connect() method.
// Connect to 'amqp://guest:guest@localhost:5672' |
Kafka Transporter 
Built-in transporter for Kafka. It is a very simple implementation. It transfers Moleculer packets to consumers via pub/sub. There are not implemented offset, replay…etc features.
Please note, it is an experimental transporter. Do not use it in production yet!
DependenciesTo use this transporter install the
kafka-nodemodule withnpm install kafka-node --savecommand.
Connect to Zookeeper
const broker = new ServiceBroker({ |
Connect to Zookeeper with custom options
const broker = new ServiceBroker({ |
NATS Streaming (STAN) Transporter 
Built-in transporter for NATS Streaming. It is a very simple implementation. It transfers Moleculer packets to consumers via pub/sub. There are not implemented offset, replay…etc features.
Please note, it is an experimental transporter. Do not use it in production yet!
let { ServiceBroker } = require("moleculer"); |
DependenciesTo use this transporter install the
node-nats-streamingmodule withnpm install node-nats-streaming --savecommand.
Examples
// Connect with default settings |
Custom transporter
You can also create your custom transporter module. We recommend to copy the source of NatsTransporter and implement the connect, disconnect, subscribe and publish methods.
Use custom transporter
const { ServiceBroker } = require("moleculer"); |
Disabled balancer
Some transporter server has built-in balancer solution. E.g.: RabbitMQ, NATS, NATS-Streaming. If you want to use the transporter balancer instead of Moleculer balancer, use the disableBalancer broker option.
Example
const broker = new ServiceBroker({ |
Please noteIf you disable the built-in Moleculer balancer, all requests & events will be transferred via transporter (including local requests). E.g. you have a local math service and you call
math.addlocally, the request is transferred via transporter.