【springcloud學習(dalston.sr1)】服務消費者通過restTemplate來訪問服務提供者(含源代碼)(五)

該系列項目整體介紹及源代碼請參照前面寫的一篇文章??????【springcloud學習(dalston.sr1)】項目整體介紹(含源代碼)(一)

?springcloud學習(dalston.sr1)系統文章匯總如下:

【springcloud學習(dalston.sr1)】項目整體介紹(含源代碼)(一)

【springcloud學習(dalston.sr1)】Eureka服務端集群的搭建(含源代碼)(二)

【springcloud學習(dalston.sr1)】Eureka單個服務端的搭建(含源代碼)(三)

【springcloud學習(dalston.sr1)】Eureka 客戶端服務注冊(含源代碼)(四)

【springcloud學習(dalston.sr1)】服務消費者通過restTemplate來訪問服務提供者(含源代碼)(五)

【springcloud學習(dalston.sr1)】Eureka 服務發現(含源代碼)(六)

【springcloud學習(dalston.sr1)】Ribbon負載均衡(含源代碼)(七)

【springcloud學習(dalston.sr1)】使用Feign實現接口調用(含源代碼)(八)

【springcloud學習(dalston.sr1)】Hystrix服務熔斷(含源代碼)(九)

【springcloud學習(dalston.sr1)】Hystrix服務降級(含源代碼)(十)

【springcloud學習(dalston.sr1)】Hystrix Dashboard服務監控(含源代碼)(十一)

【springcloud學習(dalston.sr1)】Zuul路由訪問映射規則配置及使用(含源代碼)(十二)

【springcloud學習(dalston.sr1)】Config配置中心-ConfigServer端與Git通信(含源代碼)(十三)

【springcloud學習(dalston.sr1)】Config配置中心-Configclient端通過和Config server端通信來獲取配置文件信息(含源代碼)(十四)

一般情況下,我們遠程調用服務,可以用restTemplate來進行http請求的訪問。接下來,我們會創建一個服務消費者,利用restTemplate來調用服務提供者的接口localhost:8001/goods/list

前面我們創建好了eureka服務端模塊 microservicecloud-eureka-7001和服務提供者項目microservicecloud-provider-8001。

(一)啟動eureka服務端模塊 microservicecloud-eureka-7001和服務提供者項目microservicecloud-provider-8001

我們首先啟動eureka服務端項目和服務提供者項目,然后確認服務提供者能正常訪問,在瀏覽器輸入鏈接地址:localhost:8001/goods/list?

(二)創建服務消費者項目

該模塊創建后的整體代碼結構如下microservicecloud-consumer-80

