SpringCloud遠程服務調(diào)用實戰(zhà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是聲明式的遠程調(diào)用,所以需要編寫一個接口,并且告訴SpringCloud這個接口需要調(diào)用遠程服務。這個接口我放在公共模塊下的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這是一個遠程調(diào)用接口,其中的value是你在注冊中心中注冊的服務名。
接口方法簽名需要與被調(diào)用的遠程服務簽名一致,例如上面哪個代碼要調(diào)用的遠程服務:
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開啟當前需要使用遠程調(diào)用的這個服務的遠程調(diào)用,并且指定你的遠程調(diào)用接口在哪個包下。
@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 該注解用于開啟當前服務的遠程調(diào)用功能
basePackages 用于指定遠程調(diào)用接口所在的包,方便服務啟動的時候可以快速掃描到。他可以接收多個包名,因為它是一個String[]
最后在需要遠程調(diào)用時注入對應的遠程調(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);
}
}
錯誤(nacos)
如果在啟動時出現(xiàn) No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer? 錯誤,那么就是你的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 再啟動就沒毛病了。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> <version>3.0.4</version> </dependency>
在測試遠程調(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遠程服務調(diào)用 的文章就介紹到這了,更多相關(guān)SpringCloud服務調(diào)用 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringCloud通過Nacos實現(xiàn)注冊中心與遠程服務調(diào)用詳解流程
- SpringCloud超詳細講解Feign聲明式服務調(diào)用
- springcloud使用feign調(diào)用服務時參數(shù)內(nèi)容過大問題
- springcloud?feign服務之間調(diào)用,date類型轉(zhuǎn)換錯誤的問題
- SpringCloud之Feign代理,聲明式服務調(diào)用方式
- SpringCloud 服務負載均衡和調(diào)用 Ribbon、OpenFeign的方法
- SpringCloud讓微服務實現(xiàn)指定程序調(diào)用
- SpringCloud Feign服務調(diào)用請求方式總結(jié)
- SpringCloud服務的發(fā)現(xiàn)與調(diào)用詳解
相關(guān)文章
Java實現(xiàn)整數(shù)分解質(zhì)因數(shù)的方法示例
這篇文章主要介紹了Java實現(xiàn)整數(shù)分解質(zhì)因數(shù)的方法,結(jié)合實力形式分析了質(zhì)因數(shù)分解的原理與實現(xiàn)方法,涉及java數(shù)值運算相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
詳解SpringCloud新一代網(wǎng)關(guān)Gateway
SpringCloud Gateway是Spring Cloud的一個全新項目,Spring 5.0+ Spring Boot 2.0和Project Reactor等技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務架構(gòu)提供一種簡單有效的統(tǒng)一的API路由管理方式2021-06-06

