Spring Cloud Gateway实现子项目通过网关统一访问入口
一、要达到的目的我现在有两个业务项目shop-business,shop-user-center,我们用springboot实现后访问的地址大概如下shop-business:http://localhost:8091/shop-business/get/1shop-user-center:http://localhost:8091/shop-user-center/get/1那我们可不可以用网关
一、要达到的目的
我现在有两个业务项目shop-business,shop-user-center,我们用springboot实现后,访问的地址大概如下
shop-business: http://localhost:8091/shop-business/get/1
shop-user-center:http://localhost:8092/shop-user-center/get/1
那我们可不可以用网关统一一下访问方式呢?
比如:http://localhost:8007/shop-user-center/get/1,http://localhost:8007/shop-business/get/1
二、项目背景
1.注册中心:shop-eureka
2.网关:shop-gateway-spring-cloud
3.业务项目1:shop-user-center
4.业务项目2:shop-business
三、实现方法
1.shop-eureka
1.1 pom依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>slan.air.shop</groupId>
<artifactId>shop-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>shop-eureka</name>
<description>shop-eureka</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR4</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1.2 配置文件
server.port=8000
spring.application.name=shop-eureka
1.3 启动方法
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class ShopEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(ShopEurekaApplication.class, args);
}
}
2.shop-gateway-spring-cloud
2.1 pom依赖
<modelVersion>4.0.0</modelVersion>
<groupId>slan.air.shop</groupId>
<artifactId>shop-gateway-spring-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>shop-gateway-spring-cloud</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2 配置文件
server:
port: 8007
eureka:
client:
service-url:
defaultZone: http://localhost:8000/eureka/
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true
lowerCaseServiceId: true #这个配置是设置在URL请求是项目名称的字母使用小写,默认是大写
2.3 启动方法
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class CloudGatewayApp {
public static void main(String[] args) {
SpringApplication.run(CloudGatewayApp.class, args);
}
}
3.shop-user-center
3.1 pom依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath />
</parent>
<groupId>slan.air.shop</groupId>
<artifactId>shop-user-center</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>shop-user-center</name>
<description>shop-user-center</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<mybatis-spring-boot-starter.version>1.3.2</mybatis-spring-boot-starter.version>
<apollo-client.version>1.4.0</apollo-client.version>
<druid.version>1.1.10</druid.version>
<mybatis-plus.version>2.3</mybatis-plus.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot-starter.version}</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
</dependencies>
</dependencyManagement>
3.2 配置文件
server.port=8002
spring.application.name=shop-user-center
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8000/eureka/
3.3 启动方法
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableEurekaClient
public class ShopUserCenterApplication {
public static void main(String[] args) {
SpringApplication.run(ShopUserCenterApplication.class, args);
}
}
3.4测试接口
@Api(value = "用户信息管理")
@RestController
public class UserController {
@ApiOperation(value = "获取用户详细信息", notes="获取用户详细信息")
@ApiImplicitParam(name = "id", value = "用户ID", paramType = "path", required = true, dataType = "Integer")
@RequestMapping(value = "/get/{id}" ,method = RequestMethod.GET)
public String getUser(@PathVariable Integer id) {
try {
System.out.println("---获取用户详细信息----" + id);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "用户详情:"+id;
}
}
4.shop-business
4.1 pom依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath />
</parent>
<groupId>slan.air.shop</groupId>
<artifactId>shop-business</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>shop-business</name>
<description>shop-business</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<mybatis-spring-boot-starter.version>1.3.2</mybatis-spring-boot-starter.version>
<apollo-client.version>1.4.0</apollo-client.version>
<druid.version>1.1.10</druid.version>
<mybatis-plus.version>2.3</mybatis-plus.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot-starter.version}</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
</dependencies>
</dependencyManagement>
4.2 配置文件
server.port=8013
spring.application.name=shop-business
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8000/eureka/
4.3 启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableEurekaClient
public class ShopBusinessApplication {
public static void main(String[] args) {
SpringApplication.run(ShopBusinessApplication.class, args);
}
}
4.4测试接口
@RestController
public class OrderController {
@ApiOperation(value = "商品详情", httpMethod = "GET")
@RequestMapping(value="/get/{id}", method = RequestMethod.GET)
public String get(@PathVariable String id) {
try {
System.out.println(LocalTime.now()+"---商品详情---"+us);
} catch (Exception e) {
e.printStackTrace();
}
return "商品详情:"+id;
}
}
四、测试情况
1.shop-business:http://localhost:8007/shop-business/get/1
2.shop-user-center:http://localhost:8007/shop-user-center/get/1
通过上面的测试图片可以看出,两个项目都是通过网关的端口8007进行访问,基本上满足了我们的需求。
五、问题
1.http://localhost:8081/shop-user-center/get/1中的shop-user-center太长了能改成http://localhost:8081/user/get/1吗?
spring cloud gateway 的filters应该可实现,后面再添加。
更多推荐
所有评论(0)