当前位置: 首页 > news >正文

合肥做网站域名的公司产品推广策略

合肥做网站域名的公司,产品推广策略,泰州网站开发,怎么电话销售网站建设核心部分:routes(路由), predicates(断言),filters(过滤器) id:可以理解为是这组配置的一个id值,请保证他的唯一的,可以设置为和服务名一致 uri:可以理解为是通过条件匹配之后需要路由到&…

核心部分:routes(路由), predicates(断言),filters(过滤器)

pom依赖

 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

yml配置网关

server:port: 8087
spring:application:name: gateway-nacoscloud:gateway:routes: #路由数组[路由 就是指定当请求满足什么条件的时候转到哪个微服务]- id: product_route  #当前路由的标识,要求唯-uri: http://localhost:8086 #请求要转发到的地址order: 1 #路由的优先级,数字越小级别越高predicates: #断言(就是路由转发要满足的条件)- Path=/product-service/** #当请求路径满足Path指定的规则时,才进行路由转发#http://localhost:8087/product-service/product/9  路由器到⬇#http://localhost:8086/product-service/product/9filters: #过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改- StripPrefix=1 #转发之前去掉1层路径##http://localhost:8086/product/9

yml注册到nacos配置网关

server:port: 8087
spring:application:name: gateway-nacoscloud:nacos:discovery:server-addr: 192.168.11.47:18848username: nacospassword: nacosgateway:routes: #路由数组[路由 就是指定当请求满足什么条件的时候转到哪个微服务]- id: product_route  #当前路由的标识,要求唯-uri: lb://product_naocs #lb指的是从nacos中按名称获取微服务,并遵循负载均衡策略order: 1 #路由的优先级,数字越小级别越高predicates: #断言(就是路由转发要满足的条件)- Path=/product-service/** #当请求路径满足Path指定的规则时,才进行路由转发filters: #过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改- StripPrefix=1 #转发之前去掉1层路径,

yml配置网关(约定大于配置的方式,一般不用这样的配置),例如访问http://localhost:8087/product-service/product/9 ,中的product-service为服务的名字

server:port: 8087
spring:application:name: gateway-nacoscloud:nacos:discovery:server-addr: 192.168.11.47:18848username: nacospassword: nacosgateway:discovery:locator:enabled: true    #是否启动自动识别nacos服务(约定大于配置)

注意:若要使用自定义配置,则“不能开启注册中心的路由功能”,否则自定义的策略会失,设置中心路由功能为false

server:port: 8087
spring:application:name: gateway-nacoscloud:nacos:discovery:server-addr: 192.168.11.47:18848username: nacospassword: nacosgateway:discovery:locator:enabled: false  #是否启动自动识别nacos服务(约定大于配置)

查看网关内置断言官网文档,如果用上时间可以设置获取使用方法:ZonedDateTime.now(),获取

内置断言例子,日期2024-01-20T17:42:47都可以访问,超过时间访问返回404

server:port: 8087
spring:application:name: gateway-nacoscloud:nacos:discovery:server-addr: 192.168.11.47:18848username: nacospassword: nacosgateway:routes: #路由数组[路由 就是指定当请求满足什么条件的时候转到哪个微服务]- id: product_route #当前路由的标识,要求唯-uri: http://localhost:8086 #请求要转发到的地址order: 1 #路由的优先级,数字越小级别越高predicates: #断言(就是路由转发要满足的条件)- Path=/product-service/** #当请求路径满足Path指定的规则时,才进行路由转发- Before=2024-08-20T17:42:47.789-07:00[America/Denver]filters: #过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改- StripPrefix=1 #转发之前去掉1层路径,- id: stock-nacos #当前路由的标识,要求唯-uri: http://localhost:8085 #请求要转发到的地址order: 1 #路由的优先级,数字越小级别越高predicates: #断言(就是路由转发要满足的条件)- Path=/stock-nacos/** #当请求路径满足Path指定的规则时,才进行路由转发- Before=2024-08-20T17:42:47.789-07:00[America/Denver]filters: #过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改- StripPrefix=1 #转发之前去掉1层路径,

内部断言的类名是有断言前缀和后缀组成如下