(1)pom文件內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud2025</artifactId><groupId>com.company</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>microservicecloud-consumer-80</artifactId><dependencies><dependency><groupId>com.company</groupId><artifactId>microservicecloud-api</artifactId><version>${project.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- ribbon相關 --><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><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency></dependencies></project>

(2)創建應用配置文件application.yml

server:port: 80eureka:client:register-with-eureka: false #false表示不向注冊中心注冊自己service-url:defaultZone: http://localhost:7001/eureka/  #如果是訪問eureka集群,則配置為http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

(3)創建啟動類

package com.company.consumer;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient
public class Consumer80Application {public static void main(String[] args) {SpringApplication.run(Consumer80Application.class, args);}
}

(4)創建controller

package com.company.consumer.controller;import com.company.api.entity.Goods;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import java.util.List;@RestController
@RequestMapping("/consumer")
public class GoodsConsumerContrller {/*** http URL*/private static final String REST_URL_PREFIX_HTTP = "http://localhost:8001";/*** 通過應用名稱的訪問地址(應用名稱等同于IP + 端口)*/private static final String REST_URL_PREFIX_APPLICATION_SERVICE_NAME = "http://MICROSERVICECLOUD-GOODS";@Autowiredprivate RestTemplate restTemplate;@GetMapping("/goods/list/http")public List<Goods> getGoodsHttp() {return restTemplate.exchange(REST_URL_PREFIX_HTTP + "/goods/list", HttpMethod.GET,null,   new ParameterizedTypeReference<List<Goods>>(){}).getBody();}@GetMapping("/goods/list/applicationName")public List<Goods> getGoodsServiceName() {return restTemplate.exchange(REST_URL_PREFIX_APPLICATION_SERVICE_NAME + "/goods/list", HttpMethod.GET,null,   new ParameterizedTypeReference<List<Goods>>(){}).getBody();}@GetMapping("/goods/list/hystrix")public List<Goods> getGoodsHystrix() {return restTemplate.exchange(REST_URL_PREFIX_APPLICATION_SERVICE_NAME + "/goods/list/hystrix", HttpMethod.GET,null,   new ParameterizedTypeReference<List<Goods>>(){}).getBody();}
}

(5)創建一個配置類,將restTemplate納入到spring 容器進行管理

package com.company.consumer.config;import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import com.netflix.loadbalancer.RetryRule;
import com.netflix.loadbalancer.RoundRobinRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class ConfigBean {@Bean//@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}/*** 設置ribbon負載均衡的算法,默認是輪詢算法,也即每個都輪詢一次。* @return*///@Beanpublic IRule myRule() {return new RoundRobinRule();// 默認是輪詢算法,也即每個都輪詢一次。// return new RandomRule(); 現在采用隨機的算法//return new RetryRule(); //如果provider都是正常的話,則輪詢。如果有1個不可用的話,則在嘗試幾次失敗后,會自動輪詢能正常使用的服務}
}

(三)啟動服務消費者項目,驗證效果

這里注意,我們前面已經事先啟動好了eureka服務端模塊 microservicecloud-eureka-7001和服務提供者項目microservicecloud-provider-8001

現在我們使用restTemplate通過IP + 端口方式調用服務提供者的接口(使用http://localhost/consumer/goods/list/http)

通過服務消費者microservicecloud-consumer-80模塊的創建,我們在controller中定義了接口/consumer/goods/list/http?,并且在該接口中通過restTemplate來訪問服務提供者microservicecloud-provider-8001

的?localhost:8001/goods/list接口。

我們啟動服務消費者項目microservicecloud-consumer-80,然后在瀏覽器中訪問 http://localhost/consumer/goods/list/http

如果結果能正常返回,則說明通過restTemplate調用成功

如下圖:

(2)使用服務名稱進行調用(代替IP + 端口方式)(使用http://MICROSERVICECLOUD-GOODS/consumer/goods/list/http)

由于該項目也是作為Eureka的客戶端,其調用也可以通過服務名稱方式進行直接調用。

比如服務提供方的地址是?localhost:8001/goods/list ,從eureka注冊列表可以看到服務名稱是MICROSERVICECLOUD-GOODS

如下圖:

注意eureka服務提供者的名稱,取決于服務提供者項目microservicecloud-provider-8001中的application.yml配置文件中的spring.application.name=microservicecloud-goods配置項,eureka server端網頁里會展示為大寫

由于通過服務名需要啟用負載均衡注解 @LoadBalanced,這里需要修改下配置Bean,去掉前面的注釋(前面通過IP + 端口方式訪問時,通過//注釋掉了該注解),以正式啟用該注解,如下圖

這里我們嘗試訪問http://localhost/consumer/goods/list/applicationName,該接口的url里換成了服務名,如下圖:

在瀏覽器中訪問http://localhost/consumer/goods/list/applicationName,頁面正常展示返回結果,說明能通過服務名稱來訪問到服務提供者的接口。

注意:因為@LoadBalanced這個注解是加在restTemplate上面的,如果還想通過IP + 端口方式訪問,則需要注掉該注解,否則進行restTemplate調用訪問時會報以下錯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81621.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81621.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81621.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小白學編程之——數據庫如何性能優化

小白學編程之——數據庫性能優化指南 數據庫如同一個大型倉庫&#xff0c;性能優化就是幫助倉庫管理員&#xff08;數據庫&#xff09;更高效地存取貨物&#xff08;數據&#xff09;。本文將以通俗易懂的方式&#xff0c;帶你避開常見誤區&#xff0c;讓數據庫運行得更快更穩…

SQLMesh信號機制詳解:如何精準控制模型評估時機

SQLMesh的信號機制為數據工程師提供了更精細的模型評估控制能力。本文深入解析信號機制的工作原理&#xff0c;通過簡單和高級示例展示如何自定義信號&#xff0c;并提供實用的使用技巧和測試方法&#xff0c;幫助讀者優化數據管道的調度效率。 一、為什么需要信號機制&#xf…

FreeSWITCH 簡單圖形化界面43 - 使用百度的unimrcp搞個智能話務臺,用的在線的ASR和TTS

FreeSWITCH 簡單圖形化界面43 - 使用百度的unimrcp搞個智能話務臺 0、一個fs的web配置界面預覽1、安裝unimrcp模塊2、安裝完成后&#xff0c;配置FreeSWITCH。2.1 有界面的配置2.1.1 mod_unimrcp模塊配置2.1.2 mod_unimrcp客戶端配置 2.2 無界面的配置 3、呼叫規則4、編寫流程4…

【架構】RUP統一軟件過程:企業級軟件開發的全面指南

一、RUP概述 RUP(Rational Unified Process&#xff0c;統一軟件過程)是由Rational Software公司(后被IBM收購)開發的一種迭代式軟件開發過程框架。它結合了傳統瀑布模型的系統性和敏捷方法的靈活性&#xff0c;為中大型軟件項目提供了全面的開發方法論。 RUP不僅僅是一種過程…

DeepSeek賦能電商,智能客服機器人破解大型活動人力困境

1. DeepSeek 與電商客服結合的背景 1.1 電商行業客服需求特點 電商行業具有獨特的客服需求特點&#xff0c;這些特點決定了智能客服機器人在該行業的必要性和重要性。 高并發性&#xff1a;電商平臺的用戶數量龐大&#xff0c;尤其是在促銷活動期間&#xff0c;用戶咨詢量會…

面向具身智能的視覺-語言-動作模型(VLA)綜述

具身智能被廣泛認為是通用人工智能&#xff08;AGI&#xff09;的關鍵要素&#xff0c;因為它涉及控制具身智能體在物理世界中執行任務。在大語言模型和視覺語言模型成功的基礎上&#xff0c;一種新的多模態模型——視覺語言動作模型&#xff08;VLA&#xff09;已經出現&#…

后端框架(1):Mybatis

什么是框架&#xff1f; 蓋高樓&#xff0c;框架結構。 框架結構就是高樓的主體&#xff0c;基礎功能。 把很多基礎功能已經實現了(封裝了)。 在基礎語言之上&#xff0c;對各種基礎功能進行封裝&#xff0c;方便開發者&#xff0c;提高開發效率。 mybatis&#xff1a;對jd…

ubuntu20.04系統搭建k8s1.28集群-docker作為容器運行時

ubuntu系統搭建 ubuntu-22.04.5-desktop-amd64.iso映像文件--->實際卻是20.4focal版本。 【安裝過程沒有特別指出的默認回車下一步】 【用戶和密碼設置】 【網絡連接】 【在vmware上安裝的話&#xff0c;網絡配置如下】【在vm里配置選擇nat或者橋接即可】 【國內源配置】&…

軟件I2C

軟件I2C 注意&#xff1a; SDA&#xff08;串行數據線&#xff09;和SCL&#xff08;串行時鐘線&#xff09;都是雙向I/O線&#xff0c;接口電路為開漏輸出。需通過上拉電阻接電源VCC。 軟件I2C說明 說明&#xff0c;有的單片機沒有硬件I2C的功能&#xff0c;或者因為電路設計…

C++性能測試工具——Vtune的使用

一、Intel Vtune的安裝 在前面初步認識了一下幾個性能的測試工具&#xff0c;本篇重點介紹一下Intel VTune Profiler&#xff0c;VTune是一個強大的性能分析工具&#xff0c;它屬于Intel oneAPI工具包中工具的一種。VTune的安裝只介紹在Linux平臺下的場景&#xff08;Windows安…

互聯網大廠Java求職面試:優惠券服務架構設計與AI增強實踐-6

互聯網大廠Java求職面試&#xff1a;優惠券服務架構設計與AI增強實踐-6 場景設定&#xff1a;技術總監張總坐在會議室里&#xff0c;鄭薪苦帶著自信的微笑走了進來。今天他們要圍繞優惠券服務的架構設計及如何結合AI進行增強展開討論。 第一輪面試&#xff1a;基礎架構設計 …

nginx模塊使用、過濾器模塊以及handler模塊

一、如何使用nginx的模塊 1.ngx_code.c: #include "ngx_config.h" #include "ngx_conf_file.h" #include "nginx.h" #include "ngx_core.h" #include "ngx_string.h" #include "ngx_palloc.h" #include "n…

【Odoo】Pycharm導入運行Odoo15

【Odoo】Pycharm導入運行Odoo15 前置準備1. Odoo-15項目下載解壓2. PsrtgreSQL數據庫 項目導入運行1. 項目導入2. 設置項目內虛擬環境3. 下載項目中依賴4. 修改配置文件odoo.conf 運行Pycharm快捷運行 前置準備 1. Odoo-15項目下載解壓 將下載好的項目解壓到開發目錄下 2. …

網絡安全-等級保護(等保) 2-5 GB/T 25070—2019《信息安全技術 網絡安全等級保護安全設計技術要求》-2019-05-10發布【現行】

################################################################################ GB/T 22239-2019 《信息安全技術 網絡安全等級保護基礎要求》包含安全物理環境、安全通信網絡、安全區域邊界、安全計算環境、安全管理中心、安全管理制度、安全管理機構、安全管理人員、安…

【SpringBoot】??整合飛書群機器人發送消息

&#x1f4a5;&#x1f4a5;????歡迎閱讀本文章????&#x1f4a5;&#x1f4a5; &#x1f3c6;本篇文章閱讀大約耗時3分鐘。 ??motto&#xff1a;不積跬步、無以千里 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目錄如下&#xff1a;&#x1f381;&#x1f381;&am…

我的多條件查詢

背景&#xff1a;2個表&#xff0c;是一對多的關系&#xff0c;一個實時視頻幀可以出現多個檢測結果 要求&#xff0c;可以根據&#xff0c;ids&#xff0c;起始時間&#xff0c;識別出的鳥的種類&#xff0c;來進行刪除。 出現的問題&#xff0c; 一致性沒有實現&#xff1a…

關于網站提交搜索引擎

發布于Eucalyptus-blog 一、前言 將網站提交給搜索引擎是為了讓搜索引擎更早地了解、索引和顯示您的網站內容。以下是一些提交網站給搜索引擎的理由&#xff1a; 提高可見性&#xff1a;通過將您的網站提交給搜索引擎&#xff0c;可以提高您的網站在搜索結果中出現的機會。當用…

【Oracle專欄】擴容導致數據文件 dbf 丟失,實操

Oracle相關文檔,希望互相學習,共同進步 風123456789~-CSDN博客 1.背景 同事檢查擴容情況,發現客戶擴容后數據盤后,盤中原有文件丟失,再檢查發現數據庫沒有啟動。通過檢查發現數據盤中丟失的是oracle的 dbf 表空間文件。數據庫無法啟動。 檢查情況:1)沒有rman備份 …

負載均衡—會話保持技術詳解

一、會話保持的定義 會話保持&#xff08;Session Persistence&#xff09;是一種負載均衡策略&#xff0c;其核心機制是確保來自同一客戶端的連續請求&#xff0c;在特定周期內被定向到同一臺后端服務器進行處理。這種機制通過記錄和識別客戶端的特定標識信息&#xff0c;打破…

CSRF攻擊 + 觀測iframe加載時間利用時間響應差異側信道攻擊 -- reelfreaks DefCamp 2024

參考: https://0x90r00t.com/2024/09/30/3708/ 題目信息 有些事情最好還是保持低調。當然&#xff0c;除非你是個真正的怪胎。 注意&#xff1a;該網站通過HTTPS提供服務 標志格式&#xff1a;DCTF&#xff5b;&#xff5d;題目實現了一個類似視頻網站的東西 在其提供的數據庫中…