中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud遠程服務怎么調用

發布時間:2021-11-24 16:30:02 來源:億速云 閱讀:270 作者:小新 欄目:開發技術

這篇文章主要介紹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);
    }
}

錯誤(nacos)

如果在啟動時出現 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遠程服務怎么調用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新乡市| 资源县| 昌乐县| 大丰市| 铜川市| 田东县| 廉江市| 东安县| 兴安县| 通化市| 桓仁| 偃师市| 肥东县| 水城县| 安陆市| 前郭尔| 仙居县| 呼图壁县| 佛冈县| 兰州市| 颍上县| 五莲县| 洪雅县| 鄂尔多斯市| 昌都县| 皮山县| 澜沧| 巴林左旗| 德化县| 涿州市| 稷山县| 体育| 陇西县| 雷波县| 九龙坡区| 苗栗市| 酒泉市| 汕尾市| 建宁县| 永登县| 沂南县|