nacos服务注册

nacos基本知识和下载安装请参考上一篇博客:nacos安装运行和特性了解
这篇博客主题: 消费者和生产者都注册到nacos中,并且消费者服务可以实现负载均衡调用生产者。并且说明nacos的CAP原则符合那个。
微服务注册到nacos需要的基础环境:

  1. jdk8+
  2. 已运行nacos

大致代码结构:
在这里插入图片描述

生产者代码

maven
添加nacos依赖

<!--nacos-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

yml
1.配置nacos的服务地址
2.暴露服务端点

server:
  port: 9001
spring:
  application:
    name: nacos-provider-payment
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #告诉微服务,nacos的访问地址

management:
  endpoints:
    web:
      exposure:
        include: '*' #暴露端点

主启动
1.添加@EnableDiscoveryClient:能够让注册中心能够发现,扫描到改服务

/**
 * @author 小鱼
 * @version 1.0
 * @date 2021/8/4 11:20 上午
 *  @EnableDiscoveryClient:能够让注册中心能够发现,扫描到改服务
 */
@SpringBootApplication
@EnableDiscoveryClient
public class NacosPaymentMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(NacosPaymentMain9001.class);
    }
}

为消费者加测试类

/**
 * @author 小鱼
 * @version 1.0
 * @date 2021/7/26 8:53 下午
 */
@RestController
public class PaymentNacosController {

    @Value("${server.port}")
    private String port;

    @GetMapping("/getPort")
    public String getPort(){
        return "it  is PaymentNacos port "+port;
    }
}

验证
登录nacos,查看服务列表,如果有服务名出现证明服务以及注册到了nacos
在这里插入图片描述

微服务集群注册nacos

复制一个一毛一样的微服务,修改yml端口号就可以了
在这里插入图片描述
在这里插入图片描述

消费者代码

maven和生产者一致
yml

server:
  port: 83
spring:
  application:
    name: nacos-consumer-order
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos地址,将服务注册到nacos中
management:
  endpoints:
    web:
      exposure:
        include: '*'
service-url:
  nacos-user-service: http://nacos-provider-payment #生产者服务名,用于远程调用

主启动类

/**
 * @author 小鱼
 * @version 1.0
 * @date 2021/8/4 5:16 下午
 */
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerMain83 {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerMain83.class);
    }
}

远程调用配置类
nacos默认自动负载均衡,它自己集成了ribbon。

/**
 * @author 小鱼
 * @version 1.0
 * @date 2021/8/4 5:22 下午
 * @LoadBalanced:开启负载均衡,默认轮询算法
 */
@Configuration
public class MyRest {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

测试请求类

/**
 * @author 小鱼
 * @version 1.0
 * @date 2021/8/4 5:20 下午
 */
@RestController
@Slf4j
public class OrderController {

    @Value("${service-url.nacos-user-service}")
    private String url;

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/getPort")
    public String getPort(){
        return restTemplate.getForObject(url+"/getPort",String.class);
    }
}

验证
访问:http://localhost:83/getPort,如果两次以上的访问出现不同端口证明成功
在这里插入图片描述

nacos符合CAP原则中那两大类型

nacos是可以在AP,CP模式中切换的,默认是AP模式。
C是所有节,点在同一时间看到的数据是一致的; 而A的定义是所有的请求都会收到响应。

模式如何选择
一般来说,
如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如Spring cloud和Dubbo服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。

如果需要在服务级别编辑或者存储配置信息,那么CP是必须,K8S服务和DNS服务则适用于CP模式。
CP模式下则支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