Path+RoutePredicateFactory
RemoteAddr+RoutePredicateFactory
RemoteAddr+RoutePredicateFactory
Header+RoutePredicateFactory

  • 基于远程地址的断言工厂

  • RemoteAddrRoutePredicateFactory:接收一个IP地址段,判断请求主机地址是否在地址段中
- RemoteAddr=192.168.1.1/24
  • 基于Cookie的断言工厂

  • CookieRoutePredicateFactory:接收两个参数,cookie 名字和一个正则表达式。 判断请求cookie是否具有给定名称且值与正则表达式匹配。
- RemoteAddr=chocolate, ch.
  • 基于Header的断言工厂

  • HeaderRoutePredicateFactory:接收两个参数,标题名称和正则表达式,判断请求Header是否具有给定名称且值与正则表达式匹配。
- Header=X-Request-Id,\d+
  • 基于Host的断言工

  • HostRoutePredicateFactory:接收一个参数,主机名模式。判断请求的Host是否满足匹配规则
- Host=**.testhost.org
基于Method请求方法的
  • 基于Method请求方法的断言工厂

  • MethodRoutePredicateFactory:接收一个参数,判断请求类型是否跟指定的类型匹配
 - Method=GET
  1. 基于Path请求路径的断言工厂

  2. PathRoutePredicateFactory:接收一个参数,判断请求的URI部分是否满足路径规则。
#多个路径使用逗号,隔开
- Path=/foo/{segment}1 , /product/add
  • 基于Query请求参数的断言工厂

  • QueryRoutePredicateFactory:接收两个参数,请求param和正则表达式,判断请求参数是否具有给定名称且值与正则表达式匹配,
- Query=baz, ba.

基于Path请求路径的断言工厂

自定义路由断言工厂

可以查看路径路由的断言工厂,选择AbstractRoutePredicateFactory按Ctrl+H既可以显示出全部的路由断言工厂,可以复制一份修改成自定义的断言工厂

在这里插入图片描述

自定义路由断言工厂需要继承 AbstadRoutepredicatefacdoy类,重写 ap)y方法的透辑,在apy方法中可以通过 excthange.geiequest) 拿到 serneiHpReque 对象,从而可以获取到清求的参数、请求方式、请求头等信息

1. 必须spring组件 bean
2. 类必须加上RoutePredicateFactory作为结尾(底层的处理的约定大于配置自定会读取到的)
3. 必须继承AbstractRoutePredicateFactory
4. 必须声明静态内部类 声明属性来接收 配置文件中对应的断言的信息
5. 需要结合shortcutFieldOrder进行绑定
6. 通过apply进行逻辑判断 true就是匹配成功 false匹配失败

自定义路由断言工厂类

package com.test.gate.config;import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.cloud.gateway.handler.predicate.GatewayPredicate;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.server.ServerWebExchange;import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;/*** @Description:* @Author: xu* @Data: 2024-2024/4/11-21* @Version: V1.0*/
@Component
public class CheckAuthRoutePredicateFactory extends AbstractRoutePredicateFactory<CheckAuthRoutePredicateFactory.Config> {public CheckAuthRoutePredicateFactory() {super(Config.class);}public List<String> shortcutFieldOrder() {return Arrays.asList("param");}public Predicate<ServerWebExchange> apply(final Config config) {return new GatewayPredicate() {public boolean test(ServerWebExchange exchange) {if (config.getParam().equals("zhangSan")) {return true;}return false;}public Object getConfig() {return config;}public String toString() {return String.format("Query: param=%s regexp=%s", config.getParam());}};}@Validatedpublic static class Config {private String param;public Config() {}public String getParam() {return this.param;}public void setParam(String param) {this.param = param;}}
}

yml配置(如果一个路由里面有多个断言条件是且的关系,都需要满足才跳转uri)

