Не удается вызвать API шлюза из другого микросервиса

Я разрабатываю микросервис с использованием JHipster, и мне нужно вызвать шлюз API из этого микросервиса, так как пользовательские данные будут находиться в шлюзе. Я просто не могу понять, почему я не могу использовать симулируемый клиент так:

@FeignClient(name = "gateway")
public interface GatewayFeignClient {
    @RequestMapping(value = "/api/account")
    UserDTO getAccount();
}

Я всегда получаю 404 ошибку. Шлюз настроен на использование Zuul в качестве прокси:

@ComponentScan(basePackages = {"tech.h2r.multitenant", "tech.h2r.commons.microservice", "tech.h2r.ecommerce.gateway"})
@SpringBootApplication
@EnableConfigurationProperties({LiquibaseProperties.class, ApplicationProperties.class, MultiTenantProperties.class})
@EnableDiscoveryClient
@EnableZuulProxy
public class GatewayApp {

     ...

}

Это (частично) мой файл application-dev:

eureka:
    instance:
        prefer-ip-address: true
    client:
        service-url:
            defaultZone: http://admin:${jhipster.registry.password}@192.168.0.200:8761/eureka/
jhipster:
    gateway:
        rate-limiting:
            enabled: false
            limit: 100000
            duration-in-seconds: 3600
        authorized-microservices-endpoints: # Access Control Policy, if left empty for a route, all endpoints will be accessible
            app1: /api,/v2/api-docs # recommended dev configuration

и это (частично) мой файл конфигурации приложения:

eureka:
    client:
        enabled: true
        healthcheck:
            enabled: true
        fetch-registry: true
        register-with-eureka: true
        instance-info-replication-interval-seconds: 10
        registry-fetch-interval-seconds: 10
    instance:
        appname: gateway
        instanceId: gateway:${spring.application.instance-id:${random.value}}
        lease-renewal-interval-in-seconds: 5
        lease-expiration-duration-in-seconds: 10
        status-page-url-path: ${management.endpoints.web.base-path}/info
        health-check-url-path: ${management.endpoints.web.base-path}/health
        metadata-map:
            zone: primary # This is needed for the load balancer
            profile: ${spring.profiles.active}
            version: ${info.project.version:}
            git-version: ${git.commit.id.describe:}
            git-commit: ${git.commit.id.abbrev:}
            git-branch: ${git.branch:}
ribbon:
    eureka:
        enabled: true
# See http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html
zuul: # those values must be configured depending on the application specific needs
    sensitive-headers: Cookie,Set-Cookie #see https://github.com/spring-cloud/spring-cloud-netflix/issues/3126
    host:
        max-total-connections: 1000
        max-per-route-connections: 100
    semaphore:
        max-semaphores: 500

# See https://github.com/Netflix/Hystrix/wiki/Configuration
hystrix:
    command:
        default:
            execution:
                isolation:
                    thread:
                        timeoutInMilliseconds: 10000
spring:
    autoconfigure:
        exclude: org.springframework.boot.actuate.autoconfigure.metrics.jdbc.DataSourcePoolMetricsAutoConfiguration
    application:
        name: gateway

когда я вызываю API шлюза, используя IP-адрес (http://192.168.0.4:8080/api/gateway/routes), чтобы получить маршруты, я вижу, что нет зарегистрированного маршрута шлюза:

[
{
"path": "/shop/**",
"serviceId": "shop",
"serviceInstances": [
  {
    "serviceId": "SHOP",
    "metadata": {
      "management.port": "8081",
      "jmx.port": "41521",
      "profile": "dev",
      "zone": "primary"
    },
    "uri": "http://192.168.0.9:8081",
    "secure": false,
    "instanceInfo": {
      "instanceId": "shop:74dba310a499a473b5bf3a6ebe068693",
      "app": "SHOP",
      "appGroupName": null,
      "ipAddr": "192.168.0.9",
      "sid": "na",
      "homePageUrl": "http://192.168.0.9:8081/",
      "statusPageUrl": "http://192.168.0.9:8081/management/info",
      "healthCheckUrl": "http://192.168.0.9:8081/management/health",
      "secureHealthCheckUrl": null,
      "vipAddress": "shop",
      "secureVipAddress": "shop",
      "countryId": 1,
      "dataCenterInfo": {
        "@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo",
        "name": "MyOwn"
      },
      "hostName": "192.168.0.9",
      "status": "UP",
      "overriddenStatus": "UNKNOWN",
      "leaseInfo": {
        "renewalIntervalInSecs": 5,
        "durationInSecs": 10,
        "registrationTimestamp": 1543661951276,
        "lastRenewalTimestamp": 1543661979768,
        "evictionTimestamp": 0,
        "serviceUpTimestamp": 1543661946322
      },
      "isCoordinatingDiscoveryServer": false,
      "metadata": {
        "management.port": "8081",
        "jmx.port": "41521",
        "profile": "dev",
        "zone": "primary"
      },
      "lastUpdatedTimestamp": 1543661951276,
      "lastDirtyTimestamp": 1543661946059,
      "actionType": "ADDED",
      "asgName": null
    },
    "host": "192.168.0.9",
    "port": 8081,
    "scheme": null
  }
]
}
]

Итак, что я должен настроить, чтобы сделать остальные API шлюза доступными для других микросервисов?

0 ответов

Другие вопросы по тегам