Nacos安装
https://github.com/alibaba/nacos/releases
下载ZIP包 解压即可启动
Nacos常用命令
#nacos 启动 sh startup.sh -m standalone #关闭nacos sh shutdown.sh #关闭后,仍然能在可视化页面连接nacos,所以需要杀死8848端口的进程 #查询8848端口的进程,获取到进程id,例如是45025 lsof -i:8848 #杀死45025进程 kill -9 45025
Nacos - springBoot
配置管理
注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>0.2.7</version> </dependency>
1:在nacos配置管理界面新增配置
2:在application.yml里添加nacos配置
nacos: config: server-addr: 192.168.3.96:8848
3:在启动类上添加注解 获取dataId 为 ‘’xxx”的配置
@NacosPropertySource(dataId = "mysql_config", autoRefreshed = true)
4:通过注解获取属性值
@NacosValue(value = "${configFlag:false}", autoRefreshed = true) private boolean configFlag;
Nacos - Spring cloud
配置管理
1:将spring boot项目改为 spring cloud项目
2:引入nacos配置管理依赖
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>${latest.version}</version> </dependency>
3:在 bootstrap.yml
中配置 Nacos server 的地址和应用名
spring: cloud: nacos: config: server-addr: 192.168.3.96:8848 file-extension: yaml #指定nacos上的配置文件dataId的结尾 如果不配 默认是properties application: name: configTest # 指定nacos上配置文件的名称
4:通过 Spring Cloud 原生注解 @RefreshScope
实现配置自动更新:
@RestController @RequestMapping("/test") @RefreshScope //自动更新 public class TestController { @Value("${configFlag:false}") //获取nacos上的配置 private boolean configFlag; @Value("${myName:''}") private String myName; @RequestMapping("/get") public String get() { System.out.println(configFlag); System.out.println(myName); return myName+""+configFlag; } }
5:在nacos上发布配置 注意data id的后缀与配置保持一致
服务注册
1引入nacos服务发现依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.2.RELEASE</version> </dependency>
2:配置服务提供者,将其服务注册到 Nacos server 上。
在 application.properties
中配置 Nacos server 的地址:
server: port: 9000 spring: application: name: project-one cloud: nacos: discovery: server-addr: 192.168.3.96:8848
3:通过 Spring Cloud 原生注解 @EnableDiscoveryClient
开启服务注册发现功能:
4:启动服务,该服务就会被注册到nacos上,通过nacos的服务管理可看到该服务
服务发现
1:配置消费者新建一个项目 导入nacos依赖
2:在 application.properties
中配置 Nacos server 的地址:
erver: port: 9001 spring: application: name: project-two cloud: nacos: discovery: server-addr: 192.168.3.96:8848
3:通过 Spring Cloud 原生注解 @EnableDiscoveryClient
开启服务注册发现功能:加在启动类上面
4:在project-one中写一个方法,一会在project-two中去调用
@RestController public class Provider { @RequestMapping(value = "/provider/{string}") //PathVariable注解为占位符,取url中的值 public String echo(@PathVariable String string) { return "Hello Nacos Discovery " + string; } }
5:project-two中写调用project-one的方法
@SpringBootApplication @EnableDiscoveryClient public class App { public static void main( String[] args ) { SpringApplication.run(App.class); } //在启动类中注入restTemplate @LoadBalanced //给 RestTemplate 实例添加 @LoadBalanced 注解,开启 @LoadBalanced 与 Ribbon 的集成: @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }
@RestController public class Consumer { private final RestTemplate restTemplate; public Consumer(RestTemplate restTemplate) { this.restTemplate = restTemplate; } @RequestMapping(value = "/consumer/{string}") public String echo(@PathVariable String string) { System.out.println(string); return restTemplate.getForObject("http://project-one/provider/" + string, String.class); } }
Fegin
Fegin客户端
Fegin是一个声明式的Http客户端,它使得写Http客户端变得更简单,使用Fegin只需要创建一个接口并注解,它具有可插拔的注解特性,Nacos很好的兼容了Fegin,默认实现了负载均衡的效果,底层使用了HttpClient作为服务框架
OpenFegin
1:在Nacos项目下继续创建一个Springboot项目名为nacos-feign,创建时添加OpenFeign的依赖,
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.1.0.RELEASE</version> </dependency> <dependency> <groupId>com.netflix.archaius</groupId> <artifactId>archaius-core</artifactId> <version>0.7.6</version> </dependency>
2:在启动类上加入@EnableFeignClients
注解
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class App { public static void main( String[] args ){ SpringApplication.run(App.class);} }
注意:要调用的服务端也要引入该依赖和在启动类上加入@EnableFeignClients
3:创建RemoteClient接口,来定义OpenFeign要调用的远程服务接口。
同时通过@FeginClient
注解指定被调用方的服务名,通过fallback
属性指定RemoteHystrix
类,来进行远程调用的熔断和降级处理。
@FeignClient(name = "project-one",fallback = RemoteHystrix.class) public interface RemoteClient { @RequestMapping("/feginTest") //注意:传递参数时:一定要加RequestParam注解进行指定,不然不识别 String helloNacos(@RequestParam("string") String string); }
熔断类RemoteHystrix 实现RemoteClient 接口
public class RemoteHystrix implements RemoteClient{ @Override public String helloNacos(String string) { return "请求超时"; } }
4:被调用的服务 applicationn-name为:projec-one ,被调用的方法如下
@RestController public class Provider { @RequestMapping(value = "/feginTest") public String feginTest( String string) { return "Hello Nacos Discovery " + string; } }
5:nacos-fegin服务application.yml配置如下
server: port: 9002 spring: application: name: nacos-fegin cloud: nacos: discovery: server-addr: 192.168.3.239:8848
6:通过OpenFeign调用远程服务
@RestController @RequestMapping(value = "/consumer") public class Consumer { @Autowired private RemoteClient remoteClient; @RequestMapping(value = "/fegin/{string}") public String feginTest(@PathVariable String string) { System.out.println(string); return remoteClient.helloNacos(string); } }