RestTemplate远程接口调度

远程接口调用

获取nacos配置远程接口url

@Configuration
@Data
public class CrmConfig {


    // 获取nacos配置文件中的地址
    @Value("${crm.url}")
    private String beforeUrl;

}

创建请求模板类,RestTemplate

@Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate(httpRequestFactory());
        List<HttpMessageConverter<?>> httpMessageConverters = restTemplate.getMessageConverters();
        httpMessageConverters.stream().forEach(httpMessageConverter -> {
            if (httpMessageConverter instanceof StringHttpMessageConverter) {
                StringHttpMessageConverter messageConverter = (StringHttpMessageConverter) httpMessageConverter;
                messageConverter.setDefaultCharset(Charset.forName("UTF-8"));
            }
        });
        return restTemplate ;
    }



    /**
     * @return
     */
    @Bean
    public ClientHttpRequestFactory httpRequestFactory() {
        return new HttpComponentsClientHttpRequestFactory(httpClient());
    }

    /**
     * http链接池
     * 服务器返回数据(response)的时间,超过该时间抛出read timeout
     *
     * @return
     */
    @Bean
    public HttpClient httpClient() {
        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                .register("https", SSLConnectionSocketFactory.getSocketFactory())
                .build();
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
        //设置整个连接池最大连接数 根据自己的场景决定
        connectionManager.setMaxTotal(200);
        //路由是对maxTotal的细分
        connectionManager.setDefaultMaxPerRoute(100);
        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(10000) //服务器返回数据(response)的时间,超过该时间抛出read timeout
                .setConnectTimeout(5000)//连接上服务器(握手成功)的时间,超出该时间抛出connect timeout
                .setConnectionRequestTimeout(5000)//从连接池中获取连接的超时时间,超过该时间未拿到可用连接,会抛出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
                .build();

        return HttpClientBuilder.create()
                .setDefaultRequestConfig(requestConfig)
                .setConnectionManager(connectionManager)
                .build();
    }

工具类

@Autowired
    private RestTemplate restTemplate;

    @Autowired
    private CrmConfig crmConfig;
    /**
     * 封装POST方法
     *
     * @param object 参数对象
     * @param crmToken crm系统的token值
     * @param afterUrl 除域名外的地址
     * @return 结果
     */
    public JSONObject httpPost(Object object,String crmToken,String afterUrl){
        // 将参数转成JSONObject对象
        JSONObject params = new JSONObject();
        params.put("data",object);
        // 添加请求头信息
        HttpHeaders headers = new HttpHeaders();
        headers.add("contentType", "application/json");
        headers.add("Authorization", crmToken);
        // 将请求头和参数添加request
        HttpEntity<JSONObject> requestEntity = new HttpEntity<JSONObject>(params,headers);
        // 获取响应信息,包含响应状态、响应头、响应内容
        ResponseEntity<String> entity = restTemplate.exchange(crmConfig.getBeforeUrl()+afterUrl , HttpMethod.POST, requestEntity, String.class);
        // 接受的body里的返回值变成JSONObject对象
        JSONObject data = JSON.parseObject(entity.getBody());
        return data;
    }
    /**
     * 封装GET方法
     *
     * @param params 参数 例子:"id=1&name=张三"
     * @param crmToken crm系统的token值
     * @param afterUrl 除域名外的地址
     * @return 结果
     */
    public JSONObject httpGet(String params,String crmToken,String afterUrl){
        // 添加请求头信息
        HttpHeaders headers = new HttpHeaders();
        headers.add("contentType", "application/json");
        headers.add("Authorization", crmToken);
        // 将请求头和参数添加request
        HttpEntity<JSONObject> requestEntity = new HttpEntity<JSONObject>(headers);
        // 获取响应信息,包含响应状态、响应头、响应内容
        ResponseEntity<String> entity = restTemplate.exchange(crmConfig.getBeforeUrl()+afterUrl+"?"+params , HttpMethod.GET, requestEntity, String.class);
        // 接受的body里的返回值变成JSONObject对象
        JSONObject data = JSON.parseObject(entity.getBody());
        return data;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值