发送手机验证码在activeMQ中简单应用

来源:互联网 发布:怎么注册爱淘宝 编辑:程序博客网 时间:2024/05/18 03:38

在项目上经常遇到发送手机验证码的需求,一般通过产生验证码发送到消息中间件中,异步的去处理发送需求,由于ActiveMQ支持RESTful API,所以可以通过HTTP请求的方法发送消息到目的地。
注意点:
1. 必须是POST请求
2. 需要进行认证,在Header中添加Authorization
3. 必须指定目的地及目的地类型(本案例是queue)
4. 发送的内容使用body指定

代码案例如下:

public class SendMobileMsg {    public static final String jmsserverurl = "http://127.0.0.1:8161/api/message?destination=queue://";    public static final String jmsCheckCodeQueue = "FirstQueue1";    public String sendMobileMsg(String sendTo) {        MsgFormat msgft = new MsgFormat();        String sixString = this.getCheckCode();        String msgTemplate = "验证码为%s,将在10分钟后失效,请勿将此信息泄露给他人以免给您带来损失.";        msgTemplate = String.format(msgTemplate, sixString);        msgft.setSendTo(sendTo);        msgft.setSignature(Encodes.urlEncode("XXXXX"));        msgft.setContent(Encodes.urlEncode(msgTemplate));        String content = JSON.toJSONString(msgft);        try {            JmsOperate.sendMessage(jmsserverurl, content, jmsCheckCodeQueue);        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return sixString;    }    /*     * 生成6位数字验证码     */    private String getCheckCode() {        // 元素        int[] array = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };        // 随机对象        Random rand = new Random();        // 循环产生        for (int i = 10; i > 1; i--) {            int index = rand.nextInt(i);            int tmp = array[index];            array[index] = array[i - 1];            array[i - 1] = tmp;        }        // 拼接结果为字符串        int result = 0;        for (int i = 0; i < 6; i++)            result = result * 10 + array[i];        String sixString = Integer.toString(result);        // 有可能出现5位数,前面加0补全        if (sixString.length() == 5) {            sixString = "0" + sixString;        }        return sixString;    }    public static void main(String[] args) {        SendMobileMsg sendMobileMsg = new SendMobileMsg();        sendMobileMsg.sendMobileMsg("157****4595");    }}

发送到activeMQ服务器代码:

public class JmsOperate {    private static Logger logger = LoggerFactory.getLogger(JmsOperate.class);    public static void sendMessage(String jmsserverurl, String content, String destination)            throws UnsupportedEncodingException, IOException {        HttpClient httpClient = new HttpClient();        UsernamePasswordCredentials creds = new UsernamePasswordCredentials("admin", "admin");        httpClient.getState().setCredentials(AuthScope.ANY, creds);        List<Header> headers = new ArrayList<Header>();        headers.add(new Header("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"));        httpClient.getHostConfiguration().getParams().setParameter("http.default-headers", headers);        PostMethod method = new PostMethod(jmsserverurl + destination);        method.addParameter("body", content);        method.setDoAuthentication(true);        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));        try {            int statusCode = httpClient.executeMethod(method);            if (statusCode != HttpStatus.SC_OK) {                logger.info("Method failed code=" + statusCode + ": " + method.getStatusLine());            } else {                logger.info(new String(method.getResponseBody(), "utf-8"));            }        } finally {            method.releaseConnection();        }    }}

需要在本地启动activeMQ服务器,写个消费者接收下消息结果如下:
这里写图片描述
证明消息是成功发送到activeMQ服务器了,也可以在控制台查看
这里写图片描述

原创粉丝点击