Compatibility tests between Moleculer implementations (Node.js, Java, Go, Ruby)
| Name | Language | Repository | Latest version | Lead Maintainer |
|---|---|---|---|---|
| moleculer-js | Node.js | https://github.com/moleculerjs/moleculer | 0.14.2 | icebob |
| moleculer-java | Java | https://github.com/moleculer-java/moleculer-java | 1.2.7 | berkesa |
| moleculer-go | Go | https://github.com/moleculer-go/moleculer | 0.2.1 | pentateu |
| moleculer-ruby | Ruby | https://github.com/moleculer-ruby/moleculer | 0.3 | fugufish |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
| Versioned service | ✔️ | ✔️ | ❌ | ❌ |
| Mixins | ✔️ | ❌ | ️️️✔ | ❌ |
| Setting | ✔️ | ✔️ | ✔ | ✔ |
| Metadata | ✔️ | ❌ | ✔ | ❌ |
| Dependencies | ✔️ | ✔️ | ✔ | ✔ |
| Lifecycle events | ✔️ | ️️️✔️ | ✔ | ❌ |
$node internal service |
✔️ | ❌ | ✔ | ❌ |
| Class-based service | ✔️ | ✔️ | ✔️ | ✔️ |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
| Local call | ✔️ | ✔️ | ✔️ | ✔️ |
| Remote call | ✔️ | ✔️ | ✔️ | ✔️ |
| Nested call | ✔️ | ✔️ | ✔ | ❌ |
| Direct call | ✔️ | ✔️ | ✔ | ❌ |
| Request metadata | ✔️ | ✔️ | ✔ | ❌ |
| Response metadata | ✔️ | ✔️ | ✔ | ❌ |
| Metadata merging | ✔️ | ✔️ | ✔ | ❌ |
| Parameter validation | ✔️ | ❌ | ❌ | ❌ |
| Stream in request | ✔️ | ✔️ | ❌ | ❌ |
| Stream in response | ✔️ | ✔️ | ❌ | ❌ |
| Action visibility | ✔️ | ❌ | ❌ | ❔ |
| Action hooks | ✔️ | ❌ | ❌ | ❌ |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
| Balanced events | ✔️ | ✔️ | ✔ | ✔ |
| Broadcast events | ✔️ | ✔️ | ✔ | ❌ |
| BroadcastLocal events | ✔️ | ✔️ | ✔ | ❌ |
| Context-based events | ✔️ | ️️✔️ | ❌️ | ❌ |
| Custom group definition | ✔️ | ️️✔️ | ✔ | ❌ |
| Internal events | ️ | ️️ | ||
$services.changed |
✔️ | ️️✔️ | ✔ | ❌ |
$node.* |
✔️ | ️️❌️ | ❌️ | ❌ |
$broker.* |
✔️ | ️️❌️ | ❌️ | ❌ |
$transporter.* |
✔️ | ️️❌️ | ❌️ | ❌ |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
| Circuit Breaker | ✔️ | ✔️ | ❌️ | ❔ |
| Retry | ✔️ | ✔️ | ❌️ | ❔ |
| Timeout | ✔️ | ✔️ | ❌️ | ❔ |
| Bulkhead | ✔️ | ❌️ | ❌️ | ❔ |
| Fallback | ✔️ | ❌️ | ️️️️️️❌️ | ❔ |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
| NATS | ✔️ | ✔️ | ✔️ | ❌ |
| Redis | ✔️ | ✔️ | ❌ | ✔ |
| MQTT | ✔️ | ✔️ | ❌ | ❌ |
| AMQP (0.9) | ✔️ | ✔️ | ❌ | ❌ |
| AMQP (1.0) | ❌ | ❌ | ❌ | ❌ |
| Kafka | ✔️ | ✔️ | ❌ | ❌ |
| NATS Streaming | ✔️ | ❌ | ✔️ | ❌ |
| TCP | ✔️ | ✔️ | ❌ | ❌ |
| Google PubSub | ❌ | ✔️ | ❌ | ❌ |
| JMS | ❌ | ✔️ | ❌ | ❌ |
| Custom | ✔️ | ✔️ | ✔️ | ❌ |
| Disabled balancing | ✔️ | ❌ | ✔️ | ❌ |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
| JSON | ✔️ | ✔️ | ✔️ | ✔️ |
| MsgPack/Notepack | ✔️ | ✔️ | ❔ | ❌ |
| Avro | ✔️ | ❌ | ❌ | ❌ |
| Protocol Buffer | ✔️ | ❌ | ❌ | ❌ |
| Thrift | ✔️ | ❌ | ❌ | ❌ |
| CBOR | ❌ | ✔️ | ❌ | ❌ |
| Amazon Ion | ❌ | ✔️ | ❌ | ❌ |
| BSON | ❌ | ✔️ | ❌ | ❌ |
| SMILE | ❌ | ✔️ | ❌ | ❌ |
| Custom | ✔️ | ✔️️️️️️️️ | ✔️ | ❔ |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
| Round-Robin | ✔️ | ✔️ | ✔️ | ️️✔️ |
| Random | ✔️ | ✔️ | ✔️ | ❌ |
| CPU usage | ✔️ | ✔️ | ❌️ | ❌️ |
| Latency-based | ✔️ | ✔️ | ❌️ | ❌️ |
| Shard | ✔️ | ✔️ | ❌ | ❌ |
| Custom | ✔️ | ✔️ | ✔️ | ❔ |
| Action-level strategy | ✔️ | ❌ | ❌ | ❌ |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
| Caching support | ✔️ | ✔️ | ❌ | ❌ |
| Time-To-Live | ✔️ | ✔️ | ❌ | ❌ |
| Custom key generator | ✔️ | ✔️ | ❌ | ❌ |
| Manual caching | ✔️ | ✔️ | ❌ | ❌ |
| Cache locking | ✔️ | ✔️ | ❌ | ❌ |
| Cachers | ||||
| - Memory | ✔️ | ✔️ | ❌ | ❌ |
| - Memory LRU | ✔️ | ✔️ | ❌ | ❌ |
| - Redis | ✔️ | ✔️ | ❌ | ❌ |
| - JCache | ❌ | ✔️ | ❌ | ❌ |
| - Off-heap | ❌ | ✔️ | ❌ | ❌ |
| - Custom | ✔️ | ✔️ | ❌ | ❌ |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
| Middleware support | ✔️ | ✔️ | ✔️ | ❌ |
| Hooks | ||||
- localAction |
✔️ | ✔️ | ❌ | ❌ |
- remoteAction |
✔️ | ✔️ | ❌ | ❌ |
- localEvent |
✔️ | ❌ | ❌ | ❌ |
- createService |
✔️ | ❌ | ✔️ | ❌ |
- destroyService |
✔️ | ❌ | ❌ | ❌ |
- call |
✔️ | ❌ | ❌ | ❌ |
- mcall |
✔️ | ❌ | ❌ | ❌ |
- emit |
✔️ | ❌ | ❌ | ❌ |
- broadcast |
✔️ | ❌ | ❌ | ❌ |
- broadcastLocal |
✔️ | ❌ | ❌ | ❌ |
- serviceCreated |
✔️ | ❌ | ❌ | ❌ |
- serviceStarting |
✔️ | ❌ | ❌ | ❌ |
- serviceStarted |
✔️ | ❌ | ❌ | ❌ |
- serviceStopping |
✔️ | ❌ | ❌ | ❌ |
- serviceStopped |
✔️ | ❌ | ❌ | ❌ |
- registerLocalService |
✔️ | ❌ | ❌ | ❌ |
- serviceCreating |
✔️ | ❌ | ❌ | ❌ |
- transitPublish |
✔️ | ❌ | ❌ | ❌ |
- transitMessageHandler |
✔️ | ❌ | ❌ | ❌ |
- transporterSend |
✔️ | ❌ | ❌ | ❌ |
- transporterReceive |
✔️ | ❌ | ❌ | ❌ |
- created |
✔️ | ❌ | ✔️ | ❌ |
- starting |
✔️ | ❌ | ✔️ | ❌ |
- started |
✔️ | ❌ | ✔️ | ❌ |
- stopping |
✔️ | ❌ | ✔️ | ❌ |
- stopped |
✔️ | ❌ | ✔️ | ❌ |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
| Metrics support | ✔️ | ❌ | ✔️ | ❌ |
| OS metrics | ✔️ | ❌ | ✔️ | ❌ |
| Process metrics | ✔️ | ❌ | ✔️ | ❌ |
| Moleculer metrics | ✔️ | ❌ | ✔️ | ❌ |
| User-defined metrics | ✔️ | ❌ | ❌ | ❌ |
| Metric types | ||||
| - Counter type | ✔️ | ❌ | ❌ | ❌ |
| - Gauge type | ✔️ | ❌ | ❌ | ❌ |
| - Info type | ✔️ | ❌ | ❌ | ❌ |
| - Histogram type | ✔️ | ❌ | ❌ | ❌ |
| - - Quantiles | ✔️ | ❌ | ❌ | ❌ |
| - - Buckets | ✔️ | ❌ | ❌ | ❌ |
| - - Rates | ✔️ | ❌ | ❌ | ❌ |
| Reporters | ||||
| - Console | ✔️ | ❌ | ❌ | ❌ |
| - CSV | ✔️ | ❌ | ❌ | ❌ |
| - Event | ✔️ | ❌ | ❌ | ❌ |
| - Datadog | ✔️ | ❌ | ❌ | ❌ |
| - Prometheus | ✔️ | ❌ | ✔️ | ❌ |
| - StatsD (UDP) | ✔️ | ❌ | ❌ | ❌ |
| - Custom reporter | ✔️ | ❌ | ❌ | ❌ |
| Multi reporters | ✔️ | ❌ | ❌ | ❌ |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
| Tracing support | ✔️ | ❌ | ❌ | ❌ |
| Nested spans | ✔️ | ❌ | ❌ | ❌ |
| Action span | ✔️ | ❌ | ❌ | ❌ |
| Event span | ✔️ | ❌ | ❌ | ❌ |
| User-defined span | ✔️ | ❌ | ❌ | ❌ |
| Exporters | ||||
| - Console | ✔️ | ❌ | ❌ | ❌ |
| - Datadog | ✔️ | ❌ | ❌ | ❌ |
| - Event | ✔️ | ❌ | ❌ | ❌ |
| - Jaeger | ✔️ | ❌ | ❌ | ❌ |
| - Zipkin | ✔️ | ❌ | ❌ | ❌ |
| - Custom exporter | ✔️ | ❌ | ❌ | ❌ |
| Multi exporters | ✔️ | ❌ | ❌ | ❌ |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
MoleculerError |
✔️ | ️️✔️ | ❌ | ❌ |
MoleculerRetryableError |
✔️ | ✔️ | ❌ | ❌ |
MoleculerServerError |
✔️ | ✔️ | ❌ | ❌ |
MoleculerClientError |
✔️ | ✔️ | ❌ | ❌ |
| Feature | Node.js | Java | Go | Ruby |
|---|---|---|---|---|
| Hot-reload | ✔️ | ✔️ | ❌ | ❌ |
| Runner/Starter | ✔️ | ✔️ | ✔ | ✔ |
| API Gateway | ✔️ | ✔️ | ✔ | ❌ |
| DB access service | ✔️ | ❌ | ✔ | ❌ |
| Ping nodes | ✔️ | ✔️ | ✔ | ❌ |
| Heartbeat | ✔️ | ✔️ | ✔ | ✔ |