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

您的位置:首頁技術文章
文章詳情頁

SpringBoot使用Feign調用其他服務接口

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

使用SpringCloud的Feign組件能夠為服務間的調用節省編碼時間并提高開發效率,當服務本身不復雜時可以單獨將該組件拿出使用。

引入依賴

<!-- 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版本的對應關系,老版本的Feign并不叫openfeign。由于我是用的SpringBoot版本是2.0x,所以openfeign使用了2.0x版本,若使用諸如2.1x或其他高版本的openfeign,在項目啟動時會報“抽象方法錯誤”這類的異常。

編寫接口作為服務調用入口

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的服務調用編寫類似mybatis的dao接口,接口上方需要標注@FeignClient注解,該注解有url、name、value三個重要參數。其中name與value等效,必須填寫一個。在微服務環境下name或value填寫用于被注冊中心發現的服務名,例如調用的用戶服務叫userService則此處填寫userService,此使url可以不填寫,因為已經指定了調用方。url則是直接指定服務的全路徑,若同時填寫url與name,則以url為準,name便被當作當前客戶端的名稱。

上面的示例并不屬于復雜的微服務環境,所以采用直接指定url來調用其他服務。

方法定義上與controller基本一致,需要注意post方法不能傳遞多個參數,需要用map或對象進行封裝。

調用服務

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

在需要調用其他服務的模塊中引入之前定義的接口即可。

關于調用https接口

調用https接口時會進行證書校驗,若沒有證書則會拋出No subject alternative names present異常,可以使用以下代碼來繞過證書校驗:

<!-- 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依賴,在繞過證書的代碼中存在一些需要被注入的類屬于Ribbon。Ribbon的引入同樣需要注意版本問題。

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 {/** * 調用https接口時繞過ssl證書驗證 * @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的配置類,用來繞過https證書校驗。

到此這篇關于SpringBoot使用Feign調用其他服務接口的文章就介紹到這了,更多相關SpringBoot Feign調用服務接口內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 久久久久久国产精品视频 | 亚洲成人福利 | 亚洲国产爱久久全部精品 | 国产精品99久久久 | 亚洲欧美一级久久精品 | 国产精品免费观看视频播放 | 亚洲欧美日韩天堂 | 欧美aaaaa激情毛片 | 日本一区二区高清不卡 | 国产亚洲精品成人久久网站 | 国产亚洲精品久久久久久久 | 亚洲欧美日韩视频一区 | 精品国产91久久久久 | 国产丶欧美丶日韩丶不卡影视 | 成人免费视频网 | 成人欧美一区二区三区在线 | 美美女高清毛片视频黄的一免费 | 99视频免费看 | 特级做a爰片毛片免费看一区 | 亚洲黄a| 香蕉午夜 | 手机看片神马午夜片 | 欧美一级毛片片免费孕妇 | 中国国语毛片免费观看视频 | 99在线精品免费视频 | 欧美日韩亚洲综合另类ac | 中文字幕欧美日韩一 | 国产一区二区三区免费大片天美 | 日韩在线看片中文字幕不卡 | 亚洲91 | 精品国产品国语在线不卡丶 | 日本不卡一区二区三区在线观看 | 另类专区 亚洲 | 1024香蕉视频在线播放 | 亚洲日本视频在线 | 高清 国产 日韩 欧美 | 欧美三级黄 | 国产精品免费大片 | 天堂素人搭讪系列嫩模在线观看 | 成人无遮挡毛片免费看 | 国产成人一区二区视频在线观看 |