springcloud學習-eureka服務消費者(Ribbon)

springcloud學習-eureka服務消費者(Ribbon)

接上篇博文,可以啓動2個服務提供者,分別是端口號8010和8011,接下來開始創建服務消費者。

1 右鍵工程,進入“New Module”視圖,如下:


2 選擇jdk版本,一般情況默認自己的jdk即可。

3 點擊“Next”,輸入對應的工程名稱(eurekaribbon),選擇對應的工程構建方式,這裏選擇“Gradle Project”,如果gradle不是太熟悉,可以自行百度或者參考後續的博文。


4 點擊“Next”,除了選擇對應Cloud Discovery,並勾選Eureka Server 外,選擇左側的Cloud Routing,並勾選Ribbon


5 點擊“Next”,然後Finish即可,這時idea已經幫助你完成一些基本的操作。展開對應的eurekaribbon module,找到resources目錄,添加application.yml,工程文件目錄:

application.yml配置如下:

server:
  port: 8180
  sessionTimeout: 15
  tomcat:
    max-threads: 800
    uri-encoding: UTF-8

spring:
  application:
    name: serviceRibbon

eureka:
  client:
    serviceUrl:
      defaultZone: http://root:melo@localhost:8001/eureka/

EUREKASERVERPROVIDER:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

此處的配置說明:

    spring.application.name爲serviceRibbon;

    對應的服務提供者的serviceId即EUREKASERVERPROVIDER,對應的ribbon的選擇策略NFLoadBalancerRuleClassName爲:

    負載均衡策略主要如下: 

AvailabilityFilteringRule:過濾掉因爲一直連接失敗的被標記爲“電路跳閘”的後端server,且過濾掉高併發的的後端server(可連接數超過配置的閾值)

RandomRule:隨機選擇一個後端server

BestAvailabl:選擇一個最小的併發請求的後端server,逐個考察server,如果server被標記爲“電路跳閘了,則忽略 

RoundRobinRule:roundRobin方式輪詢選擇, 輪詢index,選擇index對應的後端server 

WeightedResponseTimeRule:根據響應時間分配一個權重,響應時間越長,權重越小,被選中的可能性越低 

RetryRule:對選定的負載均衡策略機上重試機制,在一個配置時間段內當選擇server不成功,則一直嘗試使用subRule的方式選擇一個可用的server

這裏我們選擇RandomRule作爲負載策略。

對應build配置文件如下:


比上兩篇博文上的gradle文件多出此依賴。

6 對應的主程序類:

package com.example.eurekaribbon;

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

@EnableDiscoveryClient
@SpringBootApplication
public class EurekaribbonApplication {

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

此處新增的是@EnableDiscoveryClient註釋,表示對應的服務發現。

RestTemplateConfig類

package com.example.eurekaribbon.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

 HelloService類

package com.example.eurekaribbon.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class HelloService {

    @Autowired
    RestTemplate restTemplate;

    @Autowired
    LoadBalancerClient loadBalancerClient;

    public String sayHello(String name){
        ServiceInstance serviceInstance = loadBalancerClient.choose("EUREKASERVERPROVIDER");
        System.out.println(serviceInstance.getHost() + ":" + serviceInstance.getPort()+"---------------------------");
        return  restTemplate.getForObject("http://EUREKASERVERPROVIDER/name/"+name,String.class);
    }
}

HelloController類

package com.example.eurekaribbon.web;

import com.example.eurekaribbon.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @Autowired
    HelloService helloService;

    @RequestMapping("/{who}")
    public String sayHello(@PathVariable String who){
        return helloService.sayHello(who);
    }

}

7 啓動主程序類,此時看到對應的註冊中心如下:


8 驗證,在瀏覽器輸入:http://localhost:8010/test,查看後臺日誌:


多次刷新可以查看更多日誌。


以上是個人學習過程,如有錯誤,歡迎指正,謝謝大家!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章