ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2022-07-04 14:34:04  阅读:230  来源: 互联网

标签:负载 服务 SpringBoot spring nacos alibaba Nginx SpringCloudAlibaba cloud


    微服务强调每个服务都是单独的数据库,在不使用微服务的情况下可以采用分布式架构,通过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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有