Nacos

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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值