Не удается вызвать 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 шлюза доступными для других микросервисов?