>source

2개의 서비스가 있고 이 서비스에 대한 API 게이트웨이를 만들고 싶습니다.

서비스 1

  • 이름: 레온
  • 호스트: api.leon.com

종점:

/
  /jungle

서비스 2

  • 이름 : 호랑이
  • 호스트 : api.tiger.com

종점:

/
 /jungle

예상 동작:

API 게이트웨이는 다음과 같이 요청을 처리합니다.

apigateway.com/leon      =======>> Leon service '/'
apigateway.com/leon/jungle=======>> Leon service '/jungle'
apigateway.com/tiger     =======>> Tiger service '/'
apigateway.com/tiger/jungle=======>> Tiger service '/jungle'

따라서 들어오는 요청 URL의 첫 번째 경로를 서비스와 일치시키고 싶습니다.

그리고 내 게이트웨이. 다음과 같은 config.yaml 파일:

http:
  port: 8080
admin:
  port: 9876
  host: localhost
apiEndpoints:
  leon:
    host: localhost
    methods : [ 'POST', 'GET' ]
    paths: '/*'
  tiger:
    host: localhost
    methods : ['POST', 'GET']
    paths: '/*'
serviceEndpoints:
  leonsrv:
    url: 'http://leon-service.us-west-2.compute.amazonaws.com/'
  tigersrv:
    url: 'http://tiger-service.us-west-2.compute.amazonaws.com/'
policies:
  -basic-auth
  -cors
  -expression
  -key-auth
  -log
  -oauth2
  -proxy
  -rate-limit
pipelines:
  -name: leon
    apiEndpoints:
      -leon
    policies:
      -proxy:
          -action:
              serviceEndpoint: leonsrv
              changeOrigin: true
  -name: tiger
    apiEndpoints:
      -tiger
    policies:
      -proxy:
          -action:
              serviceEndpoint: tigersrv
              changeOrigin: true

하지만 작동하지 않습니다. 타이거 서비스에 요청을 보낼 수 없습니다.

이 문제를 어떻게 해결할 수 있습니까? 도와주세요!

  • 답변 # 1

    apiEndpoints 섹션에 정의된 두 끝점은 동일합니다. http://localhost/*. Express-gateway가 이들을 구별할 수 있도록 하려면 더 많은 대상 URL을 포함해야 합니다.

    apiEndpoints:
      leon:
        host: localhost
        methods : [ 'POST', 'GET' ]
        paths: [ '/leon/', '/leon/*' ]
      tiger:
        host: localhost
        methods : ['POST', 'GET']
        paths: [ '/tiger/', '/tiger/*' ]
    

  • 이전 php : MYSQL -2개의 날짜 시간 매개변수 사이에 작업이 없는 쿼리 사용자
  • 다음 바퀴벌레 데이터베이스에서 트랜잭션 재시도 오류를 피하기 위해 클라이언트 측에서 구성을 추가해야 합니까?