微服務註冊中心Nacos入門

2021-03-05 Se7en的架構筆記
服務治理

服務治理的核心由三部分組成:服務提供者、服務消費者、註冊中心。在分布式系統架構中,每個微服務在啟動時,將自己的信息存儲在註冊中心,叫做服務註冊。服務消費者從註冊中心獲取服務提供者的網絡信息,通過該信息調用服務,叫做服務發現。

服務提供者&服務消費者

服務的提供者&服務的消費者是相對的概念:

比如用戶服務調用訂單服務,那麼用戶服務是訂單服務的消費者,訂單服務是用戶服務的提供者。但是對於訂單服務調用庫存服務,那麼訂單服務就成為庫存服務消費者,庫存服務就是訂單服務的提供者。Nacos集群部署

本例搭建是偽集群,在一臺虛擬機上起3個nacos服務,使用nginx做負載均衡。

下載地址:https://github.com/alibaba/Nacos/releases

tar -xzvf nacos-server-1.1.4.tar.gz

編輯conf/application.properties文件:

#mysql資料庫連接信息,需要自己創建資料庫,sql腳本在conf/nacos-mysql.sql
server.port=8849  #3個nacos服務埠號分別為8849,8850,8851
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.1.14:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

將conf/cluster.conf.example改為conf/cluster.conf,編輯文件:

192.168.1.5:8849
192.168.1.5:8850
192.168.1.5:8851

依次使用sh /bin/startup.sh命令啟動。

nginx配置:

events{}
http {
upstream nacos {
server 192.168.1.5:8849;
server 192.168.1.5:8850;
server 192.168.1.5:8851;
}
server {
listen 8848; #客戶端訪問地址
location / {
proxy_pass http://nacos;
}
}
}

輸入http://192.168.1.5:8848 登錄nacos,用戶名nacos,密碼nacos。

服務接入配置中心

引入依賴:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>

加入註解:(以前低版本需要寫,現在其實不需要)

package com.tuling;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient  //高版本可以不寫
public class Tulingvip01MsAlibabaNacosClientOrderApplication {

 public static void main(String[] args) {
  SpringApplication.run(Tulingvip01MsAlibabaNacosClientOrderApplication.class, args);
 }
}

寫配置文件:

spring:
  datasource:
    druid:
      username: root
      password: 123456
      jdbcUrl: jdbc:mysql://192.168.1.14:3306/tuling-ms-alibaba?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false
      driverClassName: com.mysql.jdbc.Driver
      initialSize: 5
      minIdle: 5
      maxActive: 20
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      filters: stat,wall #\u914D\u7F6E\u8FC7\u6EE4\u5668
      maxPoolPreparedStatementPerConnectionSize: 20
      useGlobalDataSourceStat: true
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.5:8848
        #環境隔離
        namespace: 13499a23-e36e-41e7-8f8b-bd071bb8708e
        #分組隔離
        group: pay
        #cluster不相同可以調到,但是優先調本集群
        cluster-name: BJ

  application:
    name: order-center
server:
  port: 8080

啟動order-center和product-center服務,驗證兩個服務註冊到nacos上:

服務Controller代碼

order-center通過discoveryClient.getInstances獲取product-center服務信息,然後調用product-center去查詢資料庫信息,最後返回信息給客戶端。

package com.tuling.controller;

import com.tuling.entity.OrderInfo;
import com.tuling.entity.ProductInfo;
import com.tuling.mapper.OrderInfoMapper;
import com.tuling.vo.OrderVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

@RestController
public class OrderInfoController {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private OrderInfoMapper orderInfoMapper;

    @Autowired
    private DiscoveryClient discoveryClient;


    @RequestMapping("/selectOrderInfoById/{orderNo}")
    public Object selectOrderInfoById(@PathVariable("orderNo") String orderNo) {

        OrderInfo orderInfo = orderInfoMapper.selectOrderInfoById(orderNo);
        if(null == orderInfo) {
            return "根據orderNo:"+orderNo+"查詢沒有該訂單";
        }

        /**
         * 從nacos server獲取 product-info的地址
         */
        List<ServiceInstance> serviceInstanceList =  discoveryClient.getInstances("product-center");

        if(null == serviceInstanceList || serviceInstanceList.isEmpty()) {
            return "用戶微服務沒有對應的實例可用";
        }
        /**
         * 獲取第0個元素
         */
        String targetUri = serviceInstanceList.get(0).getUri().toString();

        ResponseEntity<ProductInfo> responseEntity= restTemplate.getForEntity(targetUri+"/selectProductInfoById/"+orderInfo.getProductNo(), ProductInfo.class);

        ProductInfo productInfo = responseEntity.getBody();

        if(productInfo == null) {
            return "沒有對應的商品";
        }

        OrderVo orderVo = new OrderVo();
        orderVo.setOrderNo(orderInfo.getOrderNo());
        orderVo.setUserName(orderInfo.getUserName());
        orderVo.setProductName(productInfo.getProductName());
        orderVo.setProductNum(orderInfo.getProductCount());

        return orderVo;
    }

