1. 程式人生 > >springcloud記錄篇3-springcloud客戶端ribbon和feign

springcloud記錄篇3-springcloud客戶端ribbon和feign

一 。客戶端介紹

  在springcloud中釋出的服務一般為http服務 使用http服務客戶端即可呼叫 最底層的http協議是使用它tcp協議實現 清晰理解http協議請求響應模型可以

使用Socket來進行請求 這種方式開發成本太大,java.net包提供了 HttpURLConnection類來處理http協議  該類可以傳送get和post請求,但是沒有自動重連以及

自動解析 以及不同資料格式的處理 功能 apache提供的 common-net 機 github開源專案 okhttp 都可以很好的解決以上問題 springboot 引入這兩個框架


二 。ribbon配置和演示

ribbon所有的配置  需要在spring的配置檔案中 <client>.ribbon.* 也就是呼叫的客戶端類全路徑 .ribbon.*  

 *的部分可以參考 github官網https://github.com/Netflix/ribbon/wiki/Getting-Started

  比如ribbon的連線超時(sample-client.ribbon.ConnectTimeout=3000) 讀超時(sample-client.ribbon.ReadTimeout=1000

ribbon使用RestTemplate實現http呼叫 提供了客戶端負載均衡的能力

 1》引入ribbon maven依賴

[html]  view plain  copy
  1. groupid org.springframework.cloud   
  2. artifactid spring-cloud-starter-ribbon  
 2》測試呼叫和負載均衡

   測試環境為 《springcloud記錄篇2-服務註冊和發現》文章中的環境

[html]  view plain  copy
  1. eurekaserver    本機ip為 192.168.88.20  主機名 mymaster 埠 8761  這裡為了簡單就不開啟eurekaserver的從服務eurekabackup  
  2. 服務提供和服務消費配置    
  3.   eurekapub  本機ip  192.168.88.20 埠8086 應用名稱 idserver  
  4.   eurekapub  本機ip  192.168.88.20 埠8085 應用名稱 idserver  
  5.   eurekaconsumer 本機ip  192.168.88.20 埠8888  
因為客戶端eurekaconsumer(訂閱者)需要呼叫eurekapub提供的服務 eurekapub需要做負載處理 開啟兩臺設定不同埠

》》eurekapub配置如下

[html]  view plain  copy
  1. server:  
  2.   port: 8086  
  3. eureka:  
  4.   client:  
  5.     serviceUrl:    
  6.       defaultZone: http://jiaozi:[email protected]:8761/eureka/  
  7. #每個服務必須有一個唯一的應用名稱     該服務的負載均衡 可以通過相同名稱的一組服務 做叢集   
  8. spring:  
  9.   application:  
  10.     name:   idserver    
執行主類

[html]  view plain  copy
  1. package cn.et;  
  2.   
  3. import java.util.UUID;  
  4.   
  5. import org.springframework.boot.SpringApplication;  
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  7. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;  
  8. import org.springframework.web.bind.annotation.GetMapping;  
  9. import org.springframework.web.bind.annotation.PathVariable;  
  10. import org.springframework.web.bind.annotation.PostMapping;  
  11. import org.springframework.web.bind.annotation.RequestBody;  
  12. import org.springframework.web.bind.annotation.RequestMapping;  
  13. import org.springframework.web.bind.annotation.RestController;  
  14. /**  
  15.  * 服務提供則  @EnableDiscoveryClient 將當前服務註冊到Eureka伺服器  
  16.  * @author jiaozi  
  17.  *  
  18.  */  
  19. @EnableDiscoveryClient(autoRegister=true)  
  20. @SpringBootApplication  
  21. @RestController  
  22. public class EurekapubApplication {  
  23.     @RequestMapping("/getId")  
  24.     public String getId() {  
  25.         return UUID.randomUUID().toString();  
  26.     }  
  27.     public static void main(String[] args) {  
  28.         SpringApplication.run(EurekapubApplication.class, args);  
  29.     }  
  30. }  
同一個專案將 application.yml中server.port=8085 後啟動  然後 改成8086後啟動 
訪問localhost:8761 輸入eurekaserver的使用者名稱和密碼 


》》eurekaconsume配置如下

主類 EurekaconsumerApplication

[html]  view plain  copy
  1. package cn.et;  
  2.   
  3. import org.springframework.boot.SpringApplication;  
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  5. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;  
  6. import org.springframework.cloud.client.loadbalancer.LoadBalanced;  
  7. import org.springframework.cloud.netflix.ribbon.RibbonClient;  
  8. import org.springframework.context.annotation.Bean;  
  9. import org.springframework.context.annotation.Configuration;  
  10. import org.springframework.web.client.RestTemplate;  
  11.   
  12. import cn.et1.RuleSetting;  
  13.   
  14. @SpringBootApplication  
  15. @EnableDiscoveryClient(autoRegister=true)  
  16. @Configuration  
  17. @RibbonClient(value="IDSERVER") //表示使用ribbon客戶端 value表示釋出方的服務名稱  
  18. public class EurekaconsumerApplication {  
  19.   
  20.     @LoadBalanced  //啟動負載均衡  
  21.     @Bean  
  22.     RestTemplate restTemplate() {  
  23.         return new RestTemplate();  
  24.     }  
  25.     public static void main(String[] args) {  
  26.         SpringApplication.run(EurekaconsumerApplication.class, args);  
  27.     }  
  28. }  
新增Controller類測試TestController

[html]  view plain  copy
  1. package cn.et;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.cloud.client.ServiceInstance;  
  5. import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;  
  6. import org.springframework.web.bind.annotation.RequestMapping;  
  7. import org.springframework.web.bind.annotation.RestController;  
  8. import org.springframework.web.client.RestTemplate;  
  9.   
  10. import com.netflix.appinfo.InstanceInfo;  
  11. import com.netflix.discovery.EurekaClient;  
  12. import com.netflix.loadbalancer.IRule;  
  13.   
  14. @RestController  
  15. public class TestController {  
  16.     @Autowired  
  17.     EurekaClient client;  
  18.       
  19.       
  20.     @Autowired  
  21.     private RestTemplate restTemplate;  
  22.     /**  
  23.      * 直接通過服務方地址 http://localhost:8080/getId 呼叫這種方式沒有叢集  
  24.      * //@LoadBalanced不能新增  
  25.      * @return  
  26.      */  
  27.     @RequestMapping("invokeService")  
  28.     public String invokeService() {  
  29.         String uuid=restTemplate.getForObject("http://localhost:8080/getId", String.class);  
  30.         return uuid;  
  31.     }  
  32.     /**  
  33.      * 通過在eureka server註冊的 應用名稱 直接來訪問  
  34.      * @LoadBalanced必須新增  
  35. 相關推薦

    springcloud記錄3-springcloud客戶ribbonfeign

    一 。客戶端介紹   在springcloud中釋出的服務一般為http服務 使用http服務客戶端即可呼叫 最底層的http協議是使用它tcp協議實現 清晰理解http協議請求響應模型可以 使用Socket來進行請求 這種方式開發成本太大,java.net包提供了 Ht

    SpringCloudRibbon如何自定義客戶配置全域性配置

    起因 事情的起因是這樣的,公司內部要實現基於Zuul閘道器的灰度路由,在上線時進行灰度測試,故需要配置業務微服務向Eureka註冊的metadata元資料,和自定義Ribbon的負載規則達到只訪問灰度服務的目的。這樣就需要自定義Ribbon的IRule,實現灰度請求只會負載到帶有灰度標籤元資料的業務微服務上,

    SpringCloud之基礎例項之客戶

    本文章總結摘錄的《Spring Cloud與Docker微服務架構實戰》,如果覺得文章對您有所幫助想有所精進,請購買正版書籍深入研究 承接上文的SpringCloud之基礎例項之服務端,我們來編寫服務端 新增pom依賴同服務端 建立使用者實體類 package com.e

    SpringCloud | 第二: 服務消費者(rest+ribbon

    在上一篇文章,講了服務的註冊和發現。在微服務架構中,業務都會被拆分成一個獨立的服務,服務與服務的通訊是基於http restful的。Spring cloud有兩種服務呼叫方式,一種是ribbon+restTemplate,另一種是feign。在這一篇文章首先講解下基於r

    Java架構學習(四十一)SpringCloud&基礎回顧&使用Fegin客戶呼叫&服務雪崩效應產生原因&Jmeter模擬服務雪崩效應&解決雪崩效應辦法&Hystrix解決雪崩效應&相關面試

    前置知識 SpringCloud 是微服務解決框架,主要應用在RPC遠端呼叫。 2、裡面集成了Eureka註冊中心、Ribbon負載均衡客戶端、Zuul介面閘道器 分散式配置中心。 3、SpringCloud客戶端呼叫工具、rest、fegin。 4、Spri

    Java後愛上SpringCloud 第二節:內部負載均衡 RibbonFeign

    Java後端愛上SpringCloud 第一節:內部負載均衡 Ribbon和Feign 一些連結 Ribbon和Feign的區別和比較 當前架構 建立My-Spring-Ribbon 建立My-Spring-Feign Ribbon呼叫

    OPC工作記錄整理——第四(OPC客戶開發之OPC伺服器的列舉連線)

        OPC客戶端的開發相對來說,只要掌握了OPC基類的幾個介面,並知道它們是如何運作的,那麼開發起來還是相對容易的。好了,廢話不多說了,我們開始吧。     首先是對標頭檔案的引用: #include "stdafx.h" #include <afxcoll.h

    SpringCloud 進階之RibbonFeign

    bin 選擇服務器 clas cati tar 一個 string etime lis 1. Ribbon 負載均衡 Spring Cloud Ribbon是基於Netflix Ribbon實現的一套客戶端,負載均衡的工具; 1.1 Ribbon 配置初步 1.1.1

    RabbitMQ(3) Java客戶使用

    裏的 新的 tool int else build 實現 綁定 them RabbitMQ針對不同的開發語言(java,python,c/++,Go等等),提供了豐富對客戶端,方便使用。就Java而言,可供使用的客戶端有RabbitMQ Java client、 Rabbi

    Netty學習(3): 客戶服務的例子

    服務端: package com.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import

    SpringCloud總結--SpringCloud簡單使用以及RibbonFeign的使用

    SpringCloud是基於SpringBoot的一整套實現微服務的框架。他提供了微服務開發所需的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等元件。最重要的是,跟spring boot框架一起使用的話,會讓你開發微服務架構的雲服務非常好的方

    【.NET Core項目實戰-統一認證平臺】第六章 網關-自定義客戶授權

    localhost 寫入 warn seo 接口 後端 配置 rect when 【.NET Core項目實戰-統一認證平臺】開篇及目錄索引 上篇文章我們介紹了網關使用Redis進行緩存,並介紹了如何進行緩存實現,緩存信息清理接口的使用。本篇我們將介紹如何實現網關自定義客

    【.NET Core專案實戰-統一認證平臺】第七章 閘道器-自定義客戶限流

    原文: 【.NET Core專案實戰-統一認證平臺】第七章 閘道器篇-自定義客戶端限流 【.NET Core專案實戰-統一認證平臺】開篇及目錄索引 上篇文章我介紹瞭如何在閘道器上增加自定義客戶端授權功能,從設計到編碼實現,一步一步詳細講解,相信大家也掌握了自定義中介軟體的開發技巧了,本篇我們將介紹如

    【.NET Core專案實戰-統一認證平臺】第六章 閘道器-自定義客戶授權

    原文: 【.NET Core專案實戰-統一認證平臺】第六章 閘道器篇-自定義客戶端授權 【.NET Core專案實戰-統一認證平臺】開篇及目錄索引 上篇文章我們介紹了閘道器使用Redis進行快取,並介紹瞭如何進行快取實現,快取資訊清理介面的使用。本篇我們將介紹如何實現閘道器自定義客戶端授權,實現可以

    SpringCloud -- Hystrix 熔斷機制實現(基於 RibbonFeign)

    一、基於 Ribbon + Hystrix   在入口類 中 加上@EnableHystrix   //表示載入熔斷器功能 package com.springcloud.ribbon; import org.springframework.boot.SpringA

    玩轉SpringCloud 三.斷路器(Hystrix)RestTemplate+RibbonFeign兩種方式

     此文章基於: 三.斷路器(Hystrix) 在微服務架構中,根據業務來拆分成一個個的服務,服務與服務之間可以相互呼叫(RPC),在Spring Cloud可以用來呼叫。為了保證其高可用,單個服務通常會叢集部署。由於網路原因或者自身的原因,服務並不能保證100%可用,如果單個服務出現問

    manjaro搭建工作環境(3) Linux 客戶軟體PAC安裝

    1 使用者目錄下新建目錄 $ mkdir misdep && cd misdep 2 安裝pacmanager依賴的包,對以下的包遍歷執行操作(各個包的路徑可以到AUR --> https://aur.archlinux

    SpringCloud微服務呼叫方式之RibbonFeign方式

    微服務呼叫方式之Ribbon的用法 匯入Ribbon的依賴 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId&

    Netty原始碼分析第3章(客戶接入流程)---->第1節: 初始化NioSockectChannelConfig

      Netty原始碼分析第三章: 客戶端接入流程   概述:         之前的章節學習了server啟動以及eventLoop相關的邏輯, eventLoop輪詢到客戶端接入事件之後是如何處理的?這一章我們循序漸進, 帶大家繼續剖析客戶

    Netty原始碼分析第3章(客戶接入流程)---->第3節: NioSocketChannel的建立

      Netty原始碼分析第三章: 客戶端接入流程   第三節: NioSocketChannel的建立   回到上一小結的read()方法: public void read() { //必須是NioEventLoop方法呼叫的, 不能通過外部執行緒呼叫