Spring Cloud进入了维护模式。Spring Cloud alibaba对Spring Cloud做了封装,使用起来更简单。包含的功能有服务限流降级、服务注册于发现、分布式配置管理、消息驱动能力、阿里云对象存储、分布式任务调度等。
参考文档:
https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html
源代码:https://github.com/zhongyushi-git/spring-cloud-alibaba-demo.git
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。是注册中心与配置中心的组合。
官网:https://nacos.io/zh-cn/index.html
windows系统:https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.zip
Linux系统:https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.tar.gz	
下载压缩包后解压即可使用。进入bin目录,双击startup.cmd看到下图说明运行成功。访问http://localhost:8848/nacos,登录用户名和密码都是nacos。

登录之后的页面如下,可以看到相关想信息。

把下载好的压缩包复制到linux后解压,解压之后可直接进行后续nacos的集群配置
tar -zxvf nacos-server-1.1.4.tar.gz -C /usr/local
创建创建maven的父工程spring-cloud-alibaba-demo,导入依赖
 
<!--统一管理jar包版本-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
    </properties>
    <!--  依赖管理,父工程锁定版本-->
    <dependencyManagement>
        <dependencies>
            <!--spring boot 2.2.2-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--log4j-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
    </build>
1)创建服务提供者子模块cloud-alibaba-provider8001,导入依赖
 
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--springcloud alibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
2)yml配置
 
server: port: 8001 spring: application: name: cloud-alibaba-nacos-provider cloud: #配置nacos的服务地址 nacos: discovery: server-addr: 127.0.0.1:8848 management: endpoints: web: exposure: include: "*"
3)创建启动类
 
package com.zys.cloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class NacosProviderMain8001 { public static void main(String[] args) { SpringApplication.run(NacosProviderMain8001.class,args); } }
4)创建controller接口
 
package com.zys.cloud.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @Value("${server.port}") private String port; @GetMapping("/user/get") public String get() { return "provider port is :" + port; } }
9)创建服务提供者子模块cloud-alibaba-provider8002,方式同8001,只是端口号不同。
1)创建服务消费者子模块cloud-alibaba-consumer80,导入依赖
 
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--springcloud alibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
2)yml配置
 
server: port: 80 spring: application: name: cloud-alibaba-nacos-consumer cloud: #配置nacos的服务地址 nacos: discovery: server-addr: 127.0.0.1:8848 #消费者要访问的微服务名称 service-url: nacos-user-service: http://cloud-alibaba-nacos-provider
3)创建启动类
 
package com.zys.cloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class ConsumerMain80 { public static void main(String[] args) { SpringApplication.run(ConsumerMain80.class, args); } }
4)创建config配置类
 
package com.zys.cloud.config; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; //相当于spring中的applicationContext.xml @Configuration public class ConfigBean { @Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
5)创建controller接口
 
package com.zys.cloud.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController @RequestMapping("/consumer") public class UserController { @Value("${service-url.nacos-user-service}") private String serverUrl; @Autowired private RestTemplate restTemplate; @GetMapping("/get") public String get(){ return restTemplate.getForObject(serverUrl+"/user/get",String.class); } }
先启动nacos,然后8001和8002,最后80,可以在nacos页面的服务列表中看到两个注册的服务。

访问http://localhost/consumer/get,看到是8001和8002进行轮询负载的。是因为nacos默认支持负载均衡,原因是它默认引入了ribbon。
注册中心对比:主要是nacos,它支持AP和CP,是可以进行切换的。
1)创建配置的客户端子模块cloud-alibaba-config-client3344,导入依赖
2)yml配置
 
spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 config: server-addr: localhost:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml格式的配置
 
spring:
  profiles:
    active: dev #开发环境
3)创建启动类
 
package com.zys.cloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class NacosConfigClientMain3344 { public static void main(String[] args) { SpringApplication.run(NacosConfigClientMain3344.class,args); } }
4)创建controller接口
 
package com.zys.cloud.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController //动态刷新 @RefreshScope public class UserController { @Value("${config.info}") private String info; @GetMapping("/config/get") public String get() { return "The config info is :" + info; } }
5)创建统一的配置文件
在创建之前,先了解一些dataID的命名规则,它的完整格式为${prefix}-${spring.profile.active}.${file-extension}。
prefix :默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。 spring.profile.active :即为当前环境对应的 profile。 file-exetension: 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
假如spring.application.name=nacos-config-client,环境为dev,后缀名是yaml,那么dataID就是nacos-config-client-dev.yaml。
了解了之后,就在nacos的页面新建一个配置文件,然后发布。

6)测试
启动3344,访问http://localhost:3344/config/get,可以看到配置的信息。然后修改上一步的config.info内容,再刷新页面,发现配置信息也更新了。
1)dataId方案
在nacos页面再创建一个配置文件,作为测试环境配置

修改3344的application.yml的环境为test。

重启后访问http://localhost:3344/config/get,可以看到test环境的配置信息。
2)Group方案
在dataId方案中,并没有去指定Group,而是采用的默认的名称DEFAULT_GROUP,如果需要自定义分组名称,直接改就是了,不过需要在bootstrap.yml在指定组名。
新建一个配置文件,分组名为GROUP_TEST

修改3344的application.yml的环境为info,然后指定组名

重启后访问http://localhost:3344/config/get,可以看到info环境的配置信息。
3)namespace方案
用于区分不同的部署环境,实现隔离。命名空间是最大的,需要设置的话就创建命名空间,在配置文件中指定创建的命名空间的id即可。
在搭建集群之前,默认在linux已安装完成nocas。另外,nginx单机版也在linux搭建完成,mysql在linux已安装完成。
nacos默认自带的是嵌入式数据库derby,持久化就需要切换到mysql。
切换步骤如下:
1)执行sql脚本
sql的脚本是nacos-server-1.1.4\nacos\conf\nacos-mysql.sql,先创建一个名为nacos_config的数据库,然后执行这个脚本即可。
2)修改配置文件
打开nacos-server-1.1.4\nacos\conf\application.properties,在最后添加
 
#增加支持mysql数据源配置 spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=123456
3)启动测试
重启nacos,发现之前配置的信息没有了,原因是mysql中并没有进行配置。这时在nacos页面创建一个名为nacos-config-client-info.yaml的配置文件如下:

启动3344,访问http://localhost:3344/config/get,可以看到info环境的配置信息。
2.5.2nacos集群配置
1)执行sql脚本(同上)
2)修改application.properties文件
 
#增加支持mysql数据源配置 spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=zys123456
3)获取本机的ip
hostname -i
4)配置cluster.conf
 
cp cluster.conf.example cluster.conf
vim cluster.conf
把内容修改如下:
 
172.16.68.248:8849 172.16.68.248:8850 172.16.68.248:8851
需要注意的是,这里的ip必须是上一步获取的本机ip。
5)修改startup.sh启动文件
vim startup.sh
修改的文件前后对比


  
  
6)启动集群
 
./startup.sh -p 8849 ./startup.sh -p 8850 ./startup.sh -p 8851
.nacos无法启动,java_home问题
原文:https://www.cnblogs.com/zys2019/p/12682628.html