当前位置:

微服务 Spring Cloud Alibaba 项目搭建五、gateway 网关子模块创建

访客 2024-02-18 398 0

一、项目-New-Module

二、选择Maven-jdk-Next

三、修改Name为gateway-查看GroupId是否正确-Finish

四、修改pom.xml文件

<dependencies><!--集成公共模块--><dependency><groupId>com.bi.cloud</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version><!--gateway忽略mysql,不直接操作数据库--><exclusions><exclusion><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></exclusion><exclusion><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></exclusion><exclusion><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></exclusion></exclusions></dependency><!--nacosservicediscoveryclient依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--nacosconfigclient依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--GateWay网关--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-spring-cloud-gateway-adapter</artifactId></dependency><!--引入webflux--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><!--sentinel核心环境依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!--Sentinel支持采用Nacos作为规则配置数据源,引入该适配依赖--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency><!--springclouddubbo依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-apache-dubbo-adapter</artifactId></dependency><!--JavaServlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId></dependency></dependencies>

完整pom.xml展示

<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>bi-cloud</artifactId><groupId>com.bi.cloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>gateway</artifactId><dependencies><!--集成公共模块--><dependency><groupId>com.bi.cloud</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version><!--gateway忽略mysql,不直接操作数据库--><exclusions><exclusion><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></exclusion><exclusion><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></exclusion><exclusion><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></exclusion></exclusions></dependency><!--nacosservicediscoveryclient依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--nacosconfigclient依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--GateWay网关--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-spring-cloud-gateway-adapter</artifactId></dependency><!--引入webflux--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><!--sentinel核心环境依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!--Sentinel支持采用Nacos作为规则配置数据源,引入该适配依赖--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency><!--springclouddubbo依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-apache-dubbo-adapter</artifactId></dependency><!--JavaServlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId></dependency></dependencies></project>

五、java-New-JavaClass新增启动类com.bi.cloud.GatewayApplication


packagecom.bi.cloud;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication@EnableDiscoveryClientpublicclassGatewayApplication{publicstaticvoidmain(String[]args){SpringApplication.run(GatewayApplication.class,args);}}

六、在resources下新增bootstrap.yml配置文件

bootstrap.yml配置文件展示

