發送手機驗證碼在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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章