使用feign配置網(wǎng)絡(luò)ip代理
feign配置網(wǎng)絡(luò)ip代理
問(wèn)題描述
測(cè)試環(huán)境將需要訪問(wèn)的外網(wǎng)地址加入了白名單,但是docker和宿主機(jī)網(wǎng)絡(luò)不一樣(試過(guò)掛載宿主機(jī)網(wǎng)絡(luò)也不行,但是掛載宿主機(jī)網(wǎng)絡(luò)會(huì)打亂原有的網(wǎng)絡(luò)環(huán)境),所以造成了在宿主機(jī)上面可以訪問(wèn)該地址,但是docker里面是訪問(wèn)不到外網(wǎng)的地址,所使用feign的時(shí)候加上ip代理,代理宿主機(jī)ip來(lái)對(duì)外網(wǎng)地址進(jìn)行訪問(wèn)!
為什么不直接對(duì)docker設(shè)置網(wǎng)絡(luò)代理,測(cè)試環(huán)境里面基本都是內(nèi)部服務(wù)調(diào)用,如果設(shè)置則會(huì)導(dǎo)致其網(wǎng)絡(luò)不一致,并且開(kāi)發(fā)測(cè)試正式環(huán)境較為復(fù)雜,如果不需要的時(shí)候直接在配置文件配置為null就行
1.依賴(lài)
<dependency> ? ? <groupId>org.apache.httpcomponents</groupId> ? ? <artifactId>httpclient</artifactId> ? ? <version>4.5.10</version> </dependency> <dependency> ? ? ?<groupId>io.github.openfeign</groupId> ? ? ? <artifactId>feign-okhttp</artifactId> </dependency> //可能還需要feign相關(guān)依賴(lài) feign-okhttp主要用來(lái)做網(wǎng)絡(luò)代理,依賴(lài)需要自行百度
2.feignclinet接口
import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; /** ?* @ClassName? ?* @Description url遠(yuǎn)程調(diào)用的url ?* @Author liuf ?* @Date 2021/10/29 16:19 ?* @Version 1.0 ?**/ @FeignClient(url = "http://xxx.xxx.xxx.xxx:8090" ,name = "slmodel-one") public interface SlModelOneClient { ? ? @ApiOperation("XXXXXXX") ? ? @RequestMapping( ? ? ? ? ? ? method = RequestMethod.GET, ? ? ? ? ? ? value = "/efdcserver/efdcserver/getEfdcCodeByProjectName", ? ? ? ? ? ? consumes = "application/json;charset=UTF-8", ? ? ? ? ? ? produces = MediaType.APPLICATION_JSON_UTF8_VALUE) ? ? List<JsonAreaCode> getEfdcCodeByProjectName( ? ? ? ? ? ? @RequestParam("projectName") String projectName); ? ? @ApiOperation("XXXXXXX") ? ? @RequestMapping( ? ? ? ? ? ? method = RequestMethod.POST, ? ? ? ? ? ? value = "/efdcserver/hydro/getDepthMapByPost?efdcCode={efdcCode}&planName={planName}", ? ? ? ? ? ? consumes = "application/json;charset=UTF-8", ? ? ? ? ? ? produces = MediaType.APPLICATION_JSON_UTF8_VALUE) ? ? DepthMap getDepthMapByPost( ? ? ? ? ? ? @PathVariable(name="efdcCode") String efdcCode, ? ? ? ? ? ? @PathVariable(name ="planName")String planName); ? ? @ApiOperation("XXXXXXX") ? ? @RequestMapping( ? ? ? ? ? ? method = RequestMethod.GET, ? ? ? ? ? ? value = "/efdcserver/hydro/getPoint?planName={planName}&efdcCode={efdcCode}&lgtd={lgtd}<td={lttd}", ? ? ? ? ? ? consumes = "application/json;charset=UTF-8", ? ? ? ? ? ? produces = MediaType.APPLICATION_JSON_UTF8_VALUE) ? ? DepthMap getPointDepthByGet( ? ? ? ? ? ? @PathVariable(name ="planName")String planName, ? ? ? ? ? ? @PathVariable(name="efdcCode") String efdcCode , ? ? ? ? ? ? @PathVariable(name ="lotd")Double lgtd, ? ? ? ? ? ? @PathVariable(name ="lttd")Double lttd); }
3.Config
import okhttp3.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.commons.httpclient.DefaultOkHttpClientFactory; import org.springframework.cloud.commons.httpclient.OkHttpClientFactory; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.io.IOException; import java.net.*; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; /** ?* @Description: feign代理設(shè)置 ?* @Author: liuf ?* @Date: ?* @Param: ?* @Return: ?**/ @Configuration @EnableFeignClients(basePackages = "com.ceshi..map.client") public class Config { ? ? @Value("${proxy.host}") ? ? private String proxyHost; ? ? @Value("${proxy.port}") ? ? private Integer proxyPort; ? ? @Value("#{'${proxy.domains}'.split(',')}") ? ? private Set<String> domainList; ? ? @Bean ? ? public OkHttpClientFactory okHttpClientFactory(OkHttpClient.Builder builder) { ? ? ? ? return new ProxyOkHttpClientFactory(builder); ? ? } ? ? class ProxyOkHttpClientFactory extends DefaultOkHttpClientFactory { ? ? ? ? public ProxyOkHttpClientFactory(OkHttpClient.Builder builder) { ? ? ? ? ? ? super(builder); ? ? ? ? ? ? //如果配置文件中的代理信息為null 則該代理ip配置不生效 ? ? ? ? ? ? if(proxyHost!=null&&proxyPort!=null&&domainList!=null) { ? ? ? ? ? ? ? ? Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort)); ? ? ? ? ? ? ? ? List<Proxy> proxyList = new ArrayList<>(1); ? ? ? ? ? ? ? ? proxyList.add(proxy); ? ? ? ? ? ? ? ? builder.proxySelector(new ProxySelector() { ? ? ? ? ? ? ? ? ? ? @Override ? ? ? ? ? ? ? ? ? ? public List<Proxy> select(URI uri) { ? ? ? ? ? ? ? ? ? ? ? ? if (uri == null || !domainList.contains(uri.getHost())) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? return Collections.singletonList(Proxy.NO_PROXY); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? return proxyList; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? @Override ? ? ? ? ? ? ? ? ? ? public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? }); ? ? ? ? ? ? } ? ? ? ? } ? ? } }
4.yml
使用IP代理
feign: ?okhttp: ? enabled: true proxy: ?host: 199.168.233.32 //需要代理的ip ?port: 4444 ?domains: 222.222.231.116,222.222.231.117 //需要訪問(wèn)的地址 host 如果多個(gè) 用逗號(hào)分割
不使用IP代理
feign: ?okhttp: ? enabled: true proxy: ?host: null ?port: null ?domains: null
調(diào)用指定ip的feign接口
@FeignClient(value = “center-educational-server”,url=“http://127.0.0.1:10005”)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決IDEA中Maven項(xiàng)目中JSTL標(biāo)簽無(wú)效問(wèn)題
這篇文章主要介紹了關(guān)于IDEA中Maven項(xiàng)目中JSTL標(biāo)簽無(wú)效問(wèn)題的解決方法,需要的朋友可以參考下2018-09-09java volatile關(guān)鍵字作用及使用場(chǎng)景詳解
在本文里我們給大家分享的是關(guān)于java volatile關(guān)鍵字作用及使用場(chǎng)景的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-08-08Java中String.split()的最詳細(xì)源碼解讀及注意事項(xiàng)
以前經(jīng)常使用String.split()方法,但是從來(lái)沒(méi)有注意,下面這篇文章主要給大家介紹了關(guān)于Java中String.split()最詳細(xì)源碼解讀及注意事項(xiàng)的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07public?static?void?main(String[]?args)使用解讀
這篇文章主要介紹了public?static?void?main(String[]?args)的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01activemq整合springboot使用方法(個(gè)人微信小程序用)
這篇文章主要介紹了activemq整合springboot使用(個(gè)人微信小程序用),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Spring?cloud?OpenFeign中動(dòng)態(tài)URl、動(dòng)態(tài)傳遞接口地址代碼示例
openFeign是作為微服務(wù)之間調(diào)用的解決方案,每個(gè)微服務(wù)項(xiàng)目是必不可少的,下面這篇文章主要給大家介紹了關(guān)于Spring?cloud?OpenFeign中動(dòng)態(tài)URl、動(dòng)態(tài)傳遞接口地址的相關(guān)資料,需要的朋友可以參考下2024-02-02Java精品項(xiàng)目瑞吉外賣(mài)之后端登錄功能篇
這篇文章主要為大家詳細(xì)介紹了java精品項(xiàng)目-瑞吉外賣(mài)訂餐系統(tǒng),此項(xiàng)目過(guò)大,分為多章獨(dú)立講解,本篇內(nèi)容為后端登錄功能的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05