This is a Moleculer-based microservices project. Generated with the Moleculer CLI.
Moleculer supports different deployment modes. The figures below represent the deployment and production architectures.
Switching between the architectures is automatically handled by moleculer. To run in dev mode use npm run dev
, for production mode run npm run dc:up
.
flowchart LR
classDef svc fill:lightblue
classDef brk fill:#fff2cc
classDef ext fill:violet
U(User browser)
U --> A
subgraph node1 [Monolith Node]
style node1 fill:#dae8fc,stroke:#c9d7eb
A("**API Gateway**
-HTTP Server
-GraphQL Server
-Socket.IO Server
")
A --> B
B((Service Broker))
G(Greeter Service):::svc
B <--> G
P(Products Service):::svc
DA(Database Adapter)
B <--> P
P <--> DA
DB[(MongoDB server)]:::ext
DA <--> DB
I(Inventory Service):::svc
CH(Channel Adapter)
B <--> I
I <--> CH
CH <--> Redis:::ext
O(Orders Service):::svc
WF(Workflow Adapter)
B <--> O
O <--> WF
WF <--> Redis:::ext
end
style B fill:orange
style A fill:lightgreen
style U fill:lightcyan
style node1 fill:#dae8fc,stroke:#c9d7eb
flowchart LR
classDef svc fill:lightblue
classDef brk fill:#fff2cc
classDef ext fill:violet
TX{ NATS Transporter}:::ext
subgraph node1 [Node 1]
style node1 fill:#dae8fc,stroke:#c9d7eb
A("**API Gateway**
-HTTP Server
-GraphQL Server
-Socket.IO Server
")
style A fill:lightgreen
B1((Service Broker)):::brk
A --> B1
end
B1 --> TX
U(User browser)
style U fill:lightcyan
U --> A
subgraph node2 [Node 2]
style node2 fill:#dae8fc,stroke:#c9d7eb
B2((Service Broker)):::brk
G(Greeter Service):::svc
B2 <--> G
end
TX --> B2
subgraph node3 [Node 3]
style node3 fill:#dae8fc,stroke:#c9d7eb
B3((Service Broker)):::brk
P(Products Service):::svc
DA(Database Adapter)
B3 <--> P
P <--> DA
end
TX --> B3
DB[(MongoDB server)]:::ext
DA <--> DB
subgraph node4 [Node 4]
style node4 fill:#dae8fc,stroke:#c9d7eb
B4((Service Broker)):::brk
I(Inventory Service):::svc
CH(Channel Adapter)
B4 <--> I
I <--> CH
end
TX --> B4
CH <--> Redis:::ext
subgraph node5 [Node 5]
style node5 fill:#dae8fc,stroke:#c9d7eb
B5((Service Broker)):::brk
O(Orders Service):::svc
WF(Workflow Adapter)
B5 <--> O
O <--> WF
end
TX --> B5
WF <--> Redis:::ext
Start the project with npm run dev
command.
After starting, open the http://localhost:3000/ URL in your browser.
On the welcome page you can test the generated services via API Gateway and check the nodes & services.
Open the http://localhost:3000/graphql URL in your browser to access the GraphQL Playground.
In the terminal, try using Moleculer REPL by running the following commands:
nodes
- List all connected nodes.services
- List all the available services.actions
- List all registered service actions.info
- List node info (e.g., IP, memory usage).call greeter.hello
- Call thegreeter.hello
action.call greeter.welcome --name John
- Call thegreeter.welcome
action with thename
parameter.call products.list
- List the products (call theproducts.list
action).
- api: API Gateway services
- greeter: Sample service with
hello
andwelcome
actions. - products: Sample DB service. To use with MongoDB, set
DB_URI
environment variables and install MongoDB adapter withnpm install mongodb
. - inventory: Sample service with a single
channel
handler that uses persistent queues to reliably process the messages. - workflows: Workflow sample service.
- db.mixin: Database access mixin for services. Based on moleculer/database
- Moleculer website: https://moleculer.services/
- Moleculer Documentation: https://moleculer.services/docs/0.15/
- Moleculer Database service: https://github.com/moleculerjs/database
- Moleculer API Gateway: https://moleculer.services/docs/0.15/moleculer-web.html
- Moleculer GraphQL Gateway: https://github.com/moleculerjs/moleculer-apollo-server
- Moleculer Socket.IO Gateway: https://github.com/moleculerjs/moleculer-io
- Moleculer Channels: https://github.com/moleculerjs/moleculer-channels
- Moleculer Workflows: https://github.com/moleculerjs/workflows
npm run dev
: Start development mode (load all services locally with hot-reload & REPL)npm run start
: Start production mode (setSERVICES
env variable to load certain services)npm run cli
: Start a CLI and connect to production. Don't forget to set production namespace with--ns
argument in scriptnpm run lint
: Run ESLintnpm run ci
: Run continuous test mode with watchingnpm test
: Run tests & generate coverage reportnpm run dc:up
: Start the stack with Docker Composenpm run dc:down
: Stop the stack with Docker Compose