정지된 Express Gateway를 사용하여 마이크로 서비스 응용 프로그램을 만듭니다.
13513 단어 microservicesgatewayexpressdocker
API 게이트웨이란 무엇입니까?
마이크로서비스를 만들기 위한 가장 기본적인 요구 사항 중 하나는 API 게이트웨이입니다.API 게이트웨이는 마이크로서비스 앞에 위치한 인프라 계층입니다.그것의 목적은 클라이언트의 요청 경로를 정확한 마이크로 서비스로 바꾸어 서비스를 제공하는 것이다.
본고는 어떻게 매우 간단한 노드를 만드는지 소개한다.Docked Express API 게이트웨이를 사용하는 js 마이크로 서비스 응용 프로그램
선결 조건
이 예시 항목은 필요한 것이 매우 적다.
Express Gateway의 Docker 이미지를 가져오고 실행합니다.
터미널에서 다음 명령을 실행하여 docker 이미지를 추출합니다.
docker pull express-gateway
이미지를 드래그한 후 폴더를 만들고 해당 이름을 Config로 지정합니다.이 폴더의terminal을 열고 다음 명령을 실행합니다.touch gateway.config.yml
touch system.config.yml
먼저gateway에서 아래의 YAML 코드를 복사하고 붙여넣습니다.배치하다.yml.(나는 Supreme 텍스트 편집기를 사용해서 이 점을 실현했지만, 다른 텍스트 편집기는 모두 가능하다)http:
port: 8080
admin:
port: 9876
host: localhost
apiEndpoints:
api:
host: localhost
paths: '/ip'
serviceEndpoints:
httpbin:
url: 'https://httpbin.org'
policies:
- basic-auth
- cors
- expression
- key-auth
- log
- oauth2
- proxy
- rate-limit
pipelines:
default:
apiEndpoints:
- api
policies:
# Uncomment `key-auth:` when instructed to in the Getting Started guide.
# - key-auth:
- proxy:
- action:
serviceEndpoint: httpbin
changeOrigin: true
시스템에서 아래의 YAML 코드를 복사하여 붙여넣습니다.배치하다.yml 파일.# Core
db:
redis:
emulate: true
namespace: EG
#plugins:
# express-gateway-plugin-example:
# param1: 'param from system.config'
crypto:
cipherKey: sensitiveKey
algorithm: aes256
saltRounds: 10
# OAuth2 Settings
session:
secret: keyboard cat
resave: false
saveUninitialized: false
accessTokens:
timeToExpiry: 7200000
refreshTokens:
timeToExpiry: 7200000
authorizationCodes:
timeToExpiry: 300000
이제 Config에서 models라는 다른 폴더를 만듭니다.terminal at models를 열고 다음 명령을 실행하여 세 개의 파일을 만듭니다.touch applications.json
touch credentials.json
touch users.json
응용 프로그램에서 다음 코드를 복사하여 붙여넣습니다.json.{
"$id": "http://express-gateway.io/models/applications.json",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"redirectUri": {
"type": "string",
"format": "uri"
}
},
"required": [
"name"
]
}
그런 다음 자격 증명에 다음 코드를 복사하여 붙여넣습니다.json{
"$id": "http://express-gateway.io/models/credentials.json",
"type": "object",
"definitions": {
"credentialBase": {
"type": "object",
"properties": {
"autoGeneratePassword": {
"type": "boolean",
"default": true
},
"scopes": {
"type": [
"string",
"array"
],
"items": {
"type": "string"
}
}
},
"required": [
"autoGeneratePassword"
]
}
},
"properties": {
"basic-auth": {
"allOf": [
{
"$ref": "#/definitions/credentialBase"
},
{
"type": "object",
"properties": {
"passwordKey": {
"type": "string",
"default": "password"
}
},
"required": [
"passwordKey"
]
}
]
},
"key-auth": {
"type": "object",
"properties": {
"scopes": {
"type": [
"string",
"array"
],
"items": {
"type": "string"
}
}
}
},
"jwt": {
"type": "object",
"properties": {}
},
"oauth2": {
"allOf": [
{
"$ref": "#/definitions/credentialBase"
},
{
"type": "object",
"properties": {
"passwordKey": {
"type": "string",
"default": "secret"
}
},
"required": [
"passwordKey"
]
}
]
}
}
}
마지막으로 사용자를 위해 아래의 코드를 복사하고 붙여넣습니다.json{
"$id": "http://express-gateway.io/models/users.json",
"type": "object",
"properties": {
"firstname": {
"type": "string"
},
"lastname": {
"type": "string"
},
"username": {
"type": "string"
},
"email": {
"type": "string",
"format": "email"
},
"redirectUri": {
"type": "string",
"format": "uri"
}
},
"required": [
"username",
"firstname",
"lastname"
]
}
본문에서 우리는 네트워크 스위치만 설정할 것이다.배치하다.yml 파일.docker를 설정하고 실행한 후에, 나는 이 점을 상세하게 소개할 것이다.현재 우리의 설정 폴더가 준비되어 있습니다. 다음 Docker 명령을 실행하여 Docker 용기를 시작합니다.
docker run -d --name express-gateway \
-v /Users/naseef/Config:/var/lib/eg \
-p 8080:8080 \
-p 9876:9876 \
express-gateway
Express Gateway Docker 컨테이너가 제대로 작동하려면 구성 파일과 볼륨이 포함된 볼륨을 마운트해야 합니다.모든 구성 파일과 볼륨을 포함하는 구성 폴더가 마운트됩니다.위 Docker의/Users/naseef/Config를 사용자 고유의 구성 폴더 경로로 바꾸십시오.express gateway라는 Docker 컨테이너를 시작하고 실행합니다.실행 중인지 확인하려면 터미널에서
docker ps
실행하고 검사하십시오.두 개의 단점을 가진 간단하고 다른 마이크로 서비스를 만들다
우리는 두 개의 GET 끝점을 우리의 마이크로 서비스로 만들 것이다.
선택한 디렉토리에 Actor라는 폴더를 만듭니다.이 폴더에 Express 서버를 설치합니다.나는
npm init
명령을 사용하여 가방을 설정했다.json, 하지만 Express 서버를 설정하는 다른 방법을 선택할 수 있습니다.패키지를 작성할 때json, Actor에서 실행
npm install express --save
하여 Express를 설치합니다.actor라는 파일을 만듭니다.js를 붙이고 다음 코드를 붙여넣으십시오.
let express = require('express');
let app = express();
app.listen(3000, () => {
console.log("Server running on port 3000");
});
app.get("/actors", (req, res, next) => {
let array_actors = [
"Tom Cruise",
"Johnny Depp",
"Di Caprio",
"Russel Crowe",
"Tom Hanks"
];
res.json(array_actors);
});
실행node actor.js
로컬 호스트의 포트 3000에서 서버를 시작합니다.이 URL을 사용하여 브라우저를 클릭하십시오. (또는 Postman을 사용하십시오.)http://localhost:3000/actors
.결과는 이랬을 거야.
[
"Tom Cruise",
"Johnny Depp",
"Di Caprio",
"Russel Crowe",
"Tom Hanks"
]
위에서 영화 폴더를 만드는 것과 같은 방식으로 Express 서버를 설정하고 무비라는 파일을 만듭니다.js.영화에 다음 코드를 추가합니다.js 파일let express = require('express');
let app = express();
app.listen(8000, () => {
console.log("Server running on port 8000");
});
app.get("/movies", (req, res, next) => {
let array_movies = [
"Mission Impossible",
"Pirates of Carribean",
"Inception",
"Gladiator",
"The Terminal"
];
res.json(array_movies);
});
실행node movie.js
localhost의 포트 8000에서 이 서버를 시작합니다.이 URL을 사용하여 브라우저를 클릭하십시오. (또는 Postman을 사용하십시오.)http://localhost:8000/movies
.출력은 이렇습니다.
[
"Mission Impossible",
"Pirates of Carribean",
"Inception",
"Gladiator",
"The Terminal"
]
Ngrok은 GET 끝점을 웹에 공개합니다.
Ngrok을 사용하여 웹에서 포트 3000과 8000을 공개합니다.두 개의 Ngrok 세션을 동시에 실행할 때 문제가 발생하면 다음 단계link를 따르십시오.
나는 Ngrok을 통해 웹에 공개된 API의 세부 사항을 본 강좌의 범위에서 제외할 것이다.
Ngrok을 사용하여 단점을 공개한 후, 우리는 다음과 같은 서비스의 단점을 가지고 있습니다.
영화 서비스:
http://412143bfb37a.ngrok.io/movies
배우 서비스: http://eed882f0ffe3.ngrok.io/actors
현재 우리는 두 개의 실행 중인 마이크로 서비스가 있으니, 우리의 스위치를 설정할 때가 되었다.배치하다.yml 파일은 이 두 서비스를 통해 정지됩니다.게이트웨이를 구성합니다.배치하다.Express Gateway의 yml 파일
Express Gateway는 클라이언트로부터 요청을 받아 특정 요청을 담당하는 마이크로 서비스로 안내합니다.예를 들어 인터넷 게이트웨이http://localhost:8080/actors를 통해 요청을 하면 배우 마이크로 서비스로, 예를 들어http://localhost:8080/movies의 요청은 영화 마이크로 서비스로 지정된다.한 마디로 하면 모든 요청은 서버를 통해 받아들여지고 서로 다른 호스트로 지정된다.이를 위해 Docker를 설정합니다.
게이트웨이에 엔드포인트 공개
이를 통해 Express gateway는 이 형식http://localhost:8080/actors’ 또는 http://localhost:8080/actors/*’의 외부 API(클라이언트의 요청)를 수락할 수 있습니다.
게이트웨이의 서비스 엔드포인트 생성
서비스 포트는 우리의 마이크로 서비스의 포트이고 본 예에서 배우와 영화의 마이크로 서비스이다.API 엔드포인트의 외부 요청이 서비스 엔드포인트로 전달됩니다.서비스Endpoints 섹션에서는 동일한 게이트웨이에 계속 있습니다.배치하다.yml 파일, 서비스를 만들고 URL을 정의합니다.참여자에 대해 우리는 그 서비스 노드를 actor 서비스라고 부르고 그 노드http://eed882f0ffe3.ngrok.io’를 추가한다.영화 서비스 노드에 대해 같은 조작을 반복하다.
이 긴 문장을 완성하라!
이제 API 포트와 서비스 포트를 연결합시다.파이핑 섹션에서 구성됩니다.이것이 바로 우리가 API 포트와 서비스 포트를 연결하는 곳이다.
기본값은 미리 정의된 것이기 때문에 기본값만 정의할 수 있습니다.기본 파이프를 복사하고 붙여넣은 다음 세부 사항을 변경할 수 있습니다.우리는 파이프를'actorPipeline'이라고 명명하고 단점 이름, 즉'actors'를 추가합니다.actorPipeline 파이프의 프록시 정책에서 서비스Endpoint를 찾고 서비스 노드 이름, 즉 "actor 서비스"를 추가합니다.영화 파이프라인에 이 과정을 반복합니다.
http:
port: 8080
admin:
port: 9876
host: localhost
apiEndpoints:
api:
host: localhost
paths: '/ip'
actors:
host: localhost
paths: ['/actors','/actors/*']
movies:
host: localhost
paths: ['/movies','/movies/*']
serviceEndpoints:
httpbin:
url: 'https://httpbin.org'
actorService:
url: 'http://eed882f0ffe3.ngrok.io'
movieService:
url: 'http://412143bfb37a.ngrok.io'
policies:
- basic-auth
- cors
- expression
- key-auth
- log
- oauth2
- proxy
- rate-limit
pipelines:
actorPipeline:
apiEndpoints:
- actors
policies:
# Uncomment `key-auth:` when instructed to in the Getting Started guide.
# - key-auth:
- proxy:
- action:
serviceEndpoint: actorService
changeOrigin: true
moviePipeline:
apiEndpoints:
- movies
policies:
# Uncomment `key-auth:` when instructed to in the Getting Started guide.
# - key-auth:
- proxy:
- action:
serviceEndpoint: movieService
changeOrigin: true
default:
apiEndpoints:
- api
policies:
# Uncomment `key-auth:` when instructed to in the Getting Started guide.
# - key-auth:
- proxy:
- action:
serviceEndpoint: httpbin
changeOrigin: true
현재 우리의 모든 시스템이 다 준비되었다.게이트웨이를 저장합니다.배치하다.yml 파일 및 Docker 컨테이너를 다시 시작합니다.docker restart express-gateway
Ngrok 및 노드 서비스가 실행 중일 것입니다.만일 모든 기능이 정상이라면, 우리는 URL을 사용하여 정확한 출력을 얻어야 한다
http://localhost:8080/actors
http://localhost:8080/movies
이것은 Docked Express gateway를 사용하여 마이크로 서비스 프로그램을 만드는 끝입니다.만약 당신이 어떤 잘못이나 어려움에 부딪히면 언제든지 아래에서 평론을 발표하십시오.감사합니다.즐거움 코드
Reference
이 문제에 관하여(정지된 Express Gateway를 사용하여 마이크로 서비스 응용 프로그램을 만듭니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/naseef012/create-a-microservices-app-with-dockerized-express-api-gateway-1kf9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)