日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

思維導圖

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

文章已收錄Github精選,歡迎Star:https://github.com/yehongzhi/learningSummary

一、前言

伴隨著Eurka2.0版本已停止維護,開始要考慮使用微服務新一代的開源的注冊中心替代Eureka。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

目前據(jù)我了解,Consul和Nacos是比較流行的兩種替代方案。這篇文章就介紹一下這兩種注冊中心在微服務中的簡單使用,希望對讀者有所幫助。

二、注冊中心的作用

注冊中心在微服務的架構(gòu)中相當于一個“服務的通訊錄”。當一個服務啟動時,需要向注冊中心注冊服務,注冊中心保存了所有服務的服務名稱和服務地址的映射關(guān)系。當服務A想調(diào)用服務D時,則從注冊中心獲取服務D的服務地址,然后調(diào)用。

我畫張圖給大家描述會更清楚一點,大概如下:

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

可能會有人問,為什么不直接通過服務地址調(diào)用服務D呢,還要從注冊中心去獲取服務D的服務地址。因為一個服務背后是不止一臺機器的,比如服務D可能在實際生產(chǎn)中是由三臺機器支持的,對外只暴露一個服務名稱,這樣可以避免寫死服務的IP地址在代碼中(寫在配置文件里),在服務擴展時就非常方便了。

除了服務注冊之外,注冊中心還提供服務訂閱,當有新的服務注冊時,注冊中心會實時推送到各個服務。

還有服務健康監(jiān)測,可以在管理界面看到注冊中心中的服務的狀態(tài)。

三、Consul

由Go語言開發(fā),支持多數(shù)據(jù)中心分布式高可用的服務發(fā)布和服務注冊,采用ralt算法保證服務的一致性,且支持健康檢查。

3.1 安裝(win10版)

第一步,上官網(wǎng)下載安裝包。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

第二步,解壓zip包,并配置環(huán)境變量。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 


一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

第三步,唱跳rap籃球鍵ctrl+R,cmd,輸入命令consul:

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

這就安裝成功了,超簡單!輸入consul -version驗證一下,會顯示版本號:

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

第四步,啟動。輸入命令consul.exe agent -dev本地啟動:

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

第五步,在瀏覽器中輸入http://localhost:8500打開管理界面。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

3.2 服務注冊

接下來就需要創(chuàng)建兩個服務,分別是訂單(order)和用戶(user),注冊到consul。下面我就演示其中一個user服務。

首先創(chuàng)建一個SpringBoot工程,Maven配置如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>
<groupId>io.github.yehongzhi</groupId>
<artifactId>user</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency><!-- 健康監(jiān)測的包 -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency><!-- spring-cloud-consul服務治理的jar包 -->
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        <version>2.0.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

然后yml配置文件如下:

server:
  port: 8601
spring:
  Application:
    name: user
  cloud:
    consul:
      port: 8500
      host: 127.0.0.1
      discovery:
        service-name: user
        instance-id: ${spring.application.name}:${spring.cloud.consul.host}:${server.port}
        health-check-path: /actuator/health
        health-check-interval: 10s
        prefer-ip-address: true
        heartbeat:
          enabled: true

在啟動類加上開啟服務注冊的注解:

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

}

最后啟動項目即可,我這里啟動兩個user,端口號分別是8601,8602:

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

3.3 服務調(diào)用

再創(chuàng)建一個訂單項目(order),和user配置類似,注冊服務到consul中。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

下面演示一下用order服務調(diào)用user服務,首先定義user的接口:

@RestController
@RequestMapping("/mall/user")
public class UserController {
    @RequestMapping("/list")
    public Map<String, Object> list() throws Exception {
        Map<String, Object> userMap = new HashMap<>();
        userMap.put("1號佳麗", "李嘉欣");
        userMap.put("2號佳麗", "袁詠儀");
        userMap.put("3號佳麗", "張敏");
        userMap.put("4號佳麗", "張曼玉");
        return userMap;
    }
}

接著在order服務調(diào)用user服務,使用RestTemplate的方式:

@RestController
@RequestMapping("/mall/order")
public class OrderController {

    @Resource
    private LoadBalancerClient loadBalancerClient;

    @RequestMapping("/callUser")
    public String list() throws Exception {
        //從注冊中心中獲取user服務實例,包括服務的IP,端口號等信息
        ServiceInstance instance = loadBalancerClient.choose("user");
        //調(diào)用user服務
        String userList = new RestTemplate().getForObject(instance.getUri().toString() + "/mall/user/list", String.class);
        return "調(diào)用" + instance.getServiceId() + "服務,端口號:" + instance.getPort() + ",返回結(jié)果:" + userList;
    }
}

啟動兩個user服務,一個order服務,調(diào)用order的接口,可以看到結(jié)果:

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 


一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

負載均衡默認是輪詢訪問,所以交替調(diào)用8601和8602的user服務。

consul的簡單入門就講到這里了,除了服務治理之外,consul還可以用于做配置中心,讀者有興趣可以自己探索一下。我這里用的是dev模式,相當于單機模式,僅用于學習,實際生產(chǎn)的話肯定是集群模式,后面如果有時間我再專門寫一篇演示一下consul集群的搭建。

下面講另一款注冊中心,阿里出品的Nacos。

四、Nacos

以下介紹來源于官網(wǎng):

Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現(xiàn)動態(tài)服務發(fā)現(xiàn)、服務配置、服務元數(shù)據(jù)及流量管理

Nacos 幫助您更敏捷和容易地構(gòu)建、交付和管理微服務平臺。 Nacos 是構(gòu)建以“服務”為中心的現(xiàn)代應用架構(gòu) (例如微服務范式、云原生范式) 的服務基礎設施。

總結(jié)就是,Nacos提供三種功能:服務發(fā)現(xiàn)及管理、動態(tài)配置服務、動態(tài)DNS服務。

我這里主要講服務發(fā)現(xiàn),也就是作為注冊中心的功能。

4.1 安裝

首先下載安裝包,目前穩(wěn)定版是1.3.1,推薦在linux或者mac系統(tǒng)上使用,我懶得開虛擬機,所以我就直接在win系統(tǒng)安裝。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

我這里僅用于學習,使用單機模式,官網(wǎng)上介紹,雙擊startup.cmd文件啟動即可。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

實際上,會報錯。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

這個錯誤,我發(fā)現(xiàn)github上有人提出來,再后面加個參數(shù)就可以了。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

但是又有人說后面的版本已經(jīng)優(yōu)化了,沒有這個錯誤。反正如果遇到的話,就加個參數(shù)啟動吧。完整命令是startup.cmd -m standalone。

如果不想在啟動命令后面加參數(shù),可以配置MySQL(版本要求:5.6.5+),初始化mysql數(shù)據(jù)庫,數(shù)據(jù)庫初始化文件:nacos-mysql.sql。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

修改conf/application.properties文件配置:

db.num=1
db.url.0=jdbc:mysql://數(shù)據(jù)庫地址:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=賬號
db.password=密碼

啟動成功,命令行窗口可以看到以下提示:

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

啟動成功后,可以在瀏覽器打開http://localhost:8848/nacos/,進入管理界面。賬號密碼默認都是nacos。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 


一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

4.2 服務注冊

接下來還是一樣,創(chuàng)建兩個服務注冊到nacos,為了跟前面的區(qū)分,項目名后綴加上"nacos"。首先添加maven配置,如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
    <dependencies>
  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR1</version>
            <type>pom</type>
            <scope>import</scope>
     </dependency>
     <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>0.2.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency><!-- SpringWeb依賴 -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency><!-- SpringCloud nacos服務發(fā)現(xiàn)的依賴 -->
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

啟動類加上注解@EnableDiscoveryClient。

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

配置文件application.properties文件加上配置。

server.port=8070
spring.application.name=usernacos
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

創(chuàng)建一個UserController接口,提供給其他微服務調(diào)用。

@RestController
@RequestMapping("/mall/userNacos")
public class UserController {
    @RequestMapping("/list")
    public Map<String, Object> list() {
        Map<String, Object> userMap = new HashMap<>();
        userMap.put("周杰倫", "愛在西元前");
        userMap.put("張學友", "只想一生跟你走");
        userMap.put("劉德華", "忘情水");
        userMap.put("陳奕迅", "K歌之王");
        userMap.put("衛(wèi)蘭", "就算世界沒有童話");
        return userMap;
    }
}

運行啟動類的main方法,可以看到注冊中心多了一個usernacos服務。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

4.3 服務調(diào)用

相同的配置和方法,再創(chuàng)建一個ordernacos服務,作為消費者。

@RestController
@RequestMapping("/mall/orderNacos")
public class OrderController {
    @Resource
    private LoadBalancerClient loadBalancerClient;

    @RequestMapping("/callUser")
    public String callUser() {
        ServiceInstance instance = loadBalancerClient.choose("usernacos");
        String url = instance.getUri().toString() + "/mall/userNacos/list";
        RestTemplate restTemplate = new RestTemplate();
        //調(diào)用usernacos服務
        String result = restTemplate.getForObject(url, String.class);
        return "調(diào)用" + instance.getServiceId() + "服務,端口號:" + instance.getPort() + ",返回結(jié)果:" + result;
    }
}

啟動2個usernacos服務,1個ordernacos服務。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

測試接口http://localhost:8170/mall/orderNacos/callUser,order能順利調(diào)用user,默認負載均衡策略也是輪詢機制。

一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 


一文看懂微服務架構(gòu)之注冊中心Consul、Nacos

 

五、總結(jié)

國內(nèi)用的比較多的是Nacos,我覺得原因有幾點:

  • 因為阿里目前用的就是Nacos,經(jīng)歷過雙十一,各種秒殺活動等高并發(fā)場景的驗證。
  • 文檔比較齊全,關(guān)鍵有中文文檔,對于國內(nèi)很多英文水平不是很好的開發(fā)者看起來真的很爽。
  • 很多從阿里出來的程序員,把阿里的技術(shù)帶到了各個中小型互聯(lián)網(wǎng)公司,一般技術(shù)選型肯定選自己熟悉的嘛。
  • 管理界面有中(英)文版本,易于操作。
  • 還有社區(qū)比較活躍,很多問題可以在網(wǎng)上找到解決方案。

這篇文章主要介紹了SpringCloud微服務關(guān)于注冊中心的兩種流行的實現(xiàn)方案,接下來還會繼續(xù)介紹其他關(guān)于微服務的組件,敬請期待。

上面所有例子的代碼都上傳Github了:

https://github.com/yehongzhi/mall

覺得有用就點個贊吧,你的點贊是我創(chuàng)作的最大動力~

拒絕做一條咸魚,我是一個努力讓大家記住的程序員。我們下期再見!!!

能力有限,如果有什么錯誤或者不當之處,請大家批評指正,一起學習交流!

分享到:
標簽:微服 架構(gòu)
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定