ABAP Netweaver, Hybris Commerce和SAP 云平臺的登錄認證
827
2025-03-31
@toc
1、Nacos簡介
1.1 Nacos是什么?
一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。
Nacos就是服務注冊中心+配置中心的組合,等價于
N
a
c
o
s
=
E
u
r
e
k
a
+
C
o
n
f
i
g
+
B
u
s
Nacos = Eureka+Config +Bus
Nacos=Eureka+Config+Bus
1.2 Nacos能做什么?
替代Eureka做服務注冊中心
替代Config做服務配置中心
項目地址:https://github.com/alibaba/Nacos
官網文檔:https://nacos.io/zh-cn/index.html
1.3 各種注冊中心比較
據說 Nacos 在阿里巴巴內部有超過 10 萬的實例運行,已經過了類似雙十一等各種大型流量的考驗
2、安裝并運行Nacos
前提條件:本地Java8+Maven環境已經配置成功。
先從官網下載Nacos:https://github.com/alibaba/nacos/releases
解壓安裝包,直接運行bin目錄下的startup.cmd
命令運行成功后直接訪問http://localhost:8848/nacos,默認賬號密碼都是nacos
3、Nacos作為服務注冊中心演示
官網文檔:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery
3.1 基于Nacos的服務提供者
3.1.1 新建cloudalibaba-provider-payment9001
3.1.2 pom
父pom
本模塊的pom:
3.1.3 yml
server: port: 9001 spring: Application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: localhost:8848 #配置Nacos地址 management: endpoints: web: exposure: include: '*'
3.1.4 主啟動類
@EnableDiscoveryClient @SpringBootApplication public class PaymentMain9001 { public static void main(String[] args) { SpringApplication.run(PaymentMain9001.class, args); } }
3.1.5 業務類
@RestController public class PaymentController { @Value("${server.port}") private String serverPort; @GetMapping(value = "/payment/nacos/{id}") public String getPayment(@PathVariable("id") Integer id) { return "nacos registry, serverPort: "+ serverPort+"\t id"+id; } }
3.1.6 測試
啟動本模塊之后查看Nacos控制臺
訪問:http://localhost:9001/payment/nacos/1
測試是沒有問題的。
3.1.7 再搭建cloudalibabaprovider-payment9002模塊
除了端口號外,其他幾乎與cloudalibabaprovider-payment9001模塊一致,搭建過程不在贅述。
3.2 基于Nacos的服務消費者
3.2.1 新建Module
新建cloudalibaba-consumer-nacos-order83模塊。
3.2.2 pom
nacos默認是支持負載均衡的,因為我們查看它的依賴文件可以發現,它默認引入了Ribbon負載均衡組件。
3.2.3 yml
server: port: 83 spring: application: name: nacos-order-consumer cloud: nacos: discovery: server-addr: localhost:8848 #消費者將要去訪問的微服務名稱(注冊成功進nacos的微服務提供者) service-url: nacos-user-service: http://nacos-payment-provider
3.2.4 主啟動類
@EnableDiscoveryClient @SpringBootApplication public class OrderNacosMain83 { public static void main(String[] args) { SpringApplication.run(OrderNacosMain83.class,args); } }
3.2.5 業務類
OrderNacosController
@RestController public class PaymentController { @Value("${server.port}") private String serverPort; @GetMapping(value = "/payment/{id}") public String getPayment(@PathVariable("id") Integer id) { return "nacos registry, serverPort: "+ serverPort+"\t id"+id; } }
ApplicationContextBean配置類
@Configuration public class ApplicationContextBean { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
3.2.6 測試
啟動該服務之后查看Nacos控制臺
訪問:http://localhost:83/consumer/payment/nacos/13
第一次:
第二次:
多刷新幾次就可以發現,提供服務的端口號一直在9001和9002之間切換,因為我們默認負載均衡算法用的是輪詢算法。
3.3 服務注冊中心對比
3.3.1 Nacos生態圖
可以看到,阿里巴巴的野心還是很大的。
3.3.2 Nacos和CAP
3.3.3 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'
到此,Nacos作為服務注冊中心就介紹完了,作為配置中心請查看下一篇文章。
Spring Cloud web前端 微服務
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。