如何通过zuul代理从一个微服务访问另一个微服务
Posted
技术标签:
【中文标题】如何通过zuul代理从一个微服务访问另一个微服务【英文标题】:How to access from one micro service to another via zuul proxy 【发布时间】:2018-03-23 05:19:38 【问题描述】:我正在使用 Spring Boot 开发微服务项目。这里,UI 页面在单独的微服务中,zuul 代理在单独的微服务中。我想通过 zuul 微服务访问 UI 页面。我在下面添加了我的项目结构。
UiService Application.properties:
server.port=8090
spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .jsp
spring.application.name=ui
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
eureka.instance.preferIpAddress=true
eureka.instance.leaseRenewalIntervalInSeconds=5
zuulService application.yml:
server:
port: 8080
eureka:
instance:
leaseRenewalIntervalInSeconds: 10
statusPageUrlPath: /info
healthCheckUrlPath: /health
logging:
level:
ROOT: INFO
org.springframework.web: DEBUG
zuul:
routes:
ui:
url: http://localhost:8090
ribbon:
eager-load:
enabled: false
我的 docker 撰写文件:
version: '3'
services:
eureka:
build: eurekaService
ports:
- "8761:8761"
zuul:
build: zuulService
links:
- eureka
ports:
- "8080:8080"
turbine:
build: turbineService
links:
- eureka
ports:
- "8989:8989"
ui:
build: uiService
links:
- eureka
ports:
- "8090:8090"
uiService结构:
我的尤里卡服务页面:
在 docker(docker-compose up -d) 中运行此项目后,当我尝试访问登录屏幕(在 uiService 中可用)时出现以下异常。如何解决?
UIService 主方法:
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public class UIApplication
public static void main(String[] args)
SpringApplication.run(UIApplication.class, args);
uiService pom.xml:
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.scm</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>uiService</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
【问题讨论】:
【参考方案1】:localhost:8090/login
是对 UI 应用的直接请求,不涉及 Zuul。
如果它没有加载/显示页面,则可能是启动应用程序时出错或/login
不存在。
您介意分享日志吗?
【讨论】:
一旦我在显示登录页面时涉及 Zuul 代理,我得到了与结果相同的页面(已附加 SS)。 url : localhost:8080/ui/login .....我在将图像部署到 docker (docker-compose up -d) 时没有收到任何错误。 您介意分享一下:pom.xml,您使用的是哪个 Spring Boot 版本以及映射到 GET /login 的 UIController? 我用的是1.5.2版本,getmapping在uiController@RequestMapping(value = "/login", method = RequestMethod.GET) public String getLogin() return "login";
上面,我已经添加了我的uiService pom.xml以上是关于如何通过zuul代理从一个微服务访问另一个微服务的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud系列八:Zuul 路由访问(Zuul 的基本使用Zuul 路由功能zuul 过滤访问Zuul 服务降级)
SpringCloud系列八:Zuul 路由访问(Zuul 的基本使用Zuul 路由功能zuul 过滤访问Zuul 服务降级)
Spring Boot 微服务 com.netflix.zuul.exception.ZuulException:转发错误