欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nacos框架服務(wù)注冊實(shí)現(xiàn)流程

 更新時間:2022年08月01日 10:36:36   作者:kaico2018  
這篇文章主要介紹了SpringCloud服務(wù)注冊之nacos實(shí)現(xiàn)過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

rpc遠(yuǎn)程調(diào)用

可能存在的問題

  • 超時的問題。
  • 安全的問題。
  • 服務(wù)與服務(wù)之間URL地址管理。

在我們的微服務(wù)架構(gòu)通訊,服務(wù)之間依賴關(guān)系非常大,如果通過傳統(tǒng)的方式管理我們服務(wù)的 url 地址的情況下,-一旦地址發(fā)生變化的情況下,還需要人工修改rpc遠(yuǎn)程調(diào)用地址。

微服務(wù)服務(wù)治理

在RPC遠(yuǎn)程調(diào)用過程中,服務(wù)與服務(wù)之間依賴關(guān)系非常大,服務(wù)Url地址管理非常復(fù)雜,所以這時候需要對我們服務(wù)的url實(shí)現(xiàn)治理,通過服務(wù)治理可以實(shí)現(xiàn)服務(wù)注冊與發(fā)現(xiàn)、負(fù)載均衡、容錯等。

分布式注冊中心

在 rpc 遠(yuǎn)程調(diào)用中,地址中域名和端口號/調(diào)用的方法名稱,如果基于數(shù)據(jù)庫實(shí)現(xiàn)服務(wù) url 治理:

缺點(diǎn):維護(hù)成本高、沒有完全絕對實(shí)現(xiàn)動態(tài)智能。

每次調(diào)用該服務(wù)如果地址直接寫死的話,一旦接口發(fā)生變化的情況下,這時候需要重新發(fā)布版本才可以該接口調(diào)用地址,所以需要一個注冊中心統(tǒng)一管理我們的服務(wù)注冊與發(fā)現(xiàn)。

注冊中心概念: 我們的服務(wù)注冊到我們注冊中心,key為服務(wù)名稱、value為該服務(wù)調(diào)用地址,該類型為集合類型。Eureka、consul、zookeeper、nacos等。

注冊中心原理:

服務(wù)注冊:生產(chǎn)者項(xiàng)目啟動的時候,會將當(dāng)前服務(wù)自己的信息地址注冊到注冊中心。

服務(wù)發(fā)現(xiàn): 消費(fèi)者從我們的注冊中心上獲取生產(chǎn)者調(diào)用的地址(集合),在使用負(fù)載均衡的策略獲取集群中某個地址實(shí)現(xiàn)本地rpc遠(yuǎn)程調(diào)用。

rpc 服務(wù)注冊調(diào)用實(shí)現(xiàn)原理:

1、生產(chǎn)者啟動的時候key= 服務(wù)的名稱value ip 和端口號注冊到我們的微服務(wù)注冊中心上。

2、注冊存放服務(wù)地址列表類型:key唯一,列表是list集合。

3、我們的消費(fèi)者從我們注冊中心.上根據(jù)服務(wù)名稱查詢服務(wù)地址列表(集合)。

4、消費(fèi)者獲取到集群列表之后,采用負(fù)載均衡器選擇一個地址實(shí)現(xiàn)rpc遠(yuǎn)程調(diào)用。

Nacos

介紹

Nacos 可以實(shí)現(xiàn)分布式服務(wù)注冊與發(fā)現(xiàn)/分布式配置中心框架。

官網(wǎng)的介紹: https://nacos.io/zh-cn/docs/what-is-nacos.html

安裝

下載直接啟動就可以了,nacos 是springboot項(xiàng)目。默認(rèn)端口號是:8848,可以修改配置文件修改端口號、數(shù)據(jù)持久化方式等等。

注意:高一點(diǎn)版本的nacos默認(rèn)是集群啟動,如果你是學(xué)習(xí)使用單機(jī)版的,需要修改額外配置,改成單機(jī)版啟動。

windows版本修改方式:以notepad++方式打開 startup.cmd

然后修改大概在26行的set MODE="cluster"為set MODE=“standalone”

基本使用

maven依賴

<dependencies>
    <!--  springboot 整合web組件-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>0.2.2.RELEASE</version>
    </dependency>
</dependencies>

application.yml

spring:
  cloud:
    nacos:
      discovery:
        ###服務(wù)注冊地址
        server-addr: www.kaicostudy.com:8848
  application:
    name: kaico-member
server:
  port: 8081

Java代碼,項(xiàng)目為springboot項(xiàng)目,menber服務(wù)

@RestController
public class MenberService {
    @Value("${server.port}")
    private String serverPort;
    /**
     * 會員服務(wù)提供的接口
     *
     * @param userId
     * @return
     */
    @RequestMapping("/getUser")
    public String getUser(Integer userId) {
        return "kaico學(xué)習(xí)nacos:" + serverPort;
    }
}

啟動項(xiàng)目之后,可以在nacos頁面看到注冊的服務(wù)信息。

使用discoveryClient 從nacos上獲取接口地址

order服務(wù)代碼,后面用作restTemplate 實(shí)現(xiàn)遠(yuǎn)程接口調(diào)用。

@RestController
public class OrderService {
    @Autowired
    private DiscoveryClient discoveryClient;
    /**
     * 訂單調(diào)用會員服務(wù)
     *
     * @return
     */
    @GetMapping("/orderToMember")
    public String orderToMember() {
        // 從注冊中心上獲取該注冊服務(wù)列表
        List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("kaico-member");
        ServiceInstance serviceInstance = serviceInstanceList.get(0);
        URI rpcMemberUrl = serviceInstance.getUri();
        return "訂單調(diào)用會員獲取結(jié)果:" + rpcMemberUrl;
    }
}