server:port: 8087
spring:application:name: gateway-nacoscloud:nacos:discovery:server-addr: 192.168.11.47:18848username: nacospassword: nacosgateway:
#      discovery:
#        locator:
#          enabled: true    #是否启动自动识别nacos服务(约定大于配置)routes: #路由数组[路由 就是指定当请求满足什么条件的时候转到哪个微服务]- id: product_route #当前路由的标识,要求唯-uri: http://localhost:8086 #请求要转发到的地址order: 1 #路由的优先级,数字越小级别越高predicates: #断言(就是路由转发要满足的条件)- Path=/product-service/**,/ddd/s #当请求路径满足Path指定的规则时,才进行路由转发- Before=2024-08-20T17:42:47.789-07:00[America/Denver]- CheckAuth=zhangSan1filters: #过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改- StripPrefix=1 #转发之前去掉1层路径,

查看网关各种局部过滤器官网

自定义网关过滤器和自定义断言都全部类似

继承AbstractNameValueGatewavFilterFactory日我们的自定义名称必须要以GatewavFiterFactorv结尾并交给spring管理

package com.test.gate.config;import com.alibaba.nacos.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;import java.util.Arrays;
import java.util.List;/*** @Description:* @Author: xu* @Data: 2024-2024/4/12-11* @Version: V1.0*/
@Componentpublic class CheckAuthGatewayFilterFactory extends AbstractGatewayFilterFactory<CheckAuthGatewayFilterFactory.Config> {private static Logger log = LoggerFactory.getLogger(CheckAuthGatewayFilterFactory.class);public List<String> shortcutFieldOrder() {return Arrays.asList("name");}@Overridepublic GatewayFilter apply(Config config) {return (exchange, chain) -> {log.info("调用checkAuthGatewayFilterFactory==="+ config.getName());String name = exchange.getRequest().getQueryParams().getFirst("name");if (StringUtils.isNotBlank(name)) {if (config.getName().equals(name)) {chain.filter(exchange);} else {//返回404exchange.getResponse().setStatusCode(HttpStatus.NOT_FOUND);exchange.getResponse().setComplete();}//1 正常请求chain.filter(exchange);}return null;};}public static class Config {private String name;public Config() {}public String getName() {return this.name;}public void setName(String prefix) {this.name = name;}}
}
server:port: 8087
spring:application:name: gateway-nacoscloud:nacos:discovery:server-addr: 192.168.11.47:18848username: nacospassword: nacosgateway:
#      discovery:
#        locator:
#          enabled: true    #是否启动自动识别nacos服务(约定大于配置)routes: #路由数组[路由 就是指定当请求满足什么条件的时候转到哪个微服务]- id: product_route #当前路由的标识,要求唯-uri: http://localhost:8086 #请求要转发到的地址order: 1 #路由的优先级,数字越小级别越高predicates: #断言(就是路由转发要满足的条件)- Path=/product-service/**,/ddd/s #当请求路径满足Path指定的规则时,才进行路由转发- Before=2024-08-20T17:42:47.789-07:00[America/Denver]- CheckAuth=zhangSan1filters: #过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改- StripPrefix=1 #转发之前去掉1层路径,- CheckAuth=lisi

全局过滤器(Global Filters)配置

在这里插入图片描述

自定义全局过滤器(Global Filters)配置类(一般都是实现认证或者授权,或者做日记记录,不需要在配置文件做任何配置)

package com.test.gate.config;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;/*** @Description:* @Author: xu* @Data: 2024-2024/4/12-20* @Version: V1.0*/
@Component
public class LogGlobalFilter implements GlobalFilter {private static Logger log = LoggerFactory.getLogger(LogGlobalFilter.class);@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//做业务处理,授权或者日记记录log.info(exchange.getRequest().getPath().value());return chain.filter(exchange);}
}

要启用 Reactor Netty 访问日志,请设置-Dreactor,netty.http,server.accessLogEnabled=true,它必须是 Java 系统属性,而不是 Spring Boot 属性。如果是jar包启动,就将网关打包成jar包,如下运行

java -jar gateway.jar -Dreactor,netty.http,server.accessLogEnabled=true

idea配置网关日记打印,在vm配置 -Dreactor.netty.http.server.accessLogEnabled=true

在这里插入图片描述

将网关日志记录全部输出到日志文件。以下示例创建一个Logback.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 按天滚动的文件输出 --><appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>G:\temptemptemp\gatewaylog\logfile.log</file> <!-- 修改为你想要保存日志文件的路径 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>G:\temptemptemp\gatewaylog\logfile.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 指定按日期滚动的文件名格式 --><maxHistory>30</maxHistory> <!-- 保留最多30天的历史日志文件 --></rollingPolicy><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 异步日志输出 --><appender name="async" class="ch.qos.logback.classic.AsyncAppender"><appender-ref ref="ROLLING_FILE"/> <!-- 将异步 appender 链接到文件输出 --></appender><!-- 记录器配置 --><logger name="reactor.netty.http.server.AccessLog" level="INFO" additivity="false"><appender-ref ref="async"/> <!-- 将异步 appender 应用于特定的日志记录器 --><appender-ref ref="STDOUT"/> <!-- 控制台输出 --></logger><!-- 根日志级别设置 --><root level="info"><appender-ref ref="STDOUT"/> <!-- 控制台输出 --><appender-ref ref="ROLLING_FILE"/> <!-- 将按天滚动的文件输出器添加到根输出器中 --></root></configuration>

Gateway跨域配置(CORS Configuration),网关官网跨域配置

方法一:yml配置文件配置跨域

spring:cloud:gateway:globalcors:cors-configurations:'[/**]':  #运行跨域访问的资源allowedOrigins: "https://docs.spring.io"  #跨域允许来源allowedMethods:- GET- POST

方法二:通过配置类设置跨域(注意UrlBasedCorsConfigurationSource 导入的包是import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource)

package com.test.gate.config;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;
import org.springframework.web.util.pattern.PathPatternParser;/*** @Description:* @Author: xu* @Data: 2024-2024/4/12-22* @Version: V1.0*/
@Configuration
public class CorsConfig {@Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowedHeader("*");UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());source.registerCorsConfiguration("/**", config);return new CorsWebFilter(source);}
}

网关限流整合sentinel官网

pom.xml添加依赖整合sentinel,和官网配置的有以下不一样是因为spring-cloud-alibaba-sentinel-gateway这个依赖比adapter依赖多了SentinelSCGAutoConfiguration自定注入例如很多需要的bean

<!--sentinel整台gateway  以前版本使用adapter-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
<!--sentinel的依赖-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

配置文件配置sentinel

#   配置sentinelsentinel:transport:dashboard: 127.0.0.1:8858   #sentiel的dashboard地址
http://www.ds6.com.cn/news/59659.html

相关文章:

