zoukankan      html  css  js  c++  java
  • Spring Cloud

    近几年微服务很火,Spring Cloud提供了为服务领域的一整套解决方案。其中Spring Cloud Alibaba是我们SpringCloud的一个子项目,是提供微服务开发的一站式解决方案。

    包含微服务开发的必要组件,基于SpringCloud 符合SpringCloud标准,是阿里的微服务的解决方案。

    文档:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

    Nacos的安装与启动

    Nacos是其中一个组件。是阿里开源的可用于注册中心和配置中心的开源组建。

    下载安装也比较简单,只需要下载一个压缩包即可,解压即可用,windows和了linux都适用。

    我的是windows,然后下载的是nacos-server-1.1.4.zip,选择一个目录解压的到如下文件。


    只需要切换到bin目录下,双击startup.cmd,就会看到打开了一个cmd窗口

    等待一会,以下这样就是启动好了

     然后,浏览器访问,http://localhost:8848/nacos  打开他的控制台,用户名密码都是nacos,然后进来就是这样,就启动好了。

    是不是简单。

    注册服务到Nacos

    然后我们可以写一个服务去注册到nacos上,创建SpringBoot的项目。创建好之后按以下步骤把Nacos引入到我们的项目中。

    第一:引入Nacos客户端的依赖

    <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
    </dependency>    

    第二:配置Nacos的地址

    spring:
      application:
        name: order-center
      cloud:
       nacos:
         discovery:
           server-addr: localhost:8088

    第三:启动项目,观察Nacos服务列表。成功注册。

    Nacos集群启动

    刚才是在Nacos单机的情况下完成的操作,实际情况下作为注册中心都是要集群部署保证高可用的。我们就来看一下Nacos集群模式如何配置并启动的。

    我们就弄三个实例,

    第一:把我们解压的Nacos的包复制三个,如下图:

    第二:进入到各自的conf目录下打开application.properties文件,一次修改为 server.port=8849/8850/8851三个端口,然后添加如下配置,保存。(记得三个包都要改)

    spring.datasource.platform=mysql
    
    # 数据库实例数量
    db.num=1
    #自己数据库的连接信息
    db.url.0=jdbc:mysql://localhost:3306/nacos_test?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    db.user=root
    db.password=你的数据库密码

    第三:在conf目录下找到nacos-mysql.sql 这个SQL脚本,在你的mysql里新建一个数据量,名字你自己定,然后执行这个SQL。(数据库名字要和你配置里写的一致)

    第四:在conf目录下找到 cluster.conf.example 文件,命名为 cluster.conf 然后打开填入三个 Nacos的IP和端口。(记得改为你自己的IP和端口)

    这里一定要写真实的IP,不能写localhost,127.0.0.1,不然集群启动会找不到别的实例,导致无法选举出leader

    192.168.0.107:8849
    192.168.0.107:8850
    192.168.0.107:8851

    注意:三个实例的以上配置都要改。改完之后就可以去启动了。

    第五:启动。这个时候启动要注意了,不能直接双击startuo.cmd了

    博主就是因为在集群模式下依然使用双击的启动方式,导致一直是起了三个单机模式的实例,最后找了很久才发现是因为这个启动脚本默认是单机启动的,集群启动需要加参数指定,而Linux的启动脚本正好相反,默认是集群模式,单机启动需要加参数-m standalone。

    集群模式下启动需要打开CMD窗口,打开三个,进入到各自的bin目录下,分别执行,startup.smd -m cluster,然后等待一会,即可看到以cluster模式启动的字眼

    然后访问这三台Nacos,点击节点列表就可以看到三个Nacos实例 谁是Leader 谁是follower一清二楚。

    集群下客户端怎么连?

    第一种:可以在刚才单机的基础上加多个IP和端口中间用逗号隔开

    第二种:配合Nginx代理我们的Nacos的集群,配置里就直接写Nginx的IP和端口即可

    Nginx配置如下:

        upstream nacos_server{
            server 192.168.0.107:8849;
            server 192.168.0.107:8850;
            server 192.168.0.107:8851;
        }
        server {
            listen       8088;
            server_name  localhost;
    
            location /nacos/ {
               proxy_set_header Host $http_host;
               proxy_pass http://nacos_server/nacos/;
            }
        }

    而我们访问Nacos的控制台的时候,就可以通过Nginx来访问了,客户端注册到Nacos的时候就可以直接写Nginx的地址了。

    获取注册中心注册的服务的地址列表

    我们刚才写了一个springboot的项目引入了Nacos的客户端,并成功把服务信息注册到了Nacos上。现在我们来验证一下。

    写个Controller,注入RestTemplate 和 DiscoveryClient (Nacos的服务发现客户端)

        @Autowired
        private DiscoveryClient discoveryClient;
        @Autowired
        private RestTemplate restTemplate;
        
    @GetMapping(
    "/getServiceList") public List<ServiceInstance> getServiceList() { List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("order-center"); return serviceInstanceList; }

    然后重启这个服务,浏览器访问 http://localhost:8081/getServiceList

    能够从Nacos拿到我们注册的服务的信息。

    OK,今天就是一个Nacos的一个入门案例,就分享到这里。

    总结一下:

    1、Nacos同一个程序包同时支持Windows和Linux。

    2、支持单机启动和集群启动

    3、Windows单机启动直接双击 startup.cmd,Linux执行 ./startup.sh -m stanalone

    4、配置好集群后,Windows集群启动CMD窗口下执行 startup.cmd -m cluster,Linux直接执行./startup.sh

    5、集群下客户端可使用多地址逗号隔开的方式,也可使用集群+Nginx的方式,推荐后者。

    Nacos还有更加细粒度的注册中心配置方式,如不同的环境,不同Group,不同的location,不同的版本控制等。

    欢迎关注我的公众号:编程大道,一起交流学习。

  • 相关阅读:
    【NOI D2T1】量子通信(容斥原理+卡常)
    CF1555D Say No to Palindromes(线段树)
    CF1554B Cobb
    CF1554A Cherry
    【做题笔记】UVA10162 Last Digit
    【做题记录】CF1223D Sequence Sorting
    CF39H
    UVA10763
    题解 AT2361 [AGC012A] AtCoder Group Contest
    このブログについて | About this blog
  • 原文地址:https://www.cnblogs.com/ibigboy/p/12541928.html
Copyright © 2011-2022 走看看