系统相关
首页 > 系统相关> > SpringCloudAlibaba学习(解决SpringBoot初始化以及Nginx启动出错问题)

SpringCloudAlibaba学习(解决SpringBoot初始化以及Nginx启动出错问题)

作者:互联网

    微服务强调每个服务都是单独的数据库,在不使用微服务的情况下可以采用分布式架构,通过Template来调用远程的接口,但这种方式维护起来很麻烦,而且有很多弊端。

    一、环境搭建

    1、首先搭建SpringBoot框架

    使用Spring Initializar快速搭建SpringBoot框架时可能会遇到访问超时的问题。此问题有两种解决的办法:

    ①将服务源改成https://start.aliyun.com,这种方法是采用alibaba的springboot架构模型,会和常规的模型有出入。(这种方法有的时候搭建出来没有pom文件,不能被识别为maven项目,这种情况采用第二种方法即可)
    ②将服务源改成http://start.springboot.io,这种方式是采用传统的springboot架构模型,只是这个是国内源。

    SpringCloud的学习结合:https://spring.io/projects/spring-cloud-alibaba 和 https://github.com/alibaba/spring-cloud-alibaba/wiki进行学习

    依赖版本说明:

    

因为我使用的Nacos版本是2.0.0的,所以SpringCloud版本选用2.2.7.RELEASE,相应的SpringBoot的版本采用2.3.12.RELEASE

1、首先添加SpringCloudAlibaba依赖
//将依赖放在dependencyManagement中继承该父项目的子类必须显示的声明才能使用。
//一般都会采用这种方式来继承一个版本管理器,因为<parernt>中只能继承一个,一般来说公司都会有一个父Springboot项目,我们可以在<parent>中继承该项目。
<dependencyManagement>
  <dependencies>
    <!--SpringCloudAlibaba版本管理-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>${project-version}</version>//version是2.2.7.RELEASE
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <!--SpringCloud的版本管理-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${springCloud-version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
至此,SpringCloudAlibaba的环境就已经搭建好了。

二、注册中心Nacos

1、单机模式
①搭建分布式架构,通过分布式架构来搭建微服务架构
          通过RestTempate来实现调用远程的rest接口
          首先添加RestTemplate的配置类
          @Bean
   public RestTemplate restTemplate(RestTemplateBuilder builder){
      RestTemplate restTemplate = builder.build();
      return restTemplate;
}
然后调用restTemplate的方法:getforObject(),通过传入微服务的服务名和返回值类型来实现远程接口的调用。
②启动 进入到nacos的bin目录,在cmd中运行 startup -m standalone
③复制输出的网址到浏览器进行访问 默认账号和密码都是nacos
④在每个微服务(子SpringBoot项目)中加入nacos依赖

    <!--nacos服务器注册发现-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

④在配置文件中配置nacox
  #应用名称,nacos会把它当做是服务名称
spring:
  application:
    name: order-service
cloud:
  nacos:
    server-addr: ip:8848
    discovery:
      username: nacos
      password: nacos
      #命名空间,用于拆分服务(可以将服务拆分为生产环境和测试环境)
      namespace: public

⑤这时候服务注册与发现就会自动将我们的服务注册到nacos注册中心
⑥此时直接在浏览器访问的话会报404错误,是因为nacos的执行原理是依赖负载均衡器来调用微服务的。此时只需要在RestTemplate的配置类上加入注解@LoadBalanced即可为服务端配置负载均衡。(该负载均衡采用的是轮询机制)即:
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
      RestTemplate restTemplate = builder.build();
      return restTemplate;
    }

nacos执行原理:

创建永久实例:通过:spring.cloud.nacos.discovery.ephemeral: false  哪怕宕机了也不会删除实例

2、集群模式部署nacos
①修改application.properties文件,修改端口号,数据源使用mysql,修改mysql数据库的连接参数
②修改cluster.conf.example文件(现将其拷贝一份,然后将名字修改为cluster.conf)
③修改startup文件,将占用内存修改小一点。
④安装Nginx并启动,第一次启动可能会一闪而过,这时查看日志,如果有错误则修改监听端口,如果没错误则说明启动成功(windows启动Nginx本身就是一闪而过)
在启动之前还应该加入(Nginx是最常见的软件负载均衡)
upstream nacoscluster{
      server ip:8849;
      server ip:8851;
      server ip:8860;
}
及修改
location /nacos/{
    proxy_pass http://nacoscluster/nacos/;
}

⑤将application.yml中的服务器地址改为Nginx的地址启动即可

三、微服务负载均衡器Ribbon
内置很多负载均衡的策略,我们可以通过覆盖掉这些配置,有两种方式:
1、通过配置类的方式进行修改
①新建一个Ribbon的配置类,注意该配置类不能放在扫描包能扫到的位置,要不然会冲突
@Configuration
public class RibbenRandomRuleConfig {
    /*方法名一定要叫这个*/
    @Bean
    public IRule iRule(){//IRule是所有负载均衡策略的父接口
      return new RandomRule();
  }
}

在启动类上加上注解:
@RibbonClients(value = {
    @RibbonClient(name = "stock-service",configuration = RibbenRandomRuleConfig.class)

2、通过配置文件的方式进行修改
#权重
stock-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

Spring Cloud LoadBalancer:是Spring Cloud官方自己提供的客户端负载均衡器,用于替代Ribbon
使用:
①首先设置Ribbon为禁用,或者在依赖中排除Ribbon(建议使用依赖排除)
<!--nacos服务器注册发现-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      <!--将Ribbon排除掉-->
      <exclusions>
        <exclusion>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netfix-ribbon</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

在配置中加入:
spring:
  cloud:
    loadbalancer:
      ribbon:
        enable: false
②定义配置类,配置Bean,定义自己的负载均衡策略。
③在启动类上加注解@LoadBalancerClients(),使用方法和Ribbon相同,只是注解不同。

标签:负载,服务,SpringBoot,spring,nacos,alibaba,Nginx,SpringCloudAlibaba,cloud
来源: https://www.cnblogs.com/yuhouwen/p/16442817.html