博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloudAlibaba--Nacos作为服务注册中心、各种注册中心对比、Nacos的AP和CP模式切换
阅读量:2444 次
发布时间:2019-05-10

本文共 5177 字,大约阅读时间需要 17 分钟。

基于Nacos的服务提供者

创建cloudalibaba-provider-payment9001模拟支付模块:

依赖:

cloud2020
pers.zhang.springcloud
1.0-SNAPSHOT
4.0.0
cloudalibaba-provider-payment9001
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test

配置:application.yml

server:  port: 9001spring:  application:    name: nacos-payment-provider  cloud:    nacos:      discovery:        server-addr: localhost:8848 #配置Nacos地址management:  endpoints:    web:      exposure:        include: '*'

Controller:

@RestControllerpublic class PaymentController {
@Value("${server.port}") String serverPort; @GetMapping("/payment/nacos/{id}") public String getPayment(@PathVariable("id") Long id){
return "nacos registry, serverPort:" + serverPort + "\t id" + id; }}

启动类:

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

测试:启动Nacos,启动9001微服务:

在这里插入图片描述
在这里插入图片描述

基于Nacos的服务消费者

首先,根据上文的9001微服务再创建一个9002微服务。

新建cloudalibaba-consumer-nacos-order83模拟订单模块

依赖:

cloud2020
pers.zhang.springcloud
1.0-SNAPSHOT
4.0.0
cloudalibaba-consumer-nacos-order83
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
pers.zhang.springcloud
cloud-api-commons
${project.version}
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test

配置:application.yml

server:  port: 83spring:  application:    name: nacos-order-consumer  cloud:    nacos:      discovery:        server-addr: localhost:8848#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)service-url:  nacos-user-service: http://nacos-payment-provider
@Configurationpublic class ApplicationContextConfig {
@Bean @LoadBalanced public RestTemplate getRestTemplate() {
return new RestTemplate(); }}

Controller:

@RestController@Slf4jpublic class OrderNacosController {
@Resource RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") String serverURL; @GetMapping("/consumer/payment/nacos/{id}") public String paymentInfo(@PathVariable("id") Long id) {
String result = restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class); return result; }}

启动类:

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

测试

启动Nacos,启动9001和9002,以及83端口微服务:

查看8848控制台,注册成功。

在这里插入图片描述
访问:localhost:83/consumer/payment/nacos/222,轮询负载OK。
在这里插入图片描述
在这里插入图片描述
Nacos集成了Ribbon,自带负载均衡。

各种注册中心对比

Nacos全景图:

在这里插入图片描述

Nacos与CAP:

在这里插入图片描述

在这里插入图片描述

Nacos的AP和CP模式切换

  • C是所有节点在同一时间看到的数据是一致的;
  • A的定义是所有请求都会收到响应。

何时选用哪种模式?

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

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

curl -X PUT `$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

转载地址:http://vppqb.baihongyu.com/

你可能感兴趣的文章
掌握React.Memo
查看>>
golang 延迟_了解Go中的延迟
查看>>
react 组件样式_如何设置React组件的样式
查看>>
node.js 模块_如何创建Node.js模块
查看>>
centos上安装git_如何在CentOS 8上安装Git
查看>>
在JavaScript中优化switch语句
查看>>
express 模板引擎_了解Express模板引擎
查看>>
如何在CentOS 8上安装Node.js
查看>>
如何在Ubuntu 20.04上安装Git
查看>>
javascript深度图_在JavaScript中深度克隆对象(及其工作方式)
查看>>
centos ssh密钥_如何在CentOS 8上设置SSH密钥
查看>>
debian 10 安装_如何在Debian 10上安装Webmin
查看>>
使用CentOS 8进行初始服务器设置
查看>>
ecmascript v3_节点v12中的新ECMAScript模块简介
查看>>
盖茨比乔布斯_通过盖茨比使用Airtable
查看>>
mern技术栈好处?_如何开始使用MERN堆栈
查看>>
路由器接路由器_路由器之战:到达路由器vsReact路由器
查看>>
rxjs 搜索_如何使用RxJS构建搜索栏
查看>>
如何在Debian 10上安装MariaDB
查看>>
react-notifications-component,一个强大的React Notifications库
查看>>