玩轉SpringCloud 二.服務消費者(1)ribbon+restTemplate

来源:https://www.cnblogs.com/lsy131479/archive/2018/09/11/9625479.html
-Advertisement-
Play Games

上一篇博客有人問我,Springcloud系列會不會連載 ,大家可以看到我的標簽分類里已經開設了SpringCloud專題,所以當然會連載啦,本人最近也是買了本書在學習SpringCloud微服務框架,知識會隨時分享的!!!!!!!!!!!!!!!!!!!!! 二.服務消費者 在微服務架構中,業務都 ...


上一篇博客有人問我,Springcloud系列會不會連載 ,大家可以看到我的標簽分類里已經開設了SpringCloud專題,所以當然會連載啦,本人最近也是買了本書在學習SpringCloud微服務框架,知識會隨時分享的!!!!!!!!!!!!!!!!!!!!!

二.服務消費者

 

在微服務架構中,業務都會被拆分成一個獨立的服務,服務與服務的通訊是基於http restful的。Spring cloud有兩種服務調用方式,一種是ribbon+restTemplate,另一種是feign

本片博客以上一篇博客 玩轉SpringCloud 一.服務的註冊與發現(Eureka) 的項目為基礎   https://www.cnblogs.com/lsy131479/p/9613755.html  

本片博客將講解ribbon+restTemplate模式,下一篇講解feign模式

 

1. ribbon+restTemplate

 

ribbon是一個負載均衡客戶端,可以很好的控制htt和tcp的一些行為

啟動demo1 工程;啟動demo2工程,它的埠為8762;將demo2的配置文件的埠改為8763,並啟動,會發現:demo2demo1 註冊了2個實例,這就相當於一個小的集群

 

啟動之前先將demo2的啟動設置單例關掉

 

項目啟動後並且關掉單例啟動後,改變demo2的埠號

再次啟動demo2,查看註冊中心的服務http://localhost:8761

 

 會發現:demo2在demo1 註冊了2個實例,這就相當於一個小的集群。

 

建一個服務消費者

項目架構:

 

 

重新新建一個spring-boot工程,取名為:demo3;

 

引入主項目,以及相關jar包:

 

<parent>
   <groupId>com.fsdm</groupId>
   <artifactId>SpringCloud_test1</artifactId>
   <version>1.0-SNAPSHOT</version>
</parent>

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

 

yml配置:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8764
spring:
  application:
  #工程名稱
    name: service-ribbon

 

在工程的啟動類中,通過@EnableDiscoveryClient向服務中心註冊;並且向程式的ioc註入一個bean: restTemplate;並通過@LoadBalanced註解表明這個restRemplate開啟負載均衡的功能。

@EnableEurekaClient
@EnableDiscoveryClient
@SpringBootApplication
public class Demo3Application {

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


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

註解解析:

 

@EnableDiscoveryClient

1. 基於spring-cloud-commons,並且在classpath中實現。

2. 就是如果選用的註冊中心是eureka推薦@EnableEurekaClient,如果是其他的註冊中心推薦使用@EnableDiscoveryClient,如果classpath中添加了eureka,則它們的作用是一樣的。

 

 

@Bean

1、Java面向對象,對象有方法和屬性,那麼就需要對象實例來調用方法和屬性(即實例化);

2、凡是有方法或屬性的類都需要實例化,這樣才能具象化去使用這些方法和屬性;

3、規律:凡是子類及帶有方法或屬性的類都要加上註冊BeanSpring IoC的註解

 

4、Bean理解為類的代理或代言人(實際上確實是通過反射、代理來實現的),這樣它就能代表類擁有該擁有的東西了

5、我們都在微博上@過某某,對方會優先看到這條信息,並給你反饋,那麼在Spring中,你標識一個@符號,那麼Spring就會來看看,並且從這裡拿到一個Bean或者給出一個Bean

 

@LoadBalanced

1. 表明這個restRemplate開啟負載均衡的功能。

2. 實現負載均衡

 

 

寫一個測試類HelloService,通過之前註入ioc容器的restTemplate來消費service-hi服務的“/hi”介面,在這裡我們直接用的程式名替代了具體的url地址,在ribbon中它會根據服務名來選擇具體的服務實例,根據服務實例在請求的時候會用具體的url替換掉服務名.

public class HelloService {

    @Autowired
    RestTemplate restTemplate;

    public String hiService(String name) {
        return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);
    }
}

寫一個controller,在controller中用調用HelloService 的方法

@RestController
public class HelloControler {

    @Autowired
    HelloService helloService;

    @GetMapping(value = "/hi")
    public String hi(@RequestParam String name) {
        return helloService.hiService( name );
    }

}

啟動demo3工程

運行工程情況:

(demo2雙啟動)

 

在瀏覽器上多次訪問http://localhost:8764/hi?name=forezp,瀏覽器交替執行顯示

這說明當我們通過調用restTemplate.getForObject(“http://SERVICE-HI/hi?name=“+name,String.class)方法時,已經做了負載均衡,訪問了不同的埠的服務實例。

 

此時的架構:(網摘)

 

  · 一個服務註冊中心,eureka server,埠為8761

  · service-hi工程跑了兩個實例,埠分別為8762,8763,分別向服務註冊中心註冊

  · sercvice-ribbon埠為8764,向服務註冊中心註冊

  · sercvice-ribbon通過restTemplate調用service-hi的hi介面時,因為用ribbon進行了負載均衡,會輪流的調用service-hi:8762和8763 兩個埠的hi介面;

 

 

 

 

                                    未完,待續。。。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 起名方式與CSS 一.起名方式(起名方式也叫選擇器) 起名的目的是為了給標簽添加屬性 常見的3種選擇器有 標簽選擇器 id選擇器(使用的時候加#) class選擇器(使用的時候加.) 樣式的要求是由選擇器的權重來決定的 標簽的權重為1 class的權重是10 id的權重是100 權重是可以疊加的。 ...
  • 分析1.必須在包的頂層目錄下2.二進位文件應該在bin目錄下3.javascipt在lib目錄下4.文檔在doc目錄下 package.json欄位分析 name:包的名稱,必須是唯一的,由小寫英文字母、數字和下劃線組成,不能包含空格 description:包的簡要說明 version:符合語義化 ...
  • ...
  • 效果:設置浮動後父元素高度塌陷 插入下麵兩段代碼:. 效果: ...
  • 不啰嗦,直接上代碼: 1、在瀏覽器輸入網址:http://api.asilu.com/weather/?callback=getname&city=深圳 你會看到如下結果:他返回的是json數據 整理之後是這樣的: 2、怎樣才能獲取上述json的數據呢?很簡單: 3、效果圖是這樣的: 4、完畢。 ...
  • 根據我的面試經歷,一般小公司的面試環節,比較關心框架的熟練程度,以及獨立開發組件的能力 但大廠通常有五輪以上的面試,而且對 js 基礎語法很是看重 於是我總結了一些關於 js 基礎的面試對話,有的當時沒答上來,就在總結的時候就加了點料 忽然覺得又該讀一遍犀牛書了... 一、面試對話 問:你知道 js ...
  • 系統介紹: 1.系統採用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC瀏覽器使用) 2.springmvc +spring4.3.7+ mybaits3.3 SSM 普通java web(非maven, 附贈pom.xml文件) 資料庫:mysql 3.開發工具:my ...
  • 前述 採用confluent kafka-rest proxy實現kafka restful service時候(具體參考上一篇筆記),通過http協議數據傳輸,需要註意的是採用了base64編碼(或者稱之為加密),如果消息再post之前不採用base64處理將會出現:服務端消息亂碼、程式報錯等,因 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...