极光短信推送

package org.rabbit.consumer.jpush.sms;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.rabbit.common.delay.sms.Payload;
import org.rabbit.common.delay.sms.Sms;
import org.rabbit.consumer.spring.SpringContextUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jsms.api.JSMSClient;
import cn.jsms.api.common.model.BatchSMSPayload;
import cn.jsms.api.common.model.BatchSMSResult;
import cn.jsms.api.common.model.RecipientPayload;
import cn.jsms.api.common.model.RecipientPayload.Builder;

public class SMSClient {
	private static final Logger logger = LoggerFactory.getLogger(SMSClient.class);
	static ExecutorService pool = Executors.newFixedThreadPool(20);
	private static String appKey;
	private static String masterSecret;

	private static JSMSClient client;

	static {
		JSMSProperties jsmsProperties = SpringContextUtils.getBean(JSMSProperties.class);
		appKey = jsmsProperties.getAppKey();
		masterSecret = jsmsProperties.getMasterSecret();
		client = new JSMSClient(masterSecret, appKey);
	}

	public static void send(final Sms sms) {
		pool.execute(new Runnable() {
			@Override
			public void run() {
				List<RecipientPayload> list = new ArrayList<RecipientPayload>();
				for (Payload payload : sms.getPayloads()) {
					Builder builder = new RecipientPayload.Builder().setMobile(payload.getNumber());
					for (Map.Entry<String, String> entry : payload.getParam().entrySet()) {
						builder.addTempPara(entry.getKey(), entry.getValue());
					}
					list.add(builder.build());
				}
				RecipientPayload[] recipientPayloads = new RecipientPayload[list.size()];
				BatchSMSPayload smsPayload = BatchSMSPayload.newBuilder().setTempId(sms.getTempId())
						.setRecipients(list.toArray(recipientPayloads)).build();
				try {
					BatchSMSResult result = client.sendBatchTemplateSMS(smsPayload);
					if (logger.isInfoEnabled()) {
						logger.info("Jpush sms push result :{}" + result);
					}
				} catch (APIConnectionException e) {
					if (logger.isErrorEnabled()) {
						logger.error("Connection error. Should retry later. ", e);
					}
				} catch (APIRequestException e) {
					if (logger.isErrorEnabled()) {
						logger.error("Error response from JPush server. Should review and fix it. ", e);
					}
				}
			}
		});
	}
}
package org.rabbit.common.delay.sms;

import java.io.Serializable;

import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

import org.service.core.entity.BaseEntity;

public class Sms extends BaseEntity implements Serializable {
	private static final long serialVersionUID = 1860751506802678210L;
	@NotNull(message = "{sms.payloads.not.null.valid}", groups = { Insert.class })
	@Valid
	private Payload[] payloads;
	@NotNull(message = "{sms.tempId.not.null.valid}", groups = { Insert.class })
	private Integer tempId;
	@NotNull(message = "{sms.time.not.null.valid}", groups = { Insert.class })
	@Min(value = 0, message = "{sms.time.min.valid}", groups = { Insert.class })
	private Long time;

	public Payload[] getPayloads() {
		return payloads;
	}

	public void setPayloads(Payload[] payloads) {
		this.payloads = payloads;
	}

	public Integer getTempId() {
		return tempId;
	}

	public void setTempId(Integer tempId) {
		this.tempId = tempId;
	}

	public Long getTime() {
		return time;
	}

	public void setTime(Long time) {
		this.time = time;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

}
package org.rabbit.consumer.jpush.sms;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class JSMSProperties {
	@Value("${jpush.sms.appKey}")
	private String appKey;
	@Value("${jpush.sms.masterSecret}")
	private String masterSecret;

	public String getAppKey() {
		return appKey;
	}

	public void setAppKey(String appKey) {
		this.appKey = appKey;
	}

	public String getMasterSecret() {
		return masterSecret;
	}

	public void setMasterSecret(String masterSecret) {
		this.masterSecret = masterSecret;
	}

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值