Nacos = (Dynamic) Naming and Configuration Service 註冊中心+配置中心,也就是代替Eureka做爲服務註冊中心,替代Config做爲配置中心,替代Bus做爲消息總線。java
官方網站: http://nacos.iogit
Nacos是一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。github
服務是Nacos中的頭等公民。Nacos支持幾乎全部類型的服務,入:Dubbo/gRPC,Spring Cloud RESTFUL服務或Kubernetes服務。web
Nacos使服務易於註冊本身並經過DNS或HTTP接口發現其餘服務。 Nacos還提供服務的實時運行情況檢查,以防止向不正常的主機或服務實例發送請求。spring
動態配置服務使您能夠在全部環境中以集中和動態的方式管理全部服務的配置。 Nacos消除了在更新配置時從新部署應用程序和服務的需求,這使配置更改更加有效和敏捷。windows
Nacos支持加權路由,使您能夠更輕鬆地在數據中心內的生產環境中實施中間層負載平衡,靈活的路由策略,流控制和簡單的DNS解析服務。它能夠幫助您輕鬆實現基於DNS的服務發現,並防止應用程序耦合到特定於供應商的服務發現API。app
Nacos提供了易於使用的服務儀表板,可幫助您管理服務元數據,配置,kubernetes DNS,服務運行情況和指標統計信息。負載均衡
推薦下載穩定版本:Nacos1.3.1ide
下載地址:https://github.com/alibaba/nacos/releases/tag/1.3.1微服務
下載以後,進入bin目錄,cmd startup.cmd -m standalone
啓動單機模式。
接着訪問:http://localhost:8848/nacos/,帳號密碼都是nacos
。
新建模塊:cloudalibaba-provider-payment9001
,引入依賴:
<!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
server: port: 9001 spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: localhost:8848 #配置Nacos地址 management: endpoints: web: exposure: include: '*'
@EnableDiscoveryClient @SpringBootApplication public class PaymentMain9001 { public static void main(String[] args) { SpringApplication.run(PaymentMain9001.class, args); } }
@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; } }
啓動nacos,啓動9001服務,訪問localhost:8848/nacos
。
服務已經成功註冊進nacos註冊中心。
仿照9001模塊再建一個9002模塊,具體步驟就省略了,端口號改一改就能夠。接着依次啓動nacos,9001,9002,觀察nacos服務註冊中心的狀況:
nacos-payment-provider
服務下包含了兩個實例。
新建cloudalibaba-consumer-nacos-order83
,依舊引入依賴:
<!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
nacos默認支持負載均衡:是由於該依賴已經集成ribbon,故自然支持。
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
@EnableDiscoveryClient @SpringBootApplication public class OrderNacosMain83 { public static void main(String[] args) { SpringApplication.run(OrderNacosMain83.class, args); } }
@RestController @Slf4j public class OrderNacosController { @Resource private RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") private String serverURL; @GetMapping(value = "/consumer/payment/nacos/{id}") public String paymentInfo(@PathVariable("id") Long id) { return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class); } }
@Configuration public class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
啓動nacos,80消費者,9001,9002服務提供模塊。
訪問:http://localhost:83/consumer/payment/nacos/1
,將會輪詢訪問服務接口。
本系列文章爲《尚硅谷SpringCloud教程》的學習筆記【版本稍微有些不一樣,後續遇到bug再作相關說明】,主要作一個長期的記錄,爲之後學習的同窗提供示例,代碼同步更新到Gitee:https://gitee.com/tqbx/spring-cloud-learning,而且以標籤的形式詳細區分每一個步驟,這個系列文章也會同步更新。