SpringCloud整合之中遇到的坑

最近在跟着谷粒商城做项目,但现在是2022年了,视频中的项目是20年,所以我选择了更新一下版本,使用的版本是Cloud2020,CloudAlibaba的是2021.1,SpringBoot版本用的2.5.13,Nacos根据alibaba文档上用的1.4.1。版本说明链接

Nacos的配置中心

在SpringBoot高版本后需要手动加入一个bootstrap依赖,否则不能发现引导文件

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-bootstrapartifactId>
            <version>3.1.1version>
        dependency>

一、Nacos整合的依赖问题

我觉得如果说SSM是配置炼狱,那么Cloud简直就是依赖炼狱,所以最好跟着官方版本走,这里我也是踩了很久的坑,在Nacos整合Gateway网关进行转发的时候,会有跨域的问题,再有就是版本依赖,先发一下跨域的解决

/**
 * @author Xiang
 * @date 2022/5/2 - 3:08 下午
 */
@Configuration
public class MallCorsConfig {

    @Bean
    public CorsWebFilter corsWebFilter() {
        UrlBasedCorsConfigurationSource configurationSource = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
//        corsConfiguration.addAllowedOrigin("*");
		// 这里为什么要注释是因为SpringBoot高版本之后需要用 addAllowedOriginPattern
        corsConfiguration.addAllowedOriginPattern("*");
        corsConfiguration.setAllowCredentials(true);
        configurationSource.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsWebFilter(configurationSource);
    }

}

这是第一个跨域的问题,还有一个就是一个gateway整合nacos进行转发的问题,先说一下我的问题,最开始在进行nacos搭建的时候,我并没有注意nacos的版本,直接docker pull nacos拉下了最新版本,2.1.0,但是我后面整合的时候发现springBoot2.5.13和nacos2.1.0是可以完美契合实现服务发现和配置中心的,所以在整合gateway、nacos的时候也还是用的2.1.0,但后面进行转发的时候gateway的nacos一直爆发现不了服务 no server available: mall-coupon,返回结果503,是在是真正的找了一天的问题,百度的解决方案什么的都试过了,然并卵,最后还是去看官方版本依赖说明,才发现SpringCloud整合之中遇到的坑_第1张图片
SpringCloud整合之中遇到的坑_第2张图片
最后估摸着应该是版本依赖的问题,就重新搭建了一个1.4.1版本的nacos,这里也有一个坑,1.4.1版本的JVM内存配置默认都是1G和2G,在进行启动的时候要注意设置一下系统配置参数
,贴一下我的docker Nacos命令

[root@VM-16-11-centos ~]# docker pull docker.io/nacos/nacos-server:1.4.1

[root@VM-16-11-centos ~]# docker run -d \
> -e MODE=standalone \
> -e JVM_XMS=256M \
> -e JVM_XMX=256M \
> -e JVM_XMN=256M\
> -e SPRING_DATASOURCE_PLATFORM= mysql \
> -e MYSQL_SERVICE_HOST=你的mysql ip \
> -e MYSQL_SERVICE_PORT=你的端口 \
> -e MYSQL_SERVICE_USER=你的账号 \
> -e MYSQL_SERVICE_PASSWORD=你的密码 \
> -e MYSQL_SERVICE_DB_NAME=你的库名 \
> -p 8848:8848 \
> --restart=always \
> --name nacos \
> docker.io/nacos/nacos-server

还有就是因为ribbon在20年的时候就被宣布停止维护了,所以在Cloud20年开始就移除了ribbon的组件,但是nacos里面还是有默认的ribbon实现负载均衡,这里要替换一下依赖,手动加入loadbalancer

		
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            <version>2021.1version>
            
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.cloudgroupId>
                    <artifactId>spring-cloud-starter-netflix-ribbonartifactId>
                exclusion>
            exclusions>
        dependency>
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
            <version>2021.1version>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-loadbalancerartifactId>
        dependency>

Gateway整合踩坑

在使用gateway进行路由的时候,一定要按照官网的版本进行对应,否则会爆出各种花式Exception,比如502,发现不了nacos服务,404等等,切记切记一定要按照官网的版本对应的来。在说一个我的坑,在springCloudAlibaba的版本对应上,cloud用2020.1版本。cloud alibaba使用2021.1,nacos使用1.4.1,然而整合gateway负载均衡路由的时候就爆出nacos配置中心请求监听配置502,最后索性把所有版本全部换至最新推荐,Spring Cloud 2021.0.1,cloud alibaba 2021.0.1.0,nacos1.4.2,SpringBoot2.6.3,最后完美解决


还有一个坑就是,在使用gateway进行路由的时候,如果有服务注册在8080端口上,即时在nacos服务上已经注册成功,但还是出现gateway发现不到的情况,最后将端口更换至其他完美解决

你可能感兴趣的