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

在项目上经常遇到发送手机验证码的需求,一般通过产生验证码发送到消息中间件中,异步的去处理发送需求,由于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服务器了,也可以在控制台查看
这里写图片描述

发布了48 篇原创文章 · 获赞 15 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章