  • 网店怎么开新手南宁优化网站收费
  • 省政府网站群建设研究福州seo排名优化公司
  • 小程序如何开发seo大全
  • 做app 的模板下载网站谷歌外链工具
  • 网站维护的作用百度客服24小时电话人工服务
  • 企业网站源代码下载今日足球比赛分析推荐
  • seo网络运营晨阳seo顾问
  • soho怎么做网站seo的作用有哪些
  • 湖南系统建站怎么用打开百度网页版
  • 打开app志鸿优化设计官网
  • 有什么做衣服的网站吗郭生b如何优化网站
  • 国外做袜靴的网站建网站赚钱
  • 有专门学做衣服网站有哪些博客营销案例
  • 用网站模板做新网站重要新闻
  • 宁波城乡建设委员会的网站如何在网站上推广自己的产品
  • iis 没有新建网站关键词seo排名怎么选
  • php 5.2.17 wordpressseo优化顾问
  • 手机网站注册页面沈阳seo建站
  • 网站策划怎么样产品推广ppt
  • 官方网站制作思路深圳百度国际大厦
  • 网站建设 知乎aso关键词覆盖优化
  • 网站安全证书过期怎么办网络营销品牌推广公司
  • 昆明网站排名优化公司哪家好网站推广苏州
  • 建立网站的方式软文一般发布在哪些平台
  • 微信公众号的h5网站开发6百度推广服务费3000元
  • 哪个网站做外贸好网络营销与策划
  • 智能化建设网站全球搜效果怎么样
  • 做泥网站网站建设费用都选网络
  • 武汉口碑最好的装修公司有哪几家白杨seo
  • wordpress php 开发seo01