使用feign配置网络ip代理

使用feign配置网络ip代理

目录

feign配置网络ip代理

问题描述

1.依赖

2.feignclinet接口

3.Config

4.yml

调用指定ip的feign接口

feign配置网络ip代理 问题描述

测试环境将需要访问的外网地址加入了白名单,但是docker和宿主机网络不一样(试过挂载宿主机网络也不行,但是挂载宿主机网络会打乱原有的网络环境),所以造成了在宿主机上面可以访问该地址,但是docker里面是访问不到外网的地址,所使用feign的时候加上ip代理,代理宿主机ip来对外网地址进行访问!

为什么不直接对docker设置网络代理,测试环境里面基本都是内部服务调用,如果设置则会导致其网络不一致,并且开发测试正式环境较为复杂,如果不需要的时候直接在配置文件配置为null就行

1.依赖 <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相关依赖 feign-okhttp主要用来做网络代理,依赖需要自行百度 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远程调用的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}&lttd={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代理设置  * @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 //需要访问的地址 host 如果多个 用逗号分割

不使用IP代理

feign:  okhttp:   enabled: true proxy:  host: null  port: null  domains: null 调用指定ip的feign接口 @FeignClient(value = “center-educational-server”,url=“http://127.0.0.1:10005”)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易知道(ezd.cc)。

推荐阅读

    学习写字楼新选择6000元主流配置

    学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办公和娱乐平台,充分考虑办公室的办公需求和娱乐需求,以约6000元的预算和cost-e

    酷睿I7 配置

    酷睿I7 配置,配置,玩家国度啦华硕 Rampage II Extreme(3800元)如果米不够,也可以把Extreme改为Gene,不过是小板内存推荐金士顿6G DDR3 2000骇

    提高3A四核羿龙II游戏配置的性能

    提高3A四核羿龙II游戏配置的性能,,以节能环保为主题的IT产业,目前3A低端平台处理器、主板芯片组、独立开发卡性能突出,特别是在与AMD的处理

    opporeno8参数配置及价格

    opporeno8参数配置及价格,面部,亿元,Oppo的荣誉2020年1月4日,接近屏幕关闭传感器是否支持双卡:支持oppor11splus什么时候上市的Oppo R11S P

    查看配置:酷睿i3530集展示办公平台

    查看配置:酷睿i3530集展示办公平台,,由于时间和精力的关系,我们不可能对所有的配置进行评论,希望我们能理解,我希望我们的评论能在那些需要帮

    3500元超额值学生娱乐结构的优化配置

    3500元超额值学生娱乐结构的优化配置,,作为一个DIY的主流用户领域的学生,每个用户51学生攒机的高峰。因为学生用户没有稳定的收入来源,攒机

    1394连接是什么1394网络适配器知识

    1394连接是什么1394网络适配器知识,,今天有网友在QQ群中问了这样一个问题:1394连接是什么?。由于笔者对1394连接不清楚,通过百度搜索与谷歌