色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

SpringBoot使用Feign調(diào)用其他服務(wù)接口

瀏覽:92日期:2023-03-20 15:37:36

使用SpringCloud的Feign組件能夠?yàn)榉?wù)間的調(diào)用節(jié)省編碼時(shí)間并提高開(kāi)發(fā)效率,當(dāng)服務(wù)本身不復(fù)雜時(shí)可以單獨(dú)將該組件拿出使用。

引入依賴

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign --><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.0.4.RELEASE</version></dependency>

引入SpringBoot打包的Feign依賴,需要注意的是Feign的版本與SpringBoot版本的對(duì)應(yīng)關(guān)系,老版本的Feign并不叫openfeign。由于我是用的SpringBoot版本是2.0x,所以openfeign使用了2.0x版本,若使用諸如2.1x或其他高版本的openfeign,在項(xiàng)目啟動(dòng)時(shí)會(huì)報(bào)“抽象方法錯(cuò)誤”這類的異常。

編寫(xiě)接口作為服務(wù)調(diào)用入口

import com.bhz.demo.client.domain.req.ProductReceiveReq;import com.bhz.demo.client.domain.resp.MemberPointBaseResp;import com.bhz.demo.client.domain.resp.UserPointResp;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;/** * @Author guomz * @create 2021/3/15 14:50 */@FeignClient(url = 'www.123.com', name = 'demoClient')public interface DemoClient { @RequestMapping(value = '/demo/user/{uuid}/{name}', method = RequestMethod.GET) DemoBaseResp<DemoUserResp> getUser(@PathVariable('uuid') String uuid, @PathVariable('name') String name); @RequestMapping(value = '/demo/buy', method = RequestMethod.POST) DemoBaseResp buyProduct(DemoBuyReq req);}

Feign的服務(wù)調(diào)用編寫(xiě)類似mybatis的dao接口,接口上方需要標(biāo)注@FeignClient注解,該注解有url、name、value三個(gè)重要參數(shù)。其中name與value等效,必須填寫(xiě)一個(gè)。在微服務(wù)環(huán)境下name或value填寫(xiě)用于被注冊(cè)中心發(fā)現(xiàn)的服務(wù)名,例如調(diào)用的用戶服務(wù)叫userService則此處填寫(xiě)userService,此使url可以不填寫(xiě),因?yàn)橐呀?jīng)指定了調(diào)用方。url則是直接指定服務(wù)的全路徑,若同時(shí)填寫(xiě)url與name,則以u(píng)rl為準(zhǔn),name便被當(dāng)作當(dāng)前客戶端的名稱。

上面的示例并不屬于復(fù)雜的微服務(wù)環(huán)境,所以采用直接指定url來(lái)調(diào)用其他服務(wù)。

方法定義上與controller基本一致,需要注意post方法不能傳遞多個(gè)參數(shù),需要用map或?qū)ο筮M(jìn)行封裝。

調(diào)用服務(wù)

@Service@Slf4jpublic class DemoService { @Autowired private DemoClient demoClient; public void getUser(Long id){ demoClient.getUser('123', 'abc'); }}

在需要調(diào)用其他服務(wù)的模塊中引入之前定義的接口即可。

關(guān)于調(diào)用https接口

調(diào)用https接口時(shí)會(huì)進(jìn)行證書(shū)校驗(yàn),若沒(méi)有證書(shū)則會(huì)拋出No subject alternative names present異常,可以使用以下代碼來(lái)繞過(guò)證書(shū)校驗(yàn):

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon --><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.0.4.RELEASE</version></dependency>

首先需要引入Ribbon依賴,在繞過(guò)證書(shū)的代碼中存在一些需要被注入的類屬于Ribbon。Ribbon的引入同樣需要注意版本問(wèn)題。

import feign.Client;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.cloud.netflix.ribbon.SpringClientFactory;import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.net.ssl.*;import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import java.security.cert.X509Certificate;/**feign client配置 * @Author guomz * @create 2021/3/16 9:52 */ @Configurationpublic class FeignConfiguration {/** * 調(diào)用https接口時(shí)繞過(guò)ssl證書(shū)驗(yàn)證 * @param cachingFactory * @param clientFactory * @return * @throws NoSuchAlgorithmException * @throws KeyManagementException */ @Bean @ConditionalOnMissingBean public Client feignClient(@Qualifier('cachingLBClientFactory') CachingSpringLoadBalancerFactory cachingFactory, SpringClientFactory clientFactory) throws NoSuchAlgorithmException, KeyManagementException { SSLContext ctx = SSLContext.getInstance('TLSv1.2'); X509TrustManager tm = new X509TrustManager() {@Overridepublic void checkClientTrusted(X509Certificate[] x509Certificates, String s) { }@Overridepublic void checkServerTrusted(X509Certificate[] x509Certificates, String s) { }@Overridepublic X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }; ctx.init(null, new TrustManager[]{tm}, null); return new LoadBalancerFeignClient(new Client.Default(ctx.getSocketFactory(), new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession sslSession) { return true; }}), cachingFactory, clientFactory); }}

之后是Feign的配置類,用來(lái)繞過(guò)https證書(shū)校驗(yàn)。

到此這篇關(guān)于SpringBoot使用Feign調(diào)用其他服務(wù)接口的文章就介紹到這了,更多相關(guān)SpringBoot Feign調(diào)用服務(wù)接口內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 成人午夜看片 | 国产美女一级视频 | 亚洲日韩精品欧美一区二区 | 亚洲国产成人在线视频 | 成年人黄视频在线观看 | 日本一区二区三区精品视频 | 免费一级特黄3大片视频 | 久久久久国产一级毛片高清板 | 免费观看情趣v视频网站 | pgone太大了兽王免费视频 | 亚洲成a人在线观看 | 黄男人和女人色一级 | 国产日韩亚洲欧美 | 午夜两性视频免费看 | 毛片久久 | 美国大毛片 | 欧美日韩中文一区二区三区 | 91久久亚洲最新一本 | 国产美女视频做爰 | 日韩中文字幕视频在线 | 成人影院一区二区三区 | 香蕉521av网站永久地址 | 国产精品无码久久久久 | 九九色网| 在线精品国产一区二区 | 日韩精品一区二区三区在线观看l | 久热精品男人的天堂在线视频 | 综合久久一区二区三区 | 67194在线午夜亚洲 | 一级特黄a视频 | 亚洲欧美在线精品一区二区 | 黄录像欧美片在线观看 | 国产亚洲精品成人a在线 | 日韩啪 | 一级特黄特黄的大片免费 | 午夜a毛片 | 男人的天堂在线观看视频不卡 | 日韩视频中文字幕 | 精品在线观看一区 | 亚洲午夜久久久久影院 | 国产91一区二区在线播放不卡 |