Heroku部署Zuul+Eureka+微服务架构时Zuul路由请求返回404问题
问题解决步骤
1 优先修正Zuul前缀配置问题
你当前Zuul配置中设置了zuul.prefix: /api,意味着所有Zuul接管的路由都需要加上/api前缀才能匹配。你当前请求的路径是/images/user/create,没有带/api前缀,自然无法命中路由规则返回404。
- 修正方案二选一:
- 方案1:请求地址改为
https://croquis-time-zuul.herokuapp.com/api/images/user/create - 方案2:删除
zuul.prefix: /api配置,和本地路由规则保持一致
- 方案1:请求地址改为
2 修正Eureka实例注册配置错误
你所有微服务的eureka.instance.hostName都错误填写为Eureka服务的域名,会导致Eureka返回给Zuul的服务实例地址全部指向Eureka服务,无法正确转发到对应业务服务。
- 修正每个服务的配置:
- image-service的
eureka.instance.hostName改为自身域名:croquis-time-image.herokuapp.com - auth-service的
eureka.instance.hostName改为自身对应的域名 - Zuul服务的
eureka.instance.hostName改为自身域名:croquis-time-zuul.herokuapp.com
- image-service的
- 额外补充:Heroku会为每个应用随机分配运行端口,不要在配置中写死端口,将所有服务的
server.port配置改为${PORT:默认端口},比如image-service改为server.port: ${PORT:8200},兼容本地和线上环境。
3 验证Zuul路由与服务列表的方法
引入Spring Boot Actuator组件即可直接查看Zuul的路由映射和注册的服务实例信息:
- 在Zuul服务的依赖配置中添加
spring-boot-starter-actuator依赖 - 在Zuul的application.yml中添加配置:
management: endpoints: web: exposure: include: routes,health endpoint: routes: enabled: true
- 部署后访问Zuul服务的
/actuator/routes路径,即可看到所有生效的路由规则、对应的服务ID、转发的目标实例地址,可直接确认路由配置是否生效、服务实例地址是否正确。
4 可选校验:确认路由stripPrefix规则
你当前image-service的路由没有配置stripPrefix参数,默认值为true,会自动将路径中匹配的/images前缀移除后转发,比如请求/api/images/user/create会转发到image-service的/user/create,和你的业务预期一致无需修改;如果后续需要保留前缀再配置stripPrefix: false即可。
内容的提问来源于stack exchange,提问作者FloranePlo
相关产品推荐
相关产品推荐

