小白學SpringCloud(二):服務間的呼叫
SpringCloud服務間的呼叫有兩種方式:RestTemplate和FeignClient。不管是什麼方式,他都是通過REST介面呼叫服務的http介面,引數和結果預設都是通過jackson序列化和反序列化。
一、Ribbon簡介
在說這兩種方式之前,我們先來簡單的看一下Ribbon。
Ribbon is a client side load balancer which gives you a lot of control over the behaviour of HTTP and TCP clients. Feign already uses Ribbon, so if you are using @FeignClient then this section also applies.
這是官網對Ribbon的簡介,簡單的說Ribbon是一個負載均衡客戶端,SpringCloud的兩種服務間呼叫方式背後都用了Ribbon。
二、使用RestTemplate進行服務呼叫
程式碼Demo接上篇SpringCloud(一):服務的註冊與發現(Eureka)
**1.**我們首先啟動埠為8761的eureka工程,把SpringCloud的服務註冊中心啟動。
**2.**開啟我們的Discovery工程。這時候Discovery工程相當於服務端,我們來為它寫一個提供服務的方法:
@RestController
public class HelloController {
@Value ("${server.port}")
private String port;
@GetMapping("/hello")
public String hello() {
return "hello! 我是" + port;
}
}
然後將配置檔案中的埠改為8762和8763分別啟動。
如果你使用的是IDEA的話,只需要去掉下圖中紅框框住的部分就可以將同一工程啟動多個例項
這時,我們就擁有了埠為8762和8763的兩個Discovery叢集,Eureka中可以看到
**3.**我們再新建一個Eureka-Discovery工程(可以參照上一篇文章),首先為他配置好Eureka-Client的配置。在配置檔案中為它指定埠為8764:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/ #服務端地址
server:
port: 8764 #客戶端埠
spring:
application:
name: client #客戶端名稱
然後我們為它新增一個RestTemplate的配置Bean,可以參照如下程式碼
@Component
public class HelloConfig {
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
之後我們就可以在需要呼叫的地方用如下方式進行呼叫
@RestController
public class ClientController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/cliHello")
public String CliHello() {
//第一個引數為:服務端的應用名稱/呼叫介面的Mapping
//第二個引數為返回的型別
return restTemplate.getForObject("http://discovery/hello",String.class);
}
}
結果如圖:
這裡因為Ribbon的預設負載均衡方式為輪詢,所以我們可以看到埠8762和8763依次出現。如果有想改變負載均衡方式的小夥伴可以下去自行研究一下,這裡就不過多贅述了。
三、使用Feign進行服務呼叫
1.新增Feign的pom引用
在FeignClient的pom檔案中新增
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
需要注意的是版本一定要跟我的一致,否則新增的依賴有可能會不一樣
2.為啟動類添加註解
這一步很簡單,只需要在在啟動類上新增@EnableFeignClients
註解:
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
3.定義一個Feign介面
程式碼如下:
//name是服務端的名稱
@FeignClient(name = "discovery")
public interface HelloClient {
//url是呼叫服務的url值
@GetMapping("/hello")
String hello();
}
4.呼叫
在配置了Feign介面後,我們就可以直接進行注入呼叫了
@Autowired
private HelloClient helloClient;
@GetMapping("/feignHello")
public String feignHello() {
return helloClient.hello();
}
呼叫的結果跟RestTemplate也相同
從這裡我們可以看到,使用Feign是偽分散式的呼叫方式。
相關推薦
小白學SpringCloud(二):服務間的呼叫
SpringCloud服務間的呼叫有兩種方式:RestTemplate和FeignClient。不管是什麼方式,他都是通過REST介面呼叫服務的http介面,引數和結果預設都是通過jackson序列化和反序列化。 一、Ribbon簡介 在說這兩種方式之前
小白學SpringCloud(五):路由閘道器(Zuul)
在微服務的架構下,各個服務一般會有各自的網路地址,在這樣的情況下外部客戶端的呼叫可能會形成雜亂無章的局面。這時候我們就可以使用微服務閘道器Zuul這個元件,我們讓所有的客戶端請求全部請求Zuul,再由Zuul統一的去請求各個服務。 一、Zuul簡介 Zuu
基於gin的golang web開發:服務間呼叫
微服務開發中服務間呼叫的主流方式有兩種HTTP、RPC,HTTP相對來說比較簡單。本文將使用 ```Resty``` 包來實現基於HTTP的微服務呼叫。 ### Resty簡介 ```Resty``` 是一個簡單的HTTP和REST客戶端工具包,簡單是指使用上非常簡單。Resty在使用簡單的基礎上提供了非常
小白學 Python 爬蟲(3):前置準備(二)Linux基礎入門
人生苦短,我用 Python 前文傳送門: 小白學 Python 爬蟲(1):開篇 小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝 Linux 基礎 CentOS 官網: https://www.centos.org/ 。 CentOS 官方下載連結: https://www.cent
小白學 Python 爬蟲(12):urllib 基礎使用(二)
人生苦短,我用 Python 前文傳送門: 小白學 Python 爬蟲(1):開篇 小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝 小白學 Python 爬蟲(3):前置準備(二)Linux基礎入門 小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門 小白學 Pyth
小白學 Python 爬蟲(34):爬蟲框架 Scrapy 入門基礎(二)
人生苦短,我用 Python 前文傳送門: 小白學 Python 爬蟲(1):開篇 小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝 小白學 Python 爬蟲(3):前置準備(二)Linux基礎入門 小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門 小白學 Pyth
小白學 Python 爬蟲(39): JavaScript 渲染服務 scrapy-splash 入門
人生苦短,我用 Python 前文傳送門: 小白學 Python 爬蟲(1):開篇 小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝 小白學 Python 爬蟲(3):前置準備(二)Linux基礎入門 小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門 小白學 Pyth
小白學 Python 資料分析(3):Pandas (二)資料結構 Series
在家為國家做貢獻太無聊,不如跟我一起學點 Python 順便問一下,你們都喜歡什麼什麼樣的文章封面圖,老用這一張感覺有點醜 人生苦短,我用 Python 前文傳送門: 小白學 Python 資料分析(1):資料分析基礎 小白學 Python 資料分析(2):Pandas (一)概述 引言 先介
小白學 Python 資料分析(13):Pandas (十二)資料表拼接
![](https://cdn.geekdigging.com/python/spider-blog/Python_logo.jpg) > 人生苦短,我用 Python 前文傳送門: [小白學 Python 資料分析(1):資料分析基礎](https://www.geekdigging.com/2020
小白學 Python 資料分析(17):Matplotlib(二)基礎操作
![](https://cdn.geekdigging.com/python/spider-blog/Python_logo.jpg) > 人生苦短,我用 Python 前文傳送門: [小白學 Python 資料分析(1):資料分析基礎](https://www.geekdigging.com/2020
SpringCloud服務間呼叫:負載均衡策略調整
比如我建立的一個訂單服務:order-service, 要呼叫我的商品服務product-service裡面的介面,預設使用輪詢的負載均衡策略 現在我要使用隨機分配,如何操作呢? 1.order-service的配置檔案application.yml裡面修改配置即可: 要指定呼叫的服務
小白學ES 02-Linux中部署Elasticsearch單機服務(5.6.10版本)
目錄 1 前提: 安裝JDK 2 準備安裝包 3 建立ES專用使用者 4 啟動ES服務 5 驗證ES服務是否可用 6 關閉ES服務 7 重啟ES服務 8 常見問題的解決 此部署過程以Elasticsearch-5.6.10版本為例, 後續的學習和演示也用此版本.
小白學ES 05 - 通過Kibana管理叢集服務
目錄 1 檢查叢集的健康狀況 2 檢視叢集中的節點個數 3 檢視叢集中的索引 4 簡單的索引操作 4.1 建立索引 4.2 刪除索引 前述步驟: ① 啟動Kibana; ② 通過瀏覽器訪問Kibana; ③ 進入Dev Tools(開發
小白學python:入門第一步
Python的安裝: 進入Python官方網站下載安裝包 點選導航欄的 Downloads 會自動識別你的windows系統 你會看到 Python3.6.2 和 Python2.7.13 (32位系統)的安裝包 注:Python3以後版本不再向Python2進行相容,所有如果你
小白學Python(二)----判斷語句
一、判斷語句 1、if判斷語句 <1> if判斷語句介紹 if語句是用來進行判斷的,其使用格式如下: if 要判斷的條件: 條件成立時,要做的事情 demo1:(demo的中文意思:演示、案例) age = 30 print("------if判斷開始------") if ag
小白學語句:SQL筆記4
練習4: 做一個登入小程式,登入錯誤3次之後禁止登入 首先在Program.cs加入那段程式碼 string dataDir = AppDomain.CurrentDomain.BaseDirectory; if (dataDi
python新人小白學爬蟲,學習筆記(二)——前期的環境準備
前幾天,我剛剛進行了爬蟲基本知識和學習背景的總結和筆記,今天記錄的是Python的爬蟲入門實踐須知。 首先,是環境的配置 學習python網路爬蟲技術當然需要在Python的環境下,對此,我們可以直接使用Python官網提供的各種不同版本的Python3,當
springcloud學習筆記二:服務提供、消費與ribbon
在學習筆記一里,我們簡單實現了一個註冊中心,我們就可以在上面進行服務的註冊與訂閱消費。 編寫服務,進行註冊 同樣,我們可以在STS中右鍵New->Spring Starter Project ,填寫相應內容->點選next 選擇需要的依賴包,我們這裡由於是構建一個服務提供
【小白學遊戲常用演算法】二、A*啟發式搜尋演算法
在上一篇部落格中,我們一起學習了隨機迷宮演算法,在本篇部落格中,我們將一起了解一下尋路演算法中常用的A*演算法。 通常情況下,迷宮尋路演算法可以使用深度優先或者廣度優先演算法,但是由於效率的原因,不會直接使用這些演算法,在路徑搜尋演算法中最常見的就是A*尋路演算法。使用A*演算法的魅力之處在於它不僅
小白學JAVA《二十二》--- 集合的介面、型別、方法拓展
Map HashMap中,如果是我們的自己定義的類的物件,作為鍵的時候,必須要重寫hashcode( )和equals( ),當然上層的HashSet,也同理 HashMap底層是陣列+單向連結串列的結構,陣列用於存放鍵的hash值,而連結串列用於儲存k-v結構