API Microservices를 각각 MongoDB 및 MySQL과 Node.js의 API 게이트웨이 패턴을 사용하여 Docker 컨테이너에 빌드
각각 특정 데이터베이스(MongoDB 및 MySQL)가 있는 도커화된 API 마이크로서비스를 구축하고 API 게이트웨이 패턴을 구조화하는 방법을 알아보겠습니다.
전체 프로젝트는 다음과 같습니다: https://github.com/luizcalaca/microservices-nodejs-docker-gateway-api 별표 ⭐️를 주고 코드를 가지고 놀아보세요.
마이크로서비스 및 API 게이트웨이 패턴이란 무엇입니까?
계속해서 Azure의 이미지를 살펴보겠습니다. 여기에서 클라이언트에 대한 엔드포인트가 있는 마이크로 서비스 및 API 게이트웨이를 빌드할 것입니다.
index.js 및 Node.js를 사용하여 각각 threes 폴더를 만들 수 있습니다.
mkdir orders && cd orders && npm init -y && touch index.js
mkdir products && cd orders && npm init -y && touch index.js
mkdir api-gateway && cd gateway && npm init -y && touch index.js
index.js 주문:
const app = require('express')();
app.get('/orders', (req, res) => res.send('Hello Orders, API!'));
app.listen(3000, () => console.log(`Products API listening on port 3000!`));
index.js 제품:
const app = require('express')();
app.get('/products', (req, res) => res.send('Hello Products, API with MySQL!'));
app.listen(3000, () => console.log(`Products API listening on port 3000!`));
index.js API 게이트웨이:
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
const port = 3007;
const {
ORDERS_API_URL,
PRODUCTS_API_URL,
} = require('./URLs');
const optionsProducts = {
target: PRODUCTS_API_URL,
changeOrigin: true,
logger: console,
};
const optionsOrders = {
target: ORDERS_API_URL,
changeOrigin: true,
logger: console,
};
const productsProxy = createProxyMiddleware(optionsProducts);
const ordersProxy = createProxyMiddleware(optionsOrders);
app.get('/', (req, res) => res.send('Hello Gateway API'));
app.get('/orders', ordersProxy);
app.get('/products', productsProxy);
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
api-gateway의 동일한 index.js 파일 계층 구조에 있는 URLs.js:
module.exports = {
ORDERS_API_URL: 'http://localhost:3005',
PRODUCTS_API_URL: 'http://localhost:3006',
};
모든 package.json에 npm 시작 스크립트를 추가합니다.
"scripts": {
"start": "node index.js"
}
express 및 express-http-proxy를 설치한 후:
cd orders && npm i express
cd orders && npm i express
cd api-gateway && npm i express express-http-proxy
먼저 MongoDB 이미지로 주문한 Dockerfile과 docker-compose.yaml을 생성해 보겠습니다.
FROM node:alpine
WORKDIR /usr/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD npm start
version: "3"
services:
app:
build: .
command: npm start
ports:
- "3005:3000"
volumes:
- .:/usr/app
depends_on:
- "mongo"
networks:
- backend
mongo:
container_name: "mongo-node"
platform: linux/amd64
image: mongo:4.4.14
ports:
- "8081:8081"
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: root
networks:
- backend
networks:
backend:
driver: bridge
둘째, MySQL 데이터베이스 이미지가 포함된 제품:
FROM node:alpine
WORKDIR /usr/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD npm start
version: "3"
services:
app:
build: .
command: npm start
ports:
- "3006:3000"
volumes:
- .:/usr/app
depends_on:
- "mysql"
networks:
- backend
mysql:
container_name: "data-node"
platform: linux/amd64
image: mysql:5.7.31
command: --default-authentication-plugin=mysql_native_password --sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER --explicit_defaults_for_timestamp
restart: always
ports:
- "3310:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
- TZ=America/Sao_Paulo
networks:
- backend
networks:
backend:
driver: bridge
달리는 방법?
cd /products
docker-compose up
cd /orders
docker-compose up
cd /api-gateway
npm start
http://localhost:3007/orders
http://localhost:3007/products
전체 프로젝트는 다음과 같습니다: https://github.com/luizcalaca/microservices-nodejs-docker-gateway-api 별표 ⭐️를 주고 코드를 가지고 놀아보세요.
"그게 다야!"
콘택트 렌즈
이메일: [email protected]
인스 타 그램:
링크드인:
트위터:
Reference
이 문제에 관하여(API Microservices를 각각 MongoDB 및 MySQL과 Node.js의 API 게이트웨이 패턴을 사용하여 Docker 컨테이너에 빌드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/luizcalaca/building-api-microservices-into-docker-containers-each-one-with-mongodb-and-mysql-and-api-gateway-pattern-in-nodejs-4h4j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)