SpringCloud学习笔记--Nacos(一)

Nacos概述:

Nacos(DynamicNaming and Configuration Service)是一个应用于服务注册与发现、配置管理的平台。

Nacos 提供了一组简单易用的特性集,能够帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos安装和下载

1、Nacos下载地址和官方文档

https://github.com/alibaba/nacos/releases

https://nacos.io/zh-cn/docs/quick-start.html

2、下载对应的版本解压,最好不要解压到中文目录下,目录结构如下:

SpringCloud学习笔记--Nacos(一)_第1张图片

 3、Nacos的默认端口是8848,如果被占用可以在conf下的application.properties文件进行更改:

 

 4、Nacos启动方式(启动完访问http://localhost:8848/nacos/index.html账号密码都为Nacos):

第一种可以直接使用在bin目录下的startup.cmd文件进行启动。

第二种使用命令启动(standalone代表着单机模式运行,非集群模式):

startup.cmd -m standalone

Nacos依赖

启动服务发现:


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery
    ${latest.version}

启动配置管理:


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-config
    ${latest.version}

服务的注册与调用

SpringCloud学习笔记--Nacos(一)_第2张图片

 提供者服务创建和注册

第一步:引入服务发现和注册依赖

第二步:创建配置文件application.yml或者application.properties;实现服务注册:

#yaml文件
server:
   port: 8081
spring:
  application:
    name: userservice #user服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

第三步:创建启动类并启动:

@SpringBootApplication
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
    }
}

 成功注册到Nacos上

SpringCloud学习笔记--Nacos(一)_第3张图片

 消费者服务发现及调用

第一步:引入服务发现依赖

第二步:创建配置文件application.yml或者application.properties;实现服务注册:

#yaml文件
server:
   port: 8080
spring:
  application:
    name: orderservice #user服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

第三步:创建启动类

@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    /**
     * 创建RestTemplate 并注入Spring容器  这个可以重新建一个配置类,在配置类里进行配置
     *
     * @return
     */
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

第四步:编写Controller和Service

@RestController
@RequestMapping("order")
public class OrderController {

   @Autowired
   private OrderService orderService;

    @GetMapping("{orderId}")
    public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
        // 根据id查询订单并返回
        return orderService.queryOrderById(orderId);

    }
}
@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用RestTemplate发起http请求,查询用户
        // 2.1.url路径
        String url = "http://userservice/user/" + order.getUserId();
        // 2.2.发送http请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装user到Order
        order.setUser(user);
        // 4.返回
        return order;
    }
}

Nacos服务分级存储模型

1、一级是服务,例如useservice

2、二级是集群,例如HZ/SH

3、三级是实例,例如HZ机房的某台部署了userservice的服务器

服务集群属性

cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址
      discovery:
        cluster-name: HZ #集群名称

创建多个服务名相同,不同端口的服务,配置不同的集群;

SpringCloud学习笔记--Nacos(一)_第4张图片

 NacosRule负载均衡

userservice:
  ribbon:
    NFLoadBalanceRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule  #负载均衡规则

1、配置了NacoseRule负载均衡后,服务调用将优先选择相同集群的实例。

2、本集群找不到提供者了,才回去其他集群寻找,并且会报警告。

3、确定了可用实例列表后,再采用随机负载均衡挑选实例。

Nacos的权重实例

SpringCloud学习笔记--Nacos(一)_第5张图片

 1、Nacos控制台可以设置实例的权重值,0-1之间。

2、同集群内的多个实例,权重越高被访问的频率越高。

3、权重设置为0则完全不会被访问。

当要进行版本升级时,可以通过权重平滑的进行升级,先将权重比例调小,放进少部分用户进行测试升级,如果没什么问题,就可以逐渐扩大比例进行升级。

Nacos环境隔离

在配置文件中进行配置所在的环境:

spring:
  application:
    name: userservice #user服务名称
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址
      discovery:
        cluster-name: SH #集群名称
        namespace: b59aed87-eb2d-4a7f-8962-5462382160c9 #命名空间id

通过namespace进行设置服务所在的环境,namespace的值为Nacos控制台中创建的命名空间Id

SpringCloud学习笔记--Nacos(一)_第6张图片

 这时候,如果服务提供者和服务消费者不在同一个环境下面,那么消费者将无法调用提供者下面的方法;抛出异常:

java.lang.IllegalStateException: No instances available for userservice

第一次写博客,写的不好尽管提意见哈哈,这是我自己学习中记录的笔记,写的比较简单,后面在学习过程中会在慢慢完善,希望对大家有帮助。。

你可能感兴趣的:(spring,cloud,java,spring)