使用restTemplate實(shí)現(xiàn)rpc遠(yuǎn)程調(diào)用

注意spring沒有將 restTemplate 注入到IOC容器中,需要自己手動注入。在啟動類中添加下面注入bean的方法。

@Bean("restTemplate")
public RestTemplate restTemplate(){
     return new RestTemplate();
 }

調(diào)用方法

@GetMapping("/orderToMember")
    public String orderToMember() {
        // 從注冊中心上獲取該注冊服務(wù)列表
        List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("kaico-member");
        ServiceInstance serviceInstance = serviceInstanceList.get(0);
        URI rpcMemberUrl = serviceInstance.getUri();
		// 使用本地rest形式實(shí)現(xiàn)rpc調(diào)用
        String result = restTemplate.getForObject(rpcMemberUrl + "/getUser", String.class);
        return "訂單調(diào)用會員獲取結(jié)果:" + result;
    }

本地負(fù)載均衡算法

1、從注冊中心獲取服務(wù)集群的列表

2、從列表中選擇一個(根據(jù)負(fù)載均衡算法來獲取)

        1. 隨機(jī)獲取
        2. 輪訓(xùn)、權(quán)重
        3. 一致性 hash 計(jì)算

實(shí)現(xiàn)輪訓(xùn)代碼案例:

@Component
public class RotationLoadBalancer  implements LoadBalancer {
    private AtomicInteger atomicInteger = new AtomicInteger(0);
    @Override
    public ServiceInstance getSingleAddres(List<ServiceInstance> serviceInstances) {
        int index = atomicInteger.incrementAndGet() % serviceInstances.size();
        ServiceInstance serviceInstance = serviceInstances.get(index);
        return serviceInstance;
    }
}
 @RequestMapping("/orderToMember")
    public String orderToMember() {
        // 從注冊中心上獲取該注冊服務(wù)列表
        List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("kaico-member");
        ServiceInstance serviceInstance = loadBalancer.getSingleAddres(serviceInstanceList);
        URI rpcMemberUrl = serviceInstance.getUri();
        // 使用本地rest形式實(shí)現(xiàn)rpc調(diào)用
        String result = restTemplate.getForObject(rpcMemberUrl + "/getUser", String.class);
        return "訂單調(diào)用會員獲取結(jié)果:" + result;
    }

到此這篇關(guān)于Nacos框架服務(wù)注冊實(shí)現(xiàn)流程的文章就介紹到這了,更多相關(guān)Nacos服務(wù)注冊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java數(shù)組轉(zhuǎn)換為集合的相關(guān)方法

    Java數(shù)組轉(zhuǎn)換為集合的相關(guān)方法

    在Java中我們經(jīng)常需要將數(shù)組從一種類型轉(zhuǎn)換為另一種類型,下面這篇文章主要給大家介紹了關(guān)于Java數(shù)組轉(zhuǎn)換為集合的相關(guān)方法,文中通過圖文及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Java中Set&List的迭代器實(shí)現(xiàn)步驟解析

    Java中Set&List的迭代器實(shí)現(xiàn)步驟解析

    這篇文章主要介紹了Java中Set&List的迭代器實(shí)現(xiàn)步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java和SQL實(shí)現(xiàn)取兩個字符間的值

    Java和SQL實(shí)現(xiàn)取兩個字符間的值

    這篇文章主要介紹了Java和SQL實(shí)現(xiàn)取兩個字符間的值操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java基礎(chǔ)學(xué)習(xí)之方法的重載知識總結(jié)

    Java基礎(chǔ)學(xué)習(xí)之方法的重載知識總結(jié)

    今天帶大家來回顧Java基礎(chǔ)知識,文中對Java方法的重載相關(guān)知識作了非常詳細(xì)的介紹,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 解決RedisTemplate調(diào)用increment報(bào)錯問題

    解決RedisTemplate調(diào)用increment報(bào)錯問題

    這篇文章主要介紹了解決RedisTemplate調(diào)用increment報(bào)錯問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • springboot集成shiro遭遇自定義filter異常的解決

    springboot集成shiro遭遇自定義filter異常的解決

    這篇文章主要介紹了springboot集成shiro遭遇自定義filter異常的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 淺談JAVA字符串匹配算法indexOf函數(shù)的實(shí)現(xiàn)方法

    淺談JAVA字符串匹配算法indexOf函數(shù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了淺談字符串匹配算法indexOf函數(shù)的實(shí)現(xiàn)方法,indexOf函數(shù)我們可以查找一個字符串(模式串)是否在另一個字符串(主串)出現(xiàn)過。對此感興趣的可以來了解一下
    2020-07-07
  • Java 注解學(xué)習(xí)筆記

    Java 注解學(xué)習(xí)筆記

    一直都在使用注解,但是一直都沒有用的很明白,后來被逼的發(fā)現(xiàn)不搞明白真的就沒有辦法愉快的寫代碼了,所以,這篇《Java中的注解學(xué)習(xí)筆記》就呼之欲出了
    2020-10-10
  • 最好的8個Java RESTful框架

    最好的8個Java RESTful框架

    最好的8個Java RESTful框架,需要的朋友可以參考下
    2016-05-05
  • 聊聊maven的pom.xml中的exclusions標(biāo)簽的作用

    聊聊maven的pom.xml中的exclusions標(biāo)簽的作用

    這篇文章主要介紹了maven的pom.xml中的exclusions標(biāo)簽的作用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論