SpringCloud遠(yuǎn)程服務(wù)調(diào)用實(shí)戰(zhàn)筆記
筆記
在微服務(wù)中,若想要使用遠(yuǎn)程調(diào)用,需要引入spring-cloud-starter-openfeign
(在使用注冊中心的環(huán)境下)
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>xxx</version> </dependency>
由于open-feign是聲明式的遠(yuǎn)程調(diào)用,所以需要編寫一個(gè)接口,并且告訴SpringCloud這個(gè)接口需要調(diào)用遠(yuǎn)程服務(wù)。這個(gè)接口我放在公共模塊下的feign
中。
package top.ctong.gulimall.common.feign; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import top.ctong.gulimall.common.utils.R; import java.util.Map; @FeignClient("gulimall-coupon") @RequestMapping("/coupon/coupon") public interface CouponFeignService { /** * 通過自定義參數(shù)查詢列表 * @param params 自定義參數(shù) * @return R * @author Clover You * @date 2021/11/17 09:11 */ @RequestMapping("/list") R list(@RequestParam Map<String, Object> params); }
@FeignClient("xxx")
該注解用于告訴SpringCloud這是一個(gè)遠(yuǎn)程調(diào)用接口,其中的value
是你在注冊中心中注冊的服務(wù)名。
接口方法簽名需要與被調(diào)用的遠(yuǎn)程服務(wù)簽名一致,例如上面哪個(gè)代碼要調(diào)用的遠(yuǎn)程服務(wù):
package top.ctong.gulimall.coupon.controller; @RestController @RequestMapping("coupon/coupon") public class CouponController { @Autowired private CouponService couponService; /** * 列表 */ @RequestMapping("/list") //@RequiresPermissions("coupon:coupon:list") public R list(@RequestParam Map<String, Object> params){ PageUtils page = couponService.queryPage(params); return R.ok().put("page", page); } }
接著還要使用@EnableFeignClients
開啟當(dāng)前需要使用遠(yuǎn)程調(diào)用的這個(gè)服務(wù)的遠(yuǎn)程調(diào)用,并且指定你的遠(yuǎn)程調(diào)用接口在哪個(gè)包下。
@EnableFeignClients(basePackages = "top.ctong.gulimall.common.feign")
@EnableDiscoveryClient
@MapperScan("top.ctong.gulimall.member.dao")
@SpringBootApplication
public class GulimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallMemberApplication.class, args);
}
}
@EnableFeignClients 該注解用于開啟當(dāng)前服務(wù)的遠(yuǎn)程調(diào)用功能
basePackages 用于指定遠(yuǎn)程調(diào)用接口所在的包,方便服務(wù)啟動(dòng)的時(shí)候可以快速掃描到。他可以接收多個(gè)包名,因?yàn)樗且粋€(gè)String[]
最后在需要遠(yuǎn)程調(diào)用時(shí)注入對應(yīng)的遠(yuǎn)程調(diào)用接口就好
package top.ctong.gulimall.member.controller; @RestController @RequestMapping("member/member") public class MemberController { private final CouponFeignService couponFeignService; @Autowired public MemberController(CouponFeignService couponFeignService, MemberService memberService) { this.couponFeignService = couponFeignService; this.memberService = memberService; } @RequestMapping("/testFeignInvoke") public R testFeignInvoke() { Map<String, Object> parem = new HashMap<>(10); return couponFeignService.list(parem); } }
錯(cuò)誤(nacos)
如果在啟動(dòng)時(shí)出現(xiàn) No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?
錯(cuò)誤,那么就是你的SpringCloud版本比較高,在高版本的SpringCloud中已經(jīng)不再使用 spring-cloud-starter-netflix-ribbon
了,而是使用 spring-cloud-starter-loadbalancer
。而nacos還是使用的 spring-cloud-starter-netflix-ribbon
。
在pom.xml
文件中引入 spring-cloud-starter-loadbalancer
再啟動(dòng)就沒毛病了。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> <version>3.0.4</version> </dependency>
在測試遠(yuǎn)程調(diào)用中發(fā)生 AbstractMethodError
異常。需要在 pom.xml
中排除 nacos 中引入的 ribbon 。否則 spring-cloud-starter-loadbalancer
無法工作。
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <exclusions> <exclusion> <groupId>com.netflix.ribbon</groupId> <artifactId>ribbon</artifactId> </exclusion> </exclusions> </dependency>
到此這篇關(guān)于SpringCloud遠(yuǎn)程服務(wù)調(diào)用 的文章就介紹到這了,更多相關(guān)SpringCloud服務(wù)調(diào)用 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringCloud通過Nacos實(shí)現(xiàn)注冊中心與遠(yuǎn)程服務(wù)調(diào)用詳解流程
- SpringCloud超詳細(xì)講解Feign聲明式服務(wù)調(diào)用
- springcloud使用feign調(diào)用服務(wù)時(shí)參數(shù)內(nèi)容過大問題
- springcloud?feign服務(wù)之間調(diào)用,date類型轉(zhuǎn)換錯(cuò)誤的問題
- SpringCloud之Feign代理,聲明式服務(wù)調(diào)用方式
- SpringCloud 服務(wù)負(fù)載均衡和調(diào)用 Ribbon、OpenFeign的方法
- SpringCloud讓微服務(wù)實(shí)現(xiàn)指定程序調(diào)用
- SpringCloud Feign服務(wù)調(diào)用請求方式總結(jié)
- SpringCloud服務(wù)的發(fā)現(xiàn)與調(diào)用詳解
相關(guān)文章
Java實(shí)現(xiàn)整數(shù)分解質(zhì)因數(shù)的方法示例
這篇文章主要介紹了Java實(shí)現(xiàn)整數(shù)分解質(zhì)因數(shù)的方法,結(jié)合實(shí)力形式分析了質(zhì)因數(shù)分解的原理與實(shí)現(xiàn)方法,涉及java數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-12-12java 實(shí)現(xiàn)鏈棧存儲(chǔ)的方法
下面小編就為大家?guī)硪黄猨ava 實(shí)現(xiàn)鏈棧存儲(chǔ)的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08詳解SpringCloud新一代網(wǎng)關(guān)Gateway
SpringCloud Gateway是Spring Cloud的一個(gè)全新項(xiàng)目,Spring 5.0+ Spring Boot 2.0和Project Reactor等技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的API路由管理方式2021-06-06IDEA中Javaweb項(xiàng)目圖片加載不出來解決方案
在IDEA中能夠正常的預(yù)覽到圖片,但是在生成項(xiàng)目的war包時(shí),項(xiàng)目的目錄結(jié)構(gòu)卻會(huì)發(fā)生變化,所以無法訪問圖片,本文主要介紹了IDEA中Javaweb項(xiàng)目圖片加載不出來解決方案,感興趣的可以了解一下2023-10-10mybatis-plus實(shí)現(xiàn)邏輯刪除的示例代碼
本文主要介紹了mybatis-plus實(shí)現(xiàn)邏輯刪除的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05