项目
- 父工程创建一个子Moudle,选择Maven项目,命名为gateway
- 引入依赖
<!--naocs服务发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--gateway网关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
- 创建Main函数作为启动类,创建 cn.itcast.gateway.GatewayApplication
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
- 在application.yml配置文件中配置 服务端口、服务名、nacos地址、路由规则
server:
port: 10010
spring:
application:
name: geteway
cloud:
nacos:
server-addr: localhost:8848
gateway:
routes:
- id: user-service # 路由标识,必须唯一
uri: lb://userservice # 路由的目标地址
predicates: # 路由断言,判断请求是否符合规则
- Path=/user/** # 路径断言,判断路径是否以/user开头,如果是则符合
- id: orderservice
uri: lb://orderservice
predicates:
- Path=/order/**
- 启动GatewayApplication :10010/、UserApplication :8081/,OrderApplication :8080/
访问:
http://localhost:10010/order/101
http://localhost:10010/user/1
报错
控制台不报错,页面报503错误
但是直接访问order-service:http://localhost:8080/order/101,正常使用。
将
uri: lb://orderservice
改为
uri: http://localhost:8080
访问:http://localhost:10010/order/101,发现能用了。
推断 uri: lb://orderservice 不起作用
解决
增加依赖:spring-cloud-starter-loadbalancer
<!--naocs服务发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--使用nacos + ribbon做负载均衡时添加的loadbalancer依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!--gateway网关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
继续使用:uri: lb://orderservice,发现好了。