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内容,再刷新页面,发现配置信息也更新了。
2.4.2分类配置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