1. 程式人生 > >MQTT+ActiveMQ實現訊息推送(伺服器端java實現)

MQTT+ActiveMQ實現訊息推送(伺服器端java實現)

上一篇文章已經介紹了mqtt+activemq實現訊息推送移動端的實現,也介紹了利用自帶的web console進行訊息釋出的方法。但是在具體的專案應用中,當我們將需要將該訊息推送模組嵌入到一個後臺管理系統當中,我們就需要在web端來訪問activeMQ來進行訊息的釋出。

同樣用的是org.eclipse.paho.client.mqttv3包,相信看過上一篇文章已經有了一定的瞭解,直接來看程式碼

@Controller
public class HelloController{

     private static final String HOST = "tcp://127.0.0.1:1883"
; private String TOPIC; private String MESSAGE; private static final String clientid = "server"; private MqttClient client; private MqttTopic topic; private String userName = "admin"; private String passWord = "password"; private MqttMessage message; @RequestMapping
(value="/redirect") public String doPublish(HttpServletRequest request) throws MqttException { //獲取前臺傳過來的兩個引數 TOPIC=request.getParameter("topic"); MESSAGE=request.getParameter("message"); //new mqttClient //MemoryPersistence設定clientid的儲存形式,預設為以記憶體儲存 client = new MqttClient(HOST, clientid, new
MemoryPersistence()); //與activeMQ連線的方法 connect(); //new mqttMessage message = new MqttMessage(); //設定服務質量 message.setQos(2); //設定是否在伺服器中儲存訊息體 message.setRetained(true); //設定訊息的內容 message.setPayload(MESSAGE.getBytes()); //釋出 publish(topic, message); System.out.println("已傳送"); return "result"; } private void connect() { // new mqttConnection 用來設定一些連線的屬性 MqttConnectOptions options = new MqttConnectOptions(); // 設定是否清空session,這裡如果設定為false表示伺服器會保留客戶端的連線記錄,這裡設定為true表示每次連線到伺服器都以新的身份連線 // 換而言之,設定為false時可以客戶端可以接受離線訊息 options.setCleanSession(false); // 設定連線的使用者名稱和密碼 options.setUserName(userName); options.setPassword(passWord.toCharArray()); // 設定超時時間 options.setConnectionTimeout(10); // 設定會話心跳時間 options.setKeepAliveInterval(20); try { // 設定回撥類 client.setCallback(new PushCallback()); // 連線 client.connect(options); // 獲取activeMQ上名為TOPIC的topic topic = client.getTopic(TOPIC); } catch (Exception e) { e.printStackTrace(); } } public void publish(MqttTopic topic, MqttMessage message) throws MqttPersistenceException, MqttException { // 釋出的方法 // new mqttDeliveryToken MqttDeliveryToken token = topic.publish(message); // 釋出 token.waitForCompletion(); System.out.println("message is published completely! " + token.isComplete()); } }

簡陋的效果圖

這裡寫圖片描述

這裡寫圖片描述