SpringCloud(三):服務消費以及負載均衡(RestTemplate+Ribbon)

1、什麼是Ribbon:

Ribbon是Netflix發佈的開源項目,主要功能是提供客戶端的軟件負載均衡算法。java

將Netflix的中間層服務鏈接在一塊兒。Ribbon客戶端組件提供一系列完善的配置項如鏈接超時,重試等。簡單的說,就是在配置文件中列出Load Balancer(簡稱LB)後面全部的機器,Ribbon會自動的幫助你基於某種規則(如簡單輪詢,隨即鏈接等)去鏈接這些機器。咱們也很容易使用Ribbon實現自定義的負載均衡算法。web

  • 負載均衡
  • 容錯
  • 多協議(HTTP,TCP,UDP)支持異步和反應模型
  • 緩存和批處理

2、Eureka服務提供者集羣

先啓動上篇文章中的註冊中心eureka-server:8001, 以及hello-service:8011,接着修改hello-service項目配置文件中的端口,改爲8012,再次運行用戶服務項目。算法

執行成功,查看Eureka註冊中心,能夠看到有用戶服務應用有兩個端口對應。spring

(若是是IDEA用戶,須要修改Application.java的執行方式,默認是單實例運行,因此你在運行8011的項目,修改端口沒法再次運行。)緩存

3、RestTemplate+Ribbon消費者:  新建一個maven服務

 

 

 pom.xml:app

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>

application.properties:負載均衡

spring.application.name=hello-consumer-ribbon
server.port=8021
eureka.client.serviceUrl.defaultZone=http://localhost:8001/eureka/spring.application.name=hello-consumer-ribbon
server.port=8021
eureka.client.serviceUrl.defaultZone=http://localhost:8001/eureka/

啓動類:異步

package cn.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class HelloConsumerRibbonApplication {

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

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

    @Autowired
    private RestTemplate restTemplate;

    //獲取服務實例,做用爲以後console顯示效果;"http://USER-SERVICE/hello?name= 標識註冊的服務。USER-SERVICE在eureka註冊的服務名
    @RequestMapping("hello")
    public ResponseEntity<String> hello (String name) {
        return restTemplate.getForEntity("http://USER-SERVICE/hello?name=" + name, String.class);
    }

}

4、測試
測試服務消費
http://localhost:8021/hello?name=ribbonmaven

測試負載均衡:
咱們在hello-service hello方法中加上日誌打印,而後再分別啓動 hello-service:8012,8002,而後屢次訪問 http://localhost:8021/hello?name=ribbon,能夠看到兩個hello-service項目的控制檯都有日誌輸出,表示實現了負載均衡。spring-boot

使用RestTemplate+Ribbon必須指定調用服務名稱,如上面的HELLO-SERVICE,爲了方便使用,SpringCloud還集成了Feign消費方式。————————————————

相關文章
相關標籤/搜索