nacos服务注册与发现
nacos服务注册nacos基本知识和下载安装请参考上一篇博客:nacos安装运行和特性了解微服务注册到nacos需要的基础环境:jdk8+已运行nacos一个正常可以运行的springboot项目代码maven添加nacos依赖<!--nacos--><dependency><groupId>com.alibaba.cloud</groupId>&
nacos服务注册
nacos基本知识和下载安装请参考上一篇博客:nacos安装运行和特性了解
这篇博客主题: 消费者和生产者都注册到nacos中,并且消费者服务可以实现负载均衡调用生产者。并且说明nacos的CAP原则符合那个。
微服务注册到nacos需要的基础环境:
- jdk8+
- 已运行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协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。
更多推荐
所有评论(0)