大神自己做的下载音乐的网站,重庆招标网官网,哪个网站能学做微商,四川住房建设和城乡建设厅假网站在使用微服务架构时#xff0c;往往我们需要搭建一个网关服务#xff0c;作为各个微服务的统一入口。Spring gateway作为网关服务的后起之秀#xff0c;受到各大企业的欢迎。下面介绍下网关服务Spring gateway的搭建。 引入依赖#xff0c;这一步比较重要#xff0c;也需要…在使用微服务架构时往往我们需要搭建一个网关服务作为各个微服务的统一入口。Spring gateway作为网关服务的后起之秀受到各大企业的欢迎。下面介绍下网关服务Spring gateway的搭建。 引入依赖这一步比较重要也需要小心要不然会因为jar问题导致服务无法正常启动下面要贴出网关服务pom文件核心代码 propertiesjava.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingspring-boot.version2.2.1.RELEASE/spring-boot.versionspring-cloud.versionHoxton.RELEASE/spring-cloud.version/propertiesdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!-- 服务注册/发现--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency!-- 配置中心来做配置管理--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId/dependency
!-- dependency--
!-- groupIdorg.springframework/groupId--
!-- artifactIdspring-webmvc/artifactId--
!-- /dependency--
!-- dependency--
!-- groupIdjavax.servlet/groupId--
!-- artifactIdjavax.servlet-api/artifactId--
!-- /dependency--dependencygroupIdjavax.servlet/groupIdartifactIdservlet-api/artifactIdversion2.5/versionscopeprovided/scope!--provided 打包时不用带上tomcat已包含--/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion2.2.1.RELEASE/versiontypepom/typescopeimport/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion${spring-boot.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement 在这一步需要注意的地方有1不要引入 spring-webmvc依赖spring-cloud-starter-gateway集成了webflux具备web方便的功能了因此不要引入spring-webmvc2.要引入servlet-api依赖不要引入javax.servlet-api依赖3.注意jdk,springboot,springcloud的版本对应关系版本对应不上启动也会报错。
2.跨域问题的统一处理
使用单一服务跨域服务放在服务内使用微服务架构后跨域交由网关统一处理各个微服务不必再处理了如果网关配置了跨域各个微服务还保留跨域运行时也会报错下面贴出网关中跨域处理
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;Configuration
public class CorsConfiguration {Beanpublic CorsWebFilter corsWebFilter() {UrlBasedCorsConfigurationSource source new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration new CorsConfiguration();corsConfiguration.addAllowedHeader(*);corsConfiguration.addAllowedMethod(*);corsConfiguration.addAllowedOrigin(*);corsConfiguration.setAllowCredentials(true);source.registerCorsConfiguration(/**,corsConfiguration);return new CorsWebFilter(source);}
}
3.路由的配置gateway主要通过配置路由断言过滤器进行URL识别和服务分发以下是gateway三大核心
Route路由路由是构建网关的基本模块它由ID、目标URI、一系列的断言和过滤器组成如果断言为true则匹配该路由。对应DispatcherHandler分发请求和RoutePredicate-HandlerMapping路由查找Predicate(断言)参考的是Java8的java.util.function.Predicate。开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数)如果请求与断言相匹配则进行路由。即匹配Predicate成功才跳转到对应的目标URIFilter过滤指的是Spring框架中GatewayFilter的实例使用过滤器可以在请求被路由前或者之后对请求进行修改。对应FilteringWebHandler过滤器链代理服务处理。
配置在网关服务的application.yml文件中下面贴出示例 server: port: 8088 spring: application: name: mall-gateway main: web-application-type: reactive cloud: gateway: routes: - id: mall_web_route uri: lb://mall predicates: - Path/system/**,/tool/** - id: mall_app_route uri: lb://mall predicates: - Path/api/** - id: genarator_web_route uri: lb://genarator predicates: - Path/tool/** - id: mall-bbs_web_route uri: lb://mall-bbs predicates: - Path/admin/**,/sys/** - id: mall-bbs_app_route uri: lb://mall-bbs predicates: - Path/app/**,/resource/** discovery: locator: enabled: true 这里有一点需要注意的是不同服务之意path开头不要相同相同的话gateway会交由第一个服务进行处理此时就会出现诸如鉴权失败等问题。举个例子服务1和服务2拥有独立的后台管理系统服务1路径以admin开头服务2也以admin开头网关中服务1和服务2 path均配置了/admin/**开头当请求服务2的/admin/**开头的接口时由于存在同样路径开头的配置gateway会路由到服务1交由服务1进行处理。此时就得不到预期的结果需要将其中一个路径更换为不同的地址。
4.配置启动类注意排除数据源
SpringBootApplication(exclude DataSourceAutoConfiguration.class)
EnableDiscoveryClient
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}
}
经过以上4个主要步骤就完成Spring gateway微服务的搭建。