spring:profiles:active:test---server:port:8008spring:profiles:testcloud:nacos:discovery:server-addr:127.0.0.1:8848namespace:a60273f4-07fb-4568-82eb-d078a3b02107config:server-addr:127.0.0.1:8848namespace:a60273f4-07fb-4568-82eb-d078a3b02107group:DEFAULT_GROUP#默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置file-extension:yml#默认propertiesgateway:#路由数组[路由就是指定当请求满足什么条件的时候转到哪个微服务]routes:-id:bi-cloud-oauth#当前路由的标识,要求唯一uri:lb://bi-cloud-oauth#lb指的是从nacos中按照名称获取微服务,并遵循负载均衡策略predicates:#断言(就是路由转发要满足的条件)-Path=/oauth/**#当请求路径满足Path指定的规则时,才进行路由转发#我们⾃定义的路由ID,保持唯⼀-id:bi-cloud-gateway#⽬标服务地址(部署多实例)uri:lb://bi-cloud-gateway#gateway⽹关从服务注册中⼼获取实例信息然后负载后路由#断⾔:路由条件,Predicate接受⼀个输⼊参数,返回⼀个布尔值结果。该接⼝包含多种默认⽅法来将Predicate组合成其他复杂的逻辑(⽐如:与,或,⾮)。predicates:-Path=/bi-gateway/api/**filters:#过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改-StripPrefix=1#转发之前去掉1层路径application:name:bi-cloud-gateway---server:port:8008spring:profiles:precloud:nacos:discovery:server-addr:127.0.0.1:8848namespace:c60d2198-0b2f-46c1-82cb-4c2f20fb8123config:server-addr:127.0.0.1:8848namespace:c60d2198-0b2f-46c1-82cb-4c2f20fb8123group:DEFAULT_GROUP#默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置file-extension:yml#默认propertiesgateway:#路由数组[路由就是指定当请求满足什么条件的时候转到哪个微服务]routes:-id:bi-cloud-oauth#当前路由的标识,要求唯一uri:lb://bi-cloud-oauth#lb指的是从nacos中按照名称获取微服务,并遵循负载均衡策略predicates:#断言(就是路由转发要满足的条件)-Path=/oauth/**#当请求路径满足Path指定的规则时,才进行路由转发#我们⾃定义的路由ID,保持唯⼀-id:bi-cloud-gateway#⽬标服务地址(部署多实例)uri:lb://bi-cloud-gateway#gateway⽹关从服务注册中⼼获取实例信息然后负载后路由#断⾔:路由条件,Predicate接受⼀个输⼊参数,返回⼀个布尔值结果。该接⼝包含多种默认⽅法来将Predicate组合成其他复杂的逻辑(⽐如:与,或,⾮)。predicates:-Path=/bi-gateway/api/**filters:#过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改-StripPrefix=1#转发之前去掉1层路径application:name:bi-cloud-gateway---server:port:8008spring:profiles:prdcloud:nacos:discovery:server-addr:127.0.0.1:8848namespace:0be74aa4-00e5-4c48-ae8c-34965c327212config:server-addr:127.0.0.1:8848namespace:0be74aa4-00e5-4c48-ae8c-34965c327212group:DEFAULT_GROUP#默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置file-extension:yml#默认propertiesgateway:#路由数组[路由就是指定当请求满足什么条件的时候转到哪个微服务]routes:-id:bi-cloud-oauth#当前路由的标识,要求唯一uri:lb://bi-cloud-oauth#lb指的是从nacos中按照名称获取微服务,并遵循负载均衡策略predicates:#断言(就是路由转发要满足的条件)-Path=/oauth/**#当请求路径满足Path指定的规则时,才进行路由转发#我们⾃定义的路由ID,保持唯⼀-id:bi-cloud-gateway#⽬标服务地址(部署多实例)uri:lb://bi-cloud-gateway#gateway⽹关从服务注册中⼼获取实例信息然后负载后路由#断⾔:路由条件,Predicate接受⼀个输⼊参数,返回⼀个布尔值结果。该接⼝包含多种默认⽅法来将Predicate组合成其他复杂的逻辑(⽐如:与,或,⾮)。predicates:-Path=/bi-gateway/api/**filters:#过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改-StripPrefix=1#转发之前去掉1层路径application:name:bi-cloud-gateway

七、Nacos配置(下图为test环境配置展示,pre、prd配置方式一致)



唯一要注意的是,每个环境的后缀都是不同的

dubbo:registry:#挂载到SpringCloud注册中心address:spring-cloud://localhostcloud:#订阅服务提供方的应用列表,订阅多个服务提供者使用","连接subscribed-services:bi-cloud-engine

八、gateway服务功能测试

在common通用模块下pojo创建实体,service创建接口

User

packagecom.bi.cloud.pojo;importlombok.Data;importjava.io.Serializable;@DatapublicclassUserimplementsSerializable{privateStringusername;privateStringpassword;}

UserService

packagecom.bi.cloud.service;importcom.bi.cloud.pojo.User;publicinterfaceUserService{UseruserInfo();}

在engine模块下创建UserServiceImpl.class实现

packagecom.bi.cloud.service.Impl;importcom.bi.cloud.pojo.User;importcom.bi.cloud.service.UserService;importorg.apache.dubbo.config.annotation.Service;importorg.springframework.stereotype.Component;@Service@ComponentpublicclassUserServiceImplimplementsUserService{@OverridepublicUseruserInfo(){Useruser=newUser();user.setUsername("admin");user.setPassword("123456");returnuser;}}

在gateway模块下创建com.bi.cloud.controller.UserController.class

UserController

packagecom.bi.cloud.controller;importcom.bi.cloud.pojo.User;importcom.bi.cloud.service.UserService;importorg.apache.dubbo.config.annotation.Reference;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api/user")publicclassUserController{@ReferenceprivateUserServiceuserService;@PostMapping("/userInfo")publicUseruserInfo(){returnuserService.userInfo();}}

项目-Maven-Reloadproject重新编译,启动engine服务、gateway服务

postman工具测试接口(接口地址:http://localhost:8008/bi-gateway/api/user/userInfo)
返回测试数据,服务调用成功!!!

前往:第六章Sentinel流量控制、熔断降级集成

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~