java如何使用多线程技术,去访问一个受限制的接口(1)

场景1:微信发送推文的时候,我公司是有百万级别的数量用户关注,所以这边是需要进行多次操作,停顿才能把推文发送到不同的用户上(微信关注公共号上都会被持久化记录)

场景 2: 工作中,遇到了发送微信推送公众号的功能,但是由于http的限制,如果频繁的访问相关的微信接口那么会造成每次请求过多导致失败,所以我们不能每一次使用单个线程去调用微信受限制的路由地址**

解决思路(场景1): 优先使用多线程,单个线程可以进行业务方法(采用 extend thread的形式 )

解决思路(场景2): 由于调用微信接口会导致受限制失败,我们可以使用连接池的形式,确保了每次连接的最大连接数.而不会产生新的实例,导致微信接口检测,请求过多而失效问题(使用spring的restTemplate单例连接池,进行放入多个http相关的信息,一起发送到微信路由地址)

配置多线程实例 :

public class Test3 extends Thread {

    private volatile String smSpToken;
    private List<String> openids;
    private int startnum;
    private RestTemplate bean = SpringContextUtil.getBean(RestTemplate.class);

    private WeChatTokenService weChatTokenService = new WeChatTokenService();

    public Test3(List<String> openid, String smSpToken, int startnum) {
        this.openids = openid;
        this.smSpToken = smSpToken;
        this.startnum = startnum;
    }

    public Test3() {
    }


    @Override
    public void run() {
        sendMpText3(smSpToken, openids);
    }

线程进行创建的类

for (int i = 0; i < allUser.size(); i++) {
            //需要跳过的数据
            if(i<=4613560){
                continue;
            }
            String s = allUser.get(i);
            //容器数组需要发送的
            objects.add(s);
            if(objects.size()==850||i==(allUser.size()-1)){
                try {
                    sleepnum++;
                    System.out.println("睡眠次数"+sleepnum+" "+i+"次数组发送"+objects.get(0)+" "+objects.size());
                    //多线程开始
                    new Test3(objects,smSpToken,i).start();
                } catch (Exception e) {
                    e.printStackTrace();
                }finally{
                    //数组不可以clear 必须新建 当做容器 容器建议小点 出现问题可舍弃
                    objects=new ArrayList<>();
                }
            }

因为调用微信接口的时候都是需要使用token,根据token失效的时间之前,进行使用该接口的时间段(所以我们先确定好每一次发送的多线程时长,如果没有考虑失效时间,可能会导致,发送的数据卡死,或者是发送失败,公众号发送请求在多线程环境下都是飞快的,所以我们使用多线程的时候,需要考虑时间问题,最好是进行记录)

元旦放假 待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值