    @GetMapping("/getServiceList")
    public List<ServiceInstance> getServiceList() {
        List<ServiceInstance> serviceInstanceList =  discoveryClient.getInstances("order-center");
        return serviceInstanceList;
    }
}

調用order-center接口查詢訂單信息:

相關焦點

  • SpringCloud Alibaba-nacos註冊中心
    https://nacos.ioNacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以「服務」為中心的現代應用架構 (例如微服務範式、雲原生範式) 的服務基礎設施。
  • 詳解nacos註冊中心服務註冊流程
    說起註冊中心,我們首先要知道註冊中心是用來做什麼的,註冊中心一般都是用在微服務架構中
  • 微服務的靈魂擺渡者Nacos究竟有多強?
    Nacos是阿里巴巴開源的服務註冊中心以及配置中心,致力於給開發者提供一款便捷、簡單上手的開源框架。Nacos究竟有什麼驚人的地方呢?看下圖:圖片從上圖不難看出阿里巴巴的野心,一個Nacos幹掉了Spring Cloud的三大組件,分別是註冊中心Eureka、服務配置Config,服務總線Bus。本文目錄結構如下圖:
  • 最強 Spring Cloud 註冊中心 Nacos,和艿艿來擼一波~
    「服務註冊/發現: Nacos Discovery服務發現是微服務架構體系中最關鍵的組件之一。如果嘗試著用手動的方式來給每一個客戶端來配置所有服務提供者的服務列表是一件非常困難的事,而且也不利於服務的動態擴縮容。Nacos Discovery 可以幫助您將服務自動註冊到 Nacos 服務端並且能夠動態感知和刷新某個服務實例的服務列表。
  • 今天來學學Nacos
    一、Nacos介紹Nacos是阿里zhuc中間件團隊開源的一款服務發現、配置和管理微服務的中間件
  • 微服務學習之路(1)——配置中心Nacos鏡像製作、集群搭建
    Nacos是阿里巴巴開源的為微服務提供發現、配置和管理的一個軟體平臺,其定位是構建以「服務」為中心的現代應用架構(例如微服務範式、雲原生範式)的服務基礎設施
  • 微服務:註冊中心ZooKeeper、Eureka、Consul 、Nacos對比
    前言服務註冊中心本質上是為了解耦服務提供者和服務消費者。對於任何一個微服務,原則上都應存在或者支持多個提供者,這是由微服務的分布式屬性決定的。
  • 微服務架構:註冊中心 ZooKeeper、Eureka、Consul 、Nacos 對比!
    Spring Cloud Eureka  -> AP前言服務註冊中心本質上是為了解耦服務提供者和服務消費者。對於任何一個微服務,原則上都應存在或者支持多個提供者,這是由微服務的分布式屬性決定的。更進一步,為了支持彈性擴縮容特性,一個微服務的提供者的數量和分布往往是動態變化的,也是無法預先確定的。
  • 微服務架構中配置中心的選擇,Apollo值得擁有
    因其具備微服務架構體系中所需的各個服務組件,比如服務註冊發現(如Spring Cloud Eureka、Zookeeper、Consul)、API網關路由服務(Spring Cloud Zuul),客戶端負載均衡(Spring Cloud Ribbon,Zuul默認集成了Ribbon)、服務容錯保護(Spring Cloud Hystrix),消息總線 (Spring Cloud Bus
  • 服務發現、配置中心,Nacos幫我們都搞定了
    (一)前言如今微服務架構已經被炒的如火如荼,網際網路公司況且不說,連我接觸的一個國企現在都開始往微服務分布式架構發展。因此,我會通過最近幾篇博客介紹目前比較流行的一些微服務組件,其實微服務並沒有那麼難。如果在跑項目過程中,想要知道整個項目的所有依賴pom文件或者任何疑問,直接聯繫我即可。
  • Spring Cloud Gateway微服務網關
    網關入門案例——靜態路由我們來實現一個用戶訪問spring cloud Gateway應用就直接跳轉到百度主頁的需求。以下兩種路由的實現,目前都無需註冊到Nacos,即無需Nacos依賴。複製工程consumer-nacos,並重命名為gateway-config-9000。
  • Spring Cloud Alibaba之一:Nacos
    對於微服務而言,由於完整的應用被拆分為了幾十上百個微小的服務,於是對整個應用的全局配置管理、統一接口、容錯處理、鏈路跟蹤等要求提出了新的挑戰。好在,Spring Cloud Alibaba為我們提供了一套完整的微服務管理組件,方便我們快速搭建微服務架構的應用。這篇文章我們先介紹它的第一個組件,負責服務註冊與發現功能的Nacos。讓我們先給出一個簡單的定義,說一下什麼是Nacos。
  • Alibaba 之 Nacos
    這是 Nacos 的架構圖,可以看到它確實是融合了服務註冊發現中心、配置中心、服務管理等功能,和我之前猜想的它是 Eureka/Consule + Config + Admin 的合體差不多。數據源經過了上邊的一些簡單操作,我們已經可以正常使用 Nacos 配置中心了。但是不知道你有沒有想過:配置數據是存在哪裡呢?
  • 【Spring Cloud Alibaba】Nacos 服務註冊與發現
    1、服務註冊首先創建一個名為:spring-cloud-alibaba-nacos-discovery 的引用,相關依賴為以下內容,核心依賴 spring-cloud-starter-alibaba-nacos-discovery<dependencies>
  • SpringCloud Alibaba微服務實戰二十一 - 整合Dubbo
    雖說在微服務架構中,會講按照業務劃分的微服務獨立部署,並且運行在各自的進程中。微服務之間的通信更加傾向於使用HTTP這種簡答的通信機制,大多數情況都會使用REST API。</artifactId></dependency>「注意:這裡不能直接使用dubbo的原生jar,並且需要引入nacos註冊中心,需要將dubbo註冊到springcloud的註冊中心上」修改dubbo-provider 項目的配置文件application.properties
  • 小白也能懂的 Nacos 服務模型介紹
    來源:Kirito的技術分享作者:Kirito的技術分享前言按照目前市場上的主流使用場景,Nacos 被分成了兩塊功能:服務註冊發現(Naming)和配置中心(Config)。服務模型介紹一般我在聊註冊中心時,都會以 Zookeeper 為引子,這也是很多人最熟悉的註冊中心。但如果你真的寫過或看過使用 Zookeeper 作為註冊中心的適配代碼,會發現並不是那麼容易,再加上註冊中心涉及到的一致性原理,這就導致很多人對註冊中心的第一印象是:這個東西好難!
  • Nacos 集群部署模式最佳實踐
    mse-abc123qwe-nacos.mse.aliyuncs.com:8848dubbo.registry.protocol=nacos模式分析高可用性。熟悉 RPC 的朋友看到這裡應該能夠很好地對 VIP 模式和地址伺服器模式做一個類比。n
  • Nepxion Polaris【北極星】雲原生微服務框架
    、Ribbon負載均衡、Feign和RestTemplate調用等組件全方位增強的企業級雲原生微服務開源解決方案,面向企業級生產需求精雕細琢,賦能和助力企業快速搭建基礎架構的底層雲原生微服務框架。整個架構體系打造,遵循最嚴格的Maven對稱結構和規範,最嚴格的命名格式,給予使用者最舒適的使用體驗支持如下中間件的集成和封裝支持阿里巴巴Nacos、Eureka、Consul和Zookeeper四個服務註冊發現中心支持阿里巴巴Nacos、攜程Apollo兩個遠程配置中心支持阿里巴巴Sentinel和Hystrix兩個熔斷限流降級權限中間件支持
  • Nacos發布0.5.0版本,輕鬆玩轉動態 DNS 服務
    Kubernetes內部和應用自身的服務及域名提供了基礎,從而幫助用戶簡化基於kubernetes體系的微服務平臺的構建與管理。的作者 @許進 與近期貢獻了如何基於Spring Cloud Gateway與Nacos實現動態路由能力的示例,毫無疑問,Spring Cloud Gateway作為所有請求流量的入口,在實際生產環境中為了保證高可靠和高可用,儘量避免重啟,需要實現Spring Cloud Gateway 動態路由配置,等到這塊足夠成熟,會將其包含在Nacos的官方推薦實現中。
  • ZooKeeper、Eureka、Consul 、Nacos,微服務註冊中心怎麼選?
    前言服務註冊中心本質上是為了解耦服務提供者和服務消費者。對於任何一個微服務,原則上都應存在或者支持多個提供者,這是由微服務的分布式屬性決定的。更進一步,為了支持彈性擴縮容特性,一個微服務的提供者的數量和分布往往是動態變化的,也是無法預先確定的。