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

Spring Cloud根據(jù)服務(wù)名獲取服務(wù)的ip端口問題

 更新時(shí)間:2022年09月09日 09:47:36   作者:怪 咖@  
這篇文章主要介紹了Spring Cloud根據(jù)服務(wù)名獲取服務(wù)的ip端口,本篇示例我就以Nacos注冊(cè)中心為例了,下面是我注冊(cè)的兩個(gè)服務(wù),需要的朋友可以參考下

本篇示例我就以Nacos注冊(cè)中心為例了,下面是我注冊(cè)的兩個(gè)服務(wù)。其中nacos-payment-provider服務(wù)是集群,有兩個(gè)實(shí)例。

方式一:通過loadBalancerClient來獲取

如果使用的Nacos為注冊(cè)中心的時(shí)候會(huì)發(fā)現(xiàn)一個(gè)問題,當(dāng)引入的依賴版本比較高的時(shí)候,RestTemplate+@LoadBalanced 通過服務(wù)名稱調(diào)用的時(shí)候會(huì)報(bào)錯(cuò),使用其他注冊(cè)中心默認(rèn)都會(huì)引用ribbon依賴,因此我們只需要在注入RestTemplate的時(shí)候加上@LoadBalanced就可以實(shí)現(xiàn)根據(jù)名稱負(fù)載均衡調(diào)用。

而nacos高版本依賴包沒有引用ribbon依賴。ribbon早就已經(jīng)徹底停更了,spring又自己出了一個(gè)loadbalancer負(fù)載均衡框架,來配合RestTemplate使用。但是他并沒有自動(dòng)引用loadbalancer依賴所以我們需要自己引用才可以使用。

@Configuration
public class ApplicationContextBean {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

使用如下獲取ip端口的前提:引用了loadbalancer來作為負(fù)載均衡

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

loadBalancerClient.choose()這個(gè)方法就是負(fù)載均衡的核心方法。假如服務(wù)名稱為nacos-payment-provider有兩個(gè)實(shí)例,一個(gè)9001一個(gè)9002,通過如下方法調(diào)用會(huì)發(fā)現(xiàn)每次都是在輪詢。

@Autowired
private LoadBalancerClient loadBalancerClient;

@GetMapping("/getServiceInstance")
public ServiceInstance getServiceInstance() {
    ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-payment-provider");
    System.out.println(serviceInstance.getHost()); // ip
    System.out.println(serviceInstance.getPort()); // 端口
    System.out.println(serviceInstance.getInstanceId()); // 實(shí)例id
    System.out.println(serviceInstance.getServiceId()); // 服務(wù)id
    System.out.println(serviceInstance.getMetadata()); // 與服務(wù)實(shí)例關(guān)聯(lián)的元數(shù)據(jù)
    System.out.println(serviceInstance.getScheme());    // 返回服務(wù)實(shí)例的方案
    System.out.println(serviceInstance.getUri().toString()); // 返回服務(wù)的uri地址
    return serviceInstance;
}

loadbalancer源碼:

方式二:通過discoveryClient來獲取

這種方式其他注冊(cè)中心也可以使用!

@Resource
private DiscoveryClient discoveryClient;

@GetMapping("/getServiceInstanceList")
public List<ServiceInstance> getServiceInstanceList() {
	// 根據(jù)服務(wù)名稱查找所有的實(shí)例
    return discoveryClient.getInstances("nacos-payment-provider");
}

DiscoveryClient這個(gè)其實(shí)是個(gè)接口存放于cloud-commons包當(dāng)中。

既然是接口為什么他能獲取到呢?我們可以看他的實(shí)現(xiàn)類,是有如下實(shí)現(xiàn)類的,也就是在nacos的服務(wù)發(fā)現(xiàn)依賴當(dāng)中會(huì)存在他的實(shí)現(xiàn)類,并注入到容器當(dāng)中了。其他注冊(cè)中心也是同樣如此??梢哉f這個(gè)接口是共用的,其他的注冊(cè)中心都可以來實(shí)現(xiàn)。

方式三:通過NacosServiceManager來獲取

這個(gè)是nacos獨(dú)有的!

@Autowired
private NacosServiceManager nacosServiceManager;

@Autowired
private NacosDiscoveryProperties nacosDiscoveryProperties;
    
@GetMapping("/nacos")
public List<Instance> getGatewayAddress() {
    String res = null;
    try {
        NamingService namingService = nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());
        List<Instance> allInstances = namingService.getAllInstances("nacos-payment-provider");
        return allInstances;
    } catch (NacosException e) {
        e.printStackTrace();
        return null;
    }
}

到此這篇關(guān)于Spring Cloud根據(jù)服務(wù)名獲取服務(wù)的ip端口的文章就介紹到這了,更多相關(guān)Spring Cloud ip端口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合freemarker實(shí)現(xiàn)代碼生成器

    SpringBoot整合freemarker實(shí)現(xiàn)代碼生成器

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何整合freemarker實(shí)現(xiàn)一個(gè)簡(jiǎn)單的代碼生成器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-03-03
  • Java mysql特殊形式的查詢語句詳解

    Java mysql特殊形式的查詢語句詳解

    這篇文章主要介紹了Java mysql特殊形式的查詢,包括子查詢和聯(lián)合查詢、自身連接查詢問題,本文通過sql語句給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • 關(guān)于Java的Condition接口最佳理解方式

    關(guān)于Java的Condition接口最佳理解方式

    這篇文章主要介紹了關(guān)于Java的Condition接口最佳理解方式,Condition就是實(shí)現(xiàn)了管程里面的條件變量,Java?語言內(nèi)置的管程里只有一個(gè)條件變量,而Lock&Condition實(shí)現(xiàn)的管程支持多個(gè)條件變量,需要的朋友可以參考下
    2023-05-05
  • 在Ubuntu系統(tǒng)下安裝JDK和Tomcat的教程

    在Ubuntu系統(tǒng)下安裝JDK和Tomcat的教程

    這篇文章主要介紹了在Ubuntu系統(tǒng)下安裝JDK和Tomcat的教程,這樣便是在Linux系統(tǒng)下搭建完整的Java和JSP開發(fā)環(huán)境,需要的朋友可以參考下
    2015-08-08
  • Java實(shí)現(xiàn)對(duì)象復(fù)制的方法實(shí)例

    Java實(shí)現(xiàn)對(duì)象復(fù)制的方法實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)對(duì)象復(fù)制的方法實(shí)例,深復(fù)制:復(fù)制出來的對(duì)象中的變量(包括基本類型和字符串)和原來的對(duì)象的值都相同,引用對(duì)象也會(huì)指向復(fù)制出來的對(duì)象,需要的朋友可以參考下
    2023-08-08
  • Java web Hibernate如何與數(shù)據(jù)庫鏈接

    Java web Hibernate如何與數(shù)據(jù)庫鏈接

    這篇文章主要介紹了Java web Hibernate如何與數(shù)據(jù)庫鏈接,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • VsCode搭建Spring Boot項(xiàng)目并進(jìn)行創(chuàng)建、運(yùn)行、調(diào)試

    VsCode搭建Spring Boot項(xiàng)目并進(jìn)行創(chuàng)建、運(yùn)行、調(diào)試

    這篇文章主要介紹了VsCode搭建Spring Boot項(xiàng)目并進(jìn)行創(chuàng)建、運(yùn)行、調(diào)試 ,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • SpringIOC DI循環(huán)依賴實(shí)例詳解

    SpringIOC DI循環(huán)依賴實(shí)例詳解

    這篇文章主要介紹了SpringIOC——DI循環(huán)依賴,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Gson序列化指定忽略字段的三種寫法詳解

    Gson序列化指定忽略字段的三種寫法詳解

    在我們?nèi)粘J褂胘son序列化框架過程中,經(jīng)常會(huì)遇到在輸出json字符串時(shí),忽略某些字段,那么在Gson框架中,要想實(shí)現(xiàn)這種方式,可以怎么處理呢,本文就來介紹一下
    2021-10-10
  • 詳解Java類加載器與雙親委派機(jī)制

    詳解Java類加載器與雙親委派機(jī)制

    這篇文章主要為大家介紹一下Java中的類加載器與雙親委派機(jī)制,文中通過示例為大家進(jìn)行了詳細(xì)的介紹,對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-08-08

最新評(píng)論