Nacos配置(服務注冊與發現)
Nacos簡介
Nacos = (Dynamic) Naming and Configuration Service 注冊中心+配置中心,也就是代替Eureka作為服務注冊中心,替代Config作為配置中心,替代Bus作為消息總線。
官方網站: http://nacos.io
Nacos是一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平台。
Nacos主要提供的四種功能
服務發現和服務運行狀況檢查
Nacos使服務易於注冊自己並通過DNS或HTTP接口發現其他服務。 Nacos還提供服務的實時運行狀況檢查,以防止向不正常的主機或服務實例發送請求。
動態配置管理
動態配置服務使您可以在所有環境中以集中和動態的方式管理所有服務的配置。 Nacos消除了在更新配置時重新部署應用程序和服務的需求,這使配置更改更加有效和敏捷。
動態DNS服務
Nacos支持加權路由,使您可以更輕松地在數據中心內的生產環境中實施中間層負載平衡,靈活的路由策略,流控制和簡單的DNS解析服務。它可以幫助您輕松實現基於DNS的服務發現,並防止應用程序耦合到特定於供應商的服務發現API。
服務和元數據管理
Nacos提供了易於使用的服務儀表板,可幫助您管理服務元數據,配置,kubernetes DNS,服務運行狀況和指標統計信息。
Windows中Nacos下載及安裝
下載地址: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>
編寫yml配置
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);
}
}
Controller接口
@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,故天然支持。
編寫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
主啟動類
@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83 {
public static void main(String[] args) {
SpringApplication.run(OrderNacosMain83.class, args);
}
}
Controller接口
@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
,將會輪詢訪問服務接口。