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
- groupid org.springframework.cloud
- artifactid spring-cloud-starter-ribbon
測試環境為 《springcloud記錄篇2-服務註冊和發現》文章中的環境
[html] view plain copy
- eurekaserver 本機ip為 192.168.88.20 主機名 mymaster 埠 8761 這裡為了簡單就不開啟eurekaserver的從服務eurekabackup
- 服務提供和服務消費配置
- eurekapub 本機ip 192.168.88.20 埠8086 應用名稱 idserver
- eurekapub 本機ip 192.168.88.20 埠8085 應用名稱 idserver
- eurekaconsumer 本機ip 192.168.88.20 埠8888
》》eurekapub配置如下
- server:
- port: 8086
- eureka:
- client:
- serviceUrl:
- defaultZone: http://jiaozi:[email protected]:8761/eureka/
- #每個服務必須有一個唯一的應用名稱 該服務的負載均衡 可以通過相同名稱的一組服務 做叢集
- spring:
- application:
- name: idserver
[html] view plain copy
- package cn.et;
- import java.util.UUID;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- /**
- * 服務提供則 @EnableDiscoveryClient 將當前服務註冊到Eureka伺服器
- * @author jiaozi
- *
- */
- @EnableDiscoveryClient(autoRegister=true)
- @SpringBootApplication
- @RestController
- public class EurekapubApplication {
- @RequestMapping("/getId")
- public String getId() {
- return UUID.randomUUID().toString();
- }
- public static void main(String[] args) {
- SpringApplication.run(EurekapubApplication.class, args);
- }
- }
訪問localhost:8761 輸入eurekaserver的使用者名稱和密碼
》》eurekaconsume配置如下
主類 EurekaconsumerApplication
[html] view plain copy
- package cn.et;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
- import org.springframework.cloud.client.loadbalancer.LoadBalanced;
- import org.springframework.cloud.netflix.ribbon.RibbonClient;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.web.client.RestTemplate;
- import cn.et1.RuleSetting;
- @SpringBootApplication
- @EnableDiscoveryClient(autoRegister=true)
- @Configuration
- @RibbonClient(value="IDSERVER") //表示使用ribbon客戶端 value表示釋出方的服務名稱
- public class EurekaconsumerApplication {
- @LoadBalanced //啟動負載均衡
- @Bean
- RestTemplate restTemplate() {
- return new RestTemplate();
- }
- public static void main(String[] args) {
- SpringApplication.run(EurekaconsumerApplication.class, args);
- }
- }
[html] view plain copy
- package cn.et;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.cloud.client.ServiceInstance;
- import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.client.RestTemplate;
- import com.netflix.appinfo.InstanceInfo;
- import com.netflix.discovery.EurekaClient;
- import com.netflix.loadbalancer.IRule;
- @RestController
- public class TestController {
- @Autowired
- EurekaClient client;
- @Autowired
- private RestTemplate restTemplate;
- /**
- * 直接通過服務方地址 http://localhost:8080/getId 呼叫這種方式沒有叢集
- * //@LoadBalanced不能新增
- * @return
- */
- @RequestMapping("invokeService")
- public String invokeService() {
- String uuid=restTemplate.getForObject("http://localhost:8080/getId", String.class);
- return uuid;
- }
- /**
- * 通過在eureka server註冊的 應用名稱 直接來訪問
- * @LoadBalanced必須新增
-
相關推薦
springcloud記錄篇3-springcloud客戶端ribbon和feign
一 。客戶端介紹 在springcloud中釋出的服務一般為http服務 使用http服務客戶端即可呼叫 最底層的http協議是使用它tcp協議實現 清晰理解http協議請求響應模型可以 使用Socket來進行請求 這種方式開發成本太大,java.net包提供了 Ht
【SpringCloud】Ribbon如何自定義客戶端配置和全域性配置
起因 事情的起因是這樣的,公司內部要實現基於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 第二節:內部負載均衡 Ribbon和Feign
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 進階之Ribbon和Feign
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簡單使用以及Ribbon和Feign的使用
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 熔斷機制實現(基於 Ribbon、Feign)
一、基於 Ribbon + Hystrix 在入口類 中 加上@EnableHystrix //表示載入熔斷器功能 package com.springcloud.ribbon; import org.springframework.boot.SpringA
玩轉SpringCloud 三.斷路器(Hystrix)RestTemplate+Ribbon和Feign兩種方式
此文章基於: 三.斷路器(Hystrix) 在微服務架構中,根據業務來拆分成一個個的服務,服務與服務之間可以相互呼叫(RPC),在Spring Cloud可以用來呼叫。為了保證其高可用,單個服務通常會叢集部署。由於網路原因或者自身的原因,服務並不能保證100%可用,如果單個服務出現問
manjaro搭建工作環境(3) Linux 客戶端軟體PAC安裝
1 使用者目錄下新建目錄 $ mkdir misdep && cd misdep 2 安裝pacmanager依賴的包,對以下的包遍歷執行操作(各個包的路徑可以到AUR --> https://aur.archlinux
SpringCloud微服務呼叫方式之Ribbon和Feign方式
微服務呼叫方式之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方法呼叫的, 不能通過外部執行緒呼叫