如何在国外网站上做外贸网站页面权重
web/
2025/10/5 4:23:42/
文章来源:
如何在国外网站上做外贸,网站页面权重,公众号怎么做临时链接,大一网站开发体会文章目录 Spring Cloud服务注册与发现EurekaServer 启动服务注册服务发现 NacosServer启动 (nacos2.2.0)服务注册服务发现服务集群命名空间配置中心集群搭建 负载均衡RPC远程过程调用Feign使用 网关路由断言工厂网关过滤工厂跨域处理全局跨域配置单个微服务跨域配置 限流 熔断 … 文章目录 Spring Cloud服务注册与发现EurekaServer 启动服务注册服务发现 NacosServer启动 (nacos2.2.0)服务注册服务发现服务集群命名空间配置中心集群搭建 负载均衡RPC远程过程调用Feign使用 网关路由断言工厂网关过滤工厂跨域处理全局跨域配置单个微服务跨域配置 限流 熔断 降级 Spring Cloud 与springboot版本对应关系 Springcloud-alibaba版本对应 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 使用Springboot 2.6.13 springcloud 2021.0.1 spring-cloud-alibaba 2021.0.5.0 propertiesspring-boot.version2.6.13/spring-boot.versionspring-cloud.version2021.0.1/spring-cloud.versionspring-cloud-alibaba.version2021.0.5.0/spring-cloud-alibaba.version/properties
dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion${spring-boot.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies
/dependencyManagement
服务注册与发现
Eureka
Server 启动
引入依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-server/artifactId
/dependency2.在启动类上添加注解 EnableEurekaServer
3.配置文件 application.properties
spring.application.nameeureka-app
server.port20020
eureka.client.service-url.defaultZonehttp://127.0.0.1:20020/eureka4.启动后访问 http://127.0.0.1:20020 服务注册
新建服务1
1.引入依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId
/dependency2.添加配置
spring.application.namelink1
server.port9000
eureka.client.service-url.defaultZonehttp://127.0.0.1:20020/eureka3.创建controller
RequestMapping(service1)
RestController
public class Link1Controller {GetMapping(link1)public String link1(){return 微服务链路1执行完毕;}
}重复以上,在创建一个服务2
spring.application.namelink2
server.port9001
eureka.client.service-url.defaultZonehttp://127.0.0.1:20020/eurekaRequestMapping(service2)
RestController
public class Link2Controller {GetMapping(link2)public String link2(){return 微服务链路2执行完毕;}
}测试可以访问以上两个服务的接口,查看eureka 发现注册成功 服务发现
跨服务调用使用应用层的http协议发送请求, 使用RestTemplate进行
注入RestTemplate
Bean
LoadBalanced
public RestTemplate getRestTemplate(){return new RestTemplate();
}编写新的controller
RequestMapping(service1)
RestController
public class Link1Controller {Autowiredprivate RestTemplate restTemplate;GetMapping(link1)public String link1(){String url http://link2/service2/link2;String res restTemplate.getForObject(url, String.class);return 微服务链路1执行完毕res;}}注意: 必须在restTemplate上添加LoadBalanced注解,否则无法将服务名解析为ip:port并使用ribbon进行负载均衡
抛出UnknownHostExecption异常
报错信息如下:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for http://link2/service/link2: link2; nested exception is java.net.UnknownHostException: link2] with root causejava.net.UnknownHostException: link2at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[na:1.8.0_392]at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_392]at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_392]at java.net.Socket.connect(Socket.java:607) ~[na:1.8.0_392]at java.net.Socket.connect(Socket.java:556) ~[na:1.8.0_392]Nacos Server启动 (nacos2.2.0)
修改配置 application.properties
spring.datasource.platformmysql### Count of DB:
db.num1### Connect URL of DB:
db.url.0jdbc:mysql://127.0.0.1:3306/nacos?characterEncodingutf8connectTimeout1000socketTimeout3000autoReconnecttrueuseUnicodetrueuseSSLfalseserverTimezoneUTC
db.user.0root
db.password.0root创建数据库nacos, 执行该目录下的sql文件创建表结构 单机启动命令
startup.cmd -m standalone服务注册
引入依赖
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency添加配置
spring.application.namelink1
server.port9002
spring.cloud.nacos.server-addr127.0.0.1:88483.编写controller并启动, 访问 http://localhostL8848/nacos 服务发现
https://blog.csdn.net/weixin_43887184/article/details/124036205
必须添加loadbalancer依赖,否则无法远程调用
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-loadbalancer/artifactId
/dependency服务集群
spring.cloud.nacos.discovery.cluster-namexian命名空间
不同环境相互隔离
spring.cloud.nacos.discovery.namespaceba332e10-ef24-4e05-b1c2-3f903df60fde配置中心
引入依赖
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId
/dependency在nacos中编写配置信息: Data ID: 应用名-profile.后缀 (yaml 或者 properties)
添加bootstrap依赖, spring cloud2.4后,不在优先读取bootstrap文件
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-bootstrap/artifactId
/dependency编写bootstrap.properties文件, 包括应用名 profile 文件后缀, 配置文件所在命名空间
spring.application.namelink1
spring.profiles.activedev
spring.cloud.nacos.config.file-extensionproperties
spring.cloud.nacos.config.namespaceba332e10-ef24-4e05-b1c2-3f903df60fde
prop2Frombootstrap_yaml编写controller, 使用Value注入所写配置信息并测试
Slf4j
RequestMapping(service1)
RestController
public class Link1Controller {Autowiredprivate RestTemplate restTemplate;Value(${propFrom})private String p1;Value(${prop2From})private String p2;Value(${prop3From})private String p3;GetMapping(link1)public String link1(){String url http://link2/service2/link2;String res restTemplate.getForObject(url, String.class);return 微服务链路1执行完毕res;}GetMapping(getProp)public String getP(){log.info(p1);log.info(p2);log.info(p3);return p1p2p3;}
}
查看日志,或者接口返回信息即可看到成功读取
2024-01-16 16:52:08.010 INFO 14176 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller : nacos8848
2024-01-16 16:52:08.011 INFO 14176 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller : bootstrap_yaml
2024-01-16 16:52:08.011 INFO 14176 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller : app_yamlnacos8848为nacos中的配置propFrom,成功注入到p1
prop2From为bootstrap中的自定义配置
prop3From为application.properties中定义
配置动态更新方式:
使用RefreshScope注解,作用于注入远程配置的类上不使用Value注解, 使用ConfigurationProperties注解代替,无须RefreshScope即可动态更新 未成功
多环境配置共享
微服务启动会从nacos读取以下配置:
[spring.application.name]-[spring.profiles.active].yaml[spring.application.name].yaml (共享配置可以放在这里) 多个不同微服务配置共享
配置信息: spring.cloud.nacos.config.extension-configs[0].data-idextend_common.properties
spring.cloud.nacos.config.shared-configs[0].data-idshared_common.propertiesSlf4j
RequestMapping(service)
RestController
RefreshScope
//ConfigurationProperties
public class Link1Controller {Autowiredprivate RestTemplate restTemplate;Value(${propFrom})private String p1;Value(${prop2From})private String p2;Value(${prop3From})private String p3;Value(${prop4From})private String p4;Value(${prop5From})private String p5;Value(${prop6From})private String p6;GetMapping(link1)public String link1(){String url http://link2/service/link2;String res restTemplate.getForObject(url, String.class);return 微服务链路1执行完毕res;}GetMapping(getProp)public String getP(){log.info(p1);//log.info(propFrom);log.info(p2);log.info(p3);log.info(p4);log.info(p5);log.info(p6);return p1p2p3p4p5p6;//return propFromp2p3;}}访问getProp接口, 日志如下:
2024-01-17 10:41:20.565 INFO 6636 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller : nacos_props
2024-01-17 10:41:20.565 INFO 6636 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller : bootstrap_yaml
2024-01-17 10:41:20.565 INFO 6636 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller : app_yaml
2024-01-17 10:41:20.565 INFO 6636 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller : link1_props
2024-01-17 10:41:20.566 INFO 6636 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller : extend_common
2024-01-17 10:41:20.566 INFO 6636 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller : shared_common其中p1来自nacos中的 link1-dev.properties, p2来自本地bootstrap.properties, p3来自本地application.properties
p4来自nacos中link1.properties p5来自nacos中extend_common.properties,p6来自nacos中shared_common.properties 集群搭建
在conf目录下添加cluster.conf文件,内容为:
127.0.0.1:8846
127.0.0.1:8847
127.0.0.1:8848将修改好的nacos目录复制2份,修改复制nacos中application.properties端口为8846和8847 依次启动即可 启动命令
startup.cmd启动中可能会报错:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name grpcClusterServer: Invocation of init method failed; nested exception is java.io.IOException: Failed to bind这是由于: 即1个8848端口的nacos还会占用9848,9849,7848端口, 因此重新配置cluster.conf文件以及设置nacos端口
127.0.0.1:8844
127.0.0.1:8846
127.0.0.1:8848负载均衡 eureka包下已经默认有loadbalancer依赖
从 Spring Cloud 2020.0.0-M1 开始, 移除ribbon 目前只有两个默认的策略 轮询和随机 RPC远程过程调用
Feign使用
引入依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId
/dependency2.启动类添加 EnableFeignClients注解
3.编写接口 (复用Spring MVC的注解)
FeignClient(link2)
public interface Link2Client {GetMapping(/service/link2)String getLink2();
}4.在controller中注入并使用
RequestMapping(service1)
RestController
RefreshScope
public class Link1Controller {Autowiredprivate Link2Client link2Client;GetMapping(link1)public String link1(){String res link2Client.getLink2();return 微服务链路1执行完毕 res;}
}
在当前版本下,feign默认开启使用Apache HttpClient作为底层,使用默认配置即可
网关
Spring Cloud Gateway
网关作用
鉴权路由限流
使用:
1.引入依赖 (只要是调用其他服务必须引loadbalancer, 否则无法发现服务)
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId
/dependency
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-loadbalancer/artifactId
/dependency2.编写配置文件
spring:application:name: gatewaycloud:nacos:server-addr: http://127.0.0.1:8848discovery:namespace: ba332e10-ef24-4e05-b1c2-3f903df60fdecluster-name: xiangateway:routes:- id: link1uri: lb://link1predicates:- Path/service1/**- id: link2uri: lb://link2predicates:- Path/service2/**server:port: 10001访问: http://127.0.0.1:10001/service1/link1 和 http://127.0.0.1:10001/service2/link2 访问成功
路由断言工厂
(更详细的使用 https://www.hxstrive.com/subject/gateway/2605.htm)
After
接受一个UTC格式的日期时间格式参数,表示在该时间点之后允许路由
spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After2022-03-13T00:54:30.87708:00[Asia/Shanghai] Before
参数同上, 表示某个时间点之前允许路由
spring:cloud:gateway:routes:- id: before_routeuri: https://example.orgpredicates:- Before2024-05-20T00:54:30.87708:00[Asia/Shanghai]Between
跟两个参数, datetime1 datetime2 表示在这个时间段内允许路由
spring:cloud:gateway:routes:- id: between_routeuri: https://example.orgpredicates:- Between2024-05-20T00:00:00.00008:00[Asia/Shanghai],2024-05-21T00:00:00.00008:00[Asia/Shanghai]Cookie
接两个参数, key 和 value, value可以为正则表达式, 即只有携带该cookie key且value匹配才可以路由
spring:cloud:gateway:routes:- id: cookie_routeuri: https://example.orgpredicates:- Cookiechocolate, ch.pHeader
spring:cloud:gateway:routes:- id: header_routeuri: http://example.orgpredicates:- HeaderX-Request-Id, \d
6.Host (请求头中)
spring:cloud:gateway:routes:- id: host_routeuri: https://example.orgpredicates:- Host**.somehost.org,**.anotherhost.org7.Method
spring:cloud:gateway:routes:- id: method_routeuri: https://example.orgpredicates:- MethodGET,POST上述示例表示只有 GET和POST请求允许路由
8.Path
根据请求路径匹配
spring:gateway:routes:- id: link1uri: lb://link1predicates:- Path/service1/**- id: link2uri: lb://link2predicates:- Path/service2/**9.Query
请求参数中含有名为green的参数即可
spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Querygreen请求参数中有名为red, 值与gree.匹配的参数时才可访问
spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Queryred, gree.10.RemoteAddr
位于该网段下的ip才可访问
spring:cloud:gateway:routes:- id: remoteaddr_routeuri: https://example.orgpredicates:- RemoteAddr192.168.1.1/2411.Weight
spring:cloud:gateway:routes:- id: weight_highuri: https://weighthigh.orgpredicates:- Weightgroup1, 8- id: weight_lowuri: https://weightlow.orgpredicates:- Weightgroup1, 280%请求访问weighthigh.org, 20%请求访问weightlow.org
网关过滤工厂
AddRequestHeaderRemoveRequestHeaderAddResponseHeaderRemoveResponseHeaderRequestRateLimiter
… 更多请参考https://docs.spring.io/spring-cloud-gateway/reference/spring-cloud-gateway/gatewayfilter-factories.html
默认过滤器,对所有的路由生效
spring:cloud:gateway:default-filters:- AddResponseHeaderX-Response-Default-Red, Default-Blue- PrefixPath/httpbin全局过滤器
自定义编码实现
Component
Order(-1)
public class CustomGlobalFilter implements GlobalFilter {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {return null;}
}过滤器 order值越小,优先级越高
order值相同时, 顺序为: defaultFilter - 路由过滤器 - GlobalFilter
跨域处理
全局跨域配置
spring:cloud:gateway:globalcors:cors-configurations:[/**]:allowedOrigins: https://docs.spring.ioallowedMethods:- GET/** 表示作用于所有请求allowedOrigins: 允许哪些网站的跨域请求allowedMethods: 允许跨域的请求方式
单个微服务跨域配置
spring:cloud:gateway:routes:- id: cors_routeuri: https://example.orgpredicates:- Path/service/**metadata:corsallowedOrigins: *allowedMethods:- GET- POSTallowedHeaders: *maxAge: 30限流 熔断 降级
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87158.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!