设为首页 加入收藏

TOP

短信发送+实现高并发下高可用(HTTP连接池+异步)(二)
2023-09-09 10:25:50 】 浏览:60
Tags:高并发 高可用 HTTP 连接池 异步
icloudapi.com/sms/send?mobile=%s&templateId=%s&value=%s"; /** * 发送验证码 */ public void send(String to,String template,String value){ String url = String.format(URL_TEMPLATE, to, template, value); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.set("Authorization","APPCODE "+smsConfig.getAppCode()); HttpEntity<Object> entity = new HttpEntity<>(httpHeaders); ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, entity, String.class); if(responseEntity.getStatusCode().is2xxSuccessful()){ log.info("验证码发送成功"); }else { log.error("发送短信验证码失败:{}",responseEntity.getBody()); } } }

SmsConfig

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@ConfigurationProperties(prefix = "sms")
@Configuration
@Data
public class SmsConfig {
    /**
     * 短信验证码发送 appcode
     */
    private String appCode;

    /**
     * 短信内容模板
     */
    private String templateId;

}

RestTemplateConfig(使用HTTP协议请求)

import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory httpRequestFactory){
        return new RestTemplate(httpRequestFactory);
    }

    @Bean
    public ClientHttpRequestFactory httpRequestFactory(){
        return new HttpComponentsClientHttpRequestFactory();
    }
    @Bean
    public HttpClient httpClient(){
        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                .register("https", SSLConnectionSocketFactory.getSocketFactory())
                .build();

        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);


        //设置连接池最大是500个连接
        connectionManager.setMaxTotal(500);
        //MaxPerRoute是对maxtotal的细分,每个主机的并发最大是300,route是指域名
        connectionManager.setDefaultMaxPerRoute(300);


        RequestConfig requestConfig = RequestConfig.custom()
                //返回数据的超时时间
                .setSocketTimeout(20000)
                //连接上服务器的超时时间
                .setConnectTimeout(10000)
                //从连接池中获取连接的超时时间
                .setConnectionRequestTimeout(1000)
                .build();


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

}

测试

impor
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇装饰器模式:让你的对象变得更强大 下一篇Spring Boot 宣布移除 run 命令,..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目