├── .gitignore ├── package.json ├── readme.md ├── services ├── email.service.js ├── user.service.js └── auth.service.js └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "microservices-example", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "type": "module", 7 | "scripts": { 8 | "start": "node index" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "moleculer": "^0.14.32" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Microservices Example 2 | 3 | Simple example of how to create microservices with the [Moleculer framework](https://moleculer.services). 4 | 5 | This is the code from the [Microservices Crash Course](https://youtu.be/fEDT4lWWe9g) on YouTube. There are 3 very simple services (user, email, auth) with actions to mock/simulate creating a user, getting users, sending an email and authenticating a user. 6 | 7 | ## Usage 8 | 9 | Run the services: 10 | 11 | ```bash 12 | npm start 13 | ``` 14 | -------------------------------------------------------------------------------- /services/email.service.js: -------------------------------------------------------------------------------- 1 | import { ServiceBroker } from 'moleculer'; 2 | 3 | const broker = new ServiceBroker(); 4 | 5 | broker.createService({ 6 | name: 'email', 7 | actions: { 8 | async sendEmail(ctx) { 9 | const { recipient, subject, content } = ctx.params; 10 | // Simulated email logic 11 | console.log(`Sending email to ${recipient} with subject ${subject}`); 12 | console.log(`Content: ${content}`); 13 | return `Email sent to ${recipient}`; 14 | }, 15 | }, 16 | }); 17 | 18 | export default broker; 19 | -------------------------------------------------------------------------------- /services/user.service.js: -------------------------------------------------------------------------------- 1 | import { ServiceBroker } from 'moleculer'; 2 | 3 | const broker = new ServiceBroker(); 4 | 5 | function generateId() { 6 | return Math.floor(Math.random() * 1000) + 1; 7 | } 8 | 9 | const users = []; 10 | 11 | broker.createService({ 12 | name: 'user', 13 | actions: { 14 | async createUser(ctx) { 15 | const { username, email } = ctx.params; 16 | const newUser = { id: generateId(), username, email }; 17 | users.push(newUser); 18 | return newUser; 19 | }, 20 | async getUsers(ctx) { 21 | return users; 22 | }, 23 | }, 24 | }); 25 | 26 | export default broker; 27 | -------------------------------------------------------------------------------- /services/auth.service.js: -------------------------------------------------------------------------------- 1 | import { ServiceBroker } from 'moleculer'; 2 | 3 | const broker = new ServiceBroker(); 4 | 5 | broker.createService({ 6 | name: 'auth', 7 | actions: { 8 | async authUser(ctx) { 9 | const { username, password } = ctx.params; 10 | 11 | if (username === 'admin' && password === 'password') { 12 | return { 13 | success: true, 14 | message: 'Auth was successful', 15 | }; 16 | } else { 17 | return { 18 | success: false, 19 | message: 'Auth failed', 20 | }; 21 | } 22 | }, 23 | }, 24 | }); 25 | 26 | export default broker; 27 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import UserService from './services/user.service.js'; 2 | import EmailService from './services/email.service.js'; 3 | import AuthService from './services/auth.service.js'; 4 | 5 | async function startApp() { 6 | // Start services 7 | await UserService.start(); 8 | await EmailService.start(); 9 | await AuthService.start(); 10 | 11 | try { 12 | // Simulate user creation 13 | const newUser = await UserService.call('user.createUser', { 14 | username: 'john', 15 | email: 'john@gmail.com', 16 | }); 17 | console.log('New User Created:', newUser); 18 | const users = await UserService.call('user.getUsers'); 19 | console.log('All Users:', users); 20 | 21 | // Simulate sending email 22 | const emailResult = await EmailService.call('email.sendEmail', { 23 | recipient: newUser.email, 24 | subject: 'Welcome to our platform!', 25 | content: 'Thank you for signing up', 26 | }); 27 | console.log(emailResult); 28 | 29 | // Simulate auth 30 | const authResult = await AuthService.call('auth.authUser', { 31 | username: 'admin', 32 | password: 'password', 33 | }); 34 | 35 | console.log('Auth result:', authResult); 36 | } catch (error) { 37 | console.log('Error:', error); 38 | } finally { 39 | await UserService.stop(); 40 | await EmailService.stop(); 41 | await AuthService.stop(); 42 | } 43 | } 44 | 45 | startApp(); 46 | --------------------------------------------------------------------------------