天天看點

一文快速上手 Alibaba微服務元件Nacos注冊中心

作者:鸨哥學Java

文章目錄

Alibaba微服務元件Nacos注冊中心

1.什麼是nacos

注冊中心+配置中心+服務管理 平台

注冊中心演變過程

管理所有微服務、解決微服務之問調用關系錯綜複雜、難L以維擴的問題;

一文快速上手 Alibaba微服務元件Nacos注冊中心
一文快速上手 Alibaba微服務元件Nacos注冊中心

注冊中心核心功能

Nacos discovery

服務注冊:Nacos Client會通過發送REST請求的方式向Nacos server注冊自己的服務,提供自身的中繼資料,比如ip位址、端口等資訊。Nacos Sevet接收到注冊請求後,就會把這些元款據資訊存儲在一個雙層的記憶體Map中。

服務心跳︰在服務注冊後,Nacos Client會維護一個定時心跳來持續通知Nacos Server,說明服務一直處于可用狀态,防止被剔除。預設5s發送一次心跳

服務同步:Nacos Server叢集之間會互相同步服務執行個體,用來保證服務資訊的一緻性。leader raft

服務發現:服務消費者(Nlacos Cient)在調用服務提供者的服務時,會發送一個REST請求給Nacos Sever,擷取上面注冊的服務清單,并且緩行在Nacos Client本地,同時會在Nacs cient本地開啟一個定時任務定時拉取服務端最新的系統資料庫資訊更新到本地緩存

服務健康檢查:Nacos Server會開啟一個定時任務用來檢查注冊服務執行個體的狸康情況,對于超過15s沒有收到客戶诟心跳的執行個體會将它的ealty屬性置為lase(用戶端服務發現時不會發現),如果某個執行個體超過30秒沒有收到心跳,直接剔除該執行個體(被剔除的執行個體如果恢複發送心跳則會重新注冊)

主流的注冊中心差別

CAP C 一緻性 A 可用性 P 分區容錯性

一文快速上手 Alibaba微服務元件Nacos注冊中心

Nacos Server部署

下載下傳位址https://github.com/alibaba/nacos/releases

修改bin\startup.sh改成單機啟動(預設叢集)

一文快速上手 Alibaba微服務元件Nacos注冊中心

輕按兩下startup.cmd

通路位址nacos首頁賬号密碼都為nacos

Nacos client搭建

複制子產品order 和 stock

取名為order-nacos和stock -nacos

父工程添加子子產品

<module>order-nacos</module>
<module>stock-nacos</module>           

order-nacos和stock -nacos

1.引入依賴

<!--    nacos服務注冊發現 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>           

2.配置檔案(order-nacos)

server:
  port: 8020
#應用名稱 nacos會将該名稱當作服務名稱
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public           

配置檔案(stock -nacos)

server:
  port: 8021

#應用名稱 nacos會将該名稱當作服務名稱
spring:
  application:
    name: stock-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public           

主啟動類 注解 @EnableDiscoveryClient 可加可不加

啟動 檢視nacos發現兩個服務清單

(order-nacos)更改controller

String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);           

通路 localhost:8020/order/add 報錯

(order-nacos)主啟動類加上注解 @LoadBalanced 預設輪詢

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


    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
 
        RestTemplate restTemplate=builder.build();
        return  restTemplate;
    }
}           

再次通路localhost:8020/order/add 成功回顯

get一個新技能

啟動一個完全一樣的項目,但端口号不一樣

一文快速上手 Alibaba微服務元件Nacos注冊中心
一文快速上手 Alibaba微服務元件Nacos注冊中心

點選apply->ok

stock-nacos控制層改變

@RestController
@RequestMapping("/stock")
public class StockController {
 

    @Value("${server.port}")
    String port;

    @RequestMapping("/reduct")
    public String reduct(){
 
        System.out.println("扣減庫存");
        return "扣減庫存"+port;
    }
}           

重新啟動 8020 8021 8022

再次通路localhost:8020/order/add

發現 回顯的端口号8021 8022重複跳轉(負載均衡的輪詢機制 ribbon)

一文快速上手 Alibaba微服務元件Nacos注冊中心

Nacos 管理界面詳細介紹

命名空間的概念

namespace: public           

pro環境 dev環境 分隔開來

分組的概念和命名空間差不多

雪崩保護-就是保護門檻值

0-1之間 百分比

ephemeral: false # 永久執行個體   預設是true 臨時執行個體
# 哪怕當機了也不會删除執行個體           

健康執行個體 — 不健康執行個體

健康執行個體數/總執行個體數 < 保護門檻值

1/2 < 0.6 那麼就用把挂了的機子先給它用,防止服務雪崩

權重和負載均衡器有關 越大讓别人通路它越多

注冊中心配置項詳解

spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        namespace: public
        
# namespace: public #相同特征的服務進行歸類分組管理

# ephemeral: false # 預設=true(臨時執行個體)  ―當服務當機超過心跳就會将執行個體剔除掉  #永久執行個體―哪怕當機了也不會删除執行個體當服務當機永遠不會剔除掉

#service: 預設取${spring.application.name},也可以通過該選項配置

#group:預設DEFAULT_GROUP更細的相同特征的服務進行歸類分組管理

#weight:通常要結合安裝權重的負載均衡政策,權重越高配置設定的流量就越大

#metadata : version=1可以結合中繼資料做擴充           

Nacos叢集部署

linux部署 jdk maven nginx作為負載均衡 mysql

下載下傳 nacos-server-1.4.1.tar.gz

mkdir nacos

# 或者利用wget的方式下載下傳
tar -zxvf  nacos-server-1.4.1.tar.gz  # 解壓 
建立3份 ls
[root@localhost nacos]# ls
nacos8849 nacos8850 nacos8851

## 要先裝好mysql的環境

[root@localhost nacos]# cd nacos8849/conf/ # 進入配置檔案
vim application.properties # 修改一下           
server.port=8849
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
db.user.0=root
db.password.0=root           

window下拿nacos/conf/nacos-mysql.sql

導入運作

[root@localhost conf]# cp cluster.conf.example cluster.conf

加上下面三行儲存退出:
虛拟機ip:8849
虛拟機ip:8850
虛拟機ip:8851
:wq

[root@localhost nacos8849]# cd bin
[root@localhost bin]# vim startup.sh           

本來2g改成521m(如果記憶體很給力就不用了)

一文快速上手 Alibaba微服務元件Nacos注冊中心
[root@localhost bin]# ./startup.sh  #啟動
# 通路測試           
複制nacos8849/conf/application.properties檔案給其他兩個 
複制nacos8849/conf/cluster.conf檔案給其他兩個 
複制nacos8849/bin/startup.sh檔案給其他兩個 
#更改一下8850 8851中application.properties中的端口号

啟動8850 8851           

配置nginx

1.添加言方源倉庫
yum install -y yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

2.安裝openresty
yum install -y openresty

cd /usr/local/openresty/
cd nginx


[root@localhost nginx]# vim conf/nginx.conf           
upstream nacoscluster {
 
        server ${ip}:8849;
        server ${ip}:8850;
        server ${ip}:8851;
    }
    server{
 
        listen  8847;
        server_name localhost;

        location /nacos/ {
 
            proxy_pass http://nacoscluster/nacos;
        }
    }
:wq 

[root@localhost nginx]# cd sbin
[root@localhost nginx]#./nginx           
ip:8847/nacos/
           

更改application.yml配置(order-nacos stock-nacos)

server-addr: ip:8847           

啟動8020 8021 8022

繼續閱讀