您好,登錄后才能下訂單哦!
這篇文章主要介紹SpringCloud遠程服務怎么調用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
在微服務中,若想要使用遠程調用,需要引入spring-cloud-starter-openfeign
(在使用注冊中心的環境下)
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>xxx</version> </dependency>
由于open-feign是聲明式的遠程調用,所以需要編寫一個接口,并且告訴SpringCloud這個接口需要調用遠程服務。這個接口我放在公共模塊下的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 { /** * 通過自定義參數查詢列表 * @param params 自定義參數 * @return R * @author Clover You * @date 2021/11/17 09:11 */ @RequestMapping("/list") R list(@RequestParam Map<String, Object> params); }
@FeignClient("xxx")
該注解用于告訴SpringCloud這是一個遠程調用接口,其中的value
是你在注冊中心中注冊的服務名。
接口方法簽名需要與被調用的遠程服務簽名一致,例如上面哪個代碼要調用的遠程服務:
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
開啟當前需要使用遠程調用的這個服務的遠程調用,并且指定你的遠程調用接口在哪個包下。
@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 該注解用于開啟當前服務的遠程調用功能
basePackages 用于指定遠程調用接口所在的包,方便服務啟動的時候可以快速掃描到。他可以接收多個包名,因為它是一個String[]
最后在需要遠程調用時注入對應的遠程調用接口就好
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); } }
如果在啟動時出現 No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?
錯誤,那么就是你的SpringCloud版本比較高,在高版本的SpringCloud中已經不再使用 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>
在測試遠程調用中發生 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>
以上是“SpringCloud遠程服務怎么調用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。