使用ActiveMQ、Stomp、SockJS實現實時在線聊天
ActiveMQ : 強大的開源即時通訊和集成模式的服務器。在本項目中充當消息代理服務器,stomp協議服務端。
安裝:在官網下載,直接解壓縮,運行cmd,進入bin目錄執行 activemq.bat start;linux中執行 ./activemq start。
Stomp:stomp是一個文本定向通訊協議。本項目使用stomp協議基於JavaScript的客戶端庫 stomp.js
安裝:下載stomp.js,引入項目中
SockJS:SockJS是WebSocket的JavaScript庫,是webSocket的實現
安裝:下載SockJS.js,引入項目中
第一步 : 創建JavaWeb項目,配置Maven依賴,依賴如下
1 <properties> 2 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 3 <spring.version>4.2.4.RELEASE</spring.version> 4 </properties> 5 6 <dependencies> 7 <dependency> 8 <groupId>org.springframework</groupId> 9 <artifactId>spring-webmvc</artifactId> 10 <version>${spring.version}</version> 11 </dependency> 12 13 <dependency> 14 <groupId>org.springframework</groupId> 15 <artifactId>spring-websocket</artifactId> 16 <version>${spring.version}</version> 17 </dependency> 18 19 <dependency> 20 <groupId>org.springframework</groupId> 21 <artifactId>spring-messaging</artifactId> 22 <version>${spring.version}</version> 23 </dependency> 24 25 <dependency> 26 <groupId>io.projectreactor</groupId> 27 <artifactId>reactor-net</artifactId> 28 <version>2.0.7.RELEASE</version> 29 </dependency> 30 31 <dependency> 32 <groupId>io.netty</groupId> 33 <artifactId>netty-all</artifactId> 34 <version>4.0.33.Final</version> 35 </dependency> 36 37 38 <dependency> 39 <groupId>com.fasterxml.jackson.core</groupId> 40 <artifactId>jackson-databind</artifactId> 41 <version>2.6.4</version> 42 </dependency> 43 44 <dependency> 45 <groupId>javax.servlet</groupId> 46 <artifactId>javax.servlet-api</artifactId> 47 <version>3.1.0</version> 48 <scope>provided</scope> 49 </dependency> 50 51 52 </dependencies>
第二步:配置消息終端,在SpringMVC配置文件中加入如下配置
<websocket:message-broker application-destination-prefix="/app"> <websocket:stomp-endpoint path="/stomp"> <websocket:sockjs /> </websocket:stomp-endpoint> <websocket:stomp-broker-relay prefix="/topic,/queue" relay-host="localhost" relay-port="61613" heartbeat-receive-interval="20000" heartbeat-send-interval="20000" /> </websocket:message-broker>
第三步:編寫消息處理代碼
package com.its.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Controller; @Controller public class MessageController { @Autowired private SimpMessagingTemplate template; @MessageMapping("channel") public String send(String message){ String text = message; template.convertAndSend("/topic/pinkzhuang",text); return text; } }
第四步:編寫頁面消息收發邏輯,頁面要引入stomp.js和SockJS.js
function connect(){ var socket = new SockJS("http://localhost:8080/ActivityMQStomp/stomp"); stompClient = Stomp.over(socket); stompClient.connect({},function(frame){ setConnected(true); console.log("Connected: " + frame); stompClient.subscribe("/topic/pinkzhuang",function(greeting){ showGreeting(greeting.body); }); }); } function disconnect(){ stompClient.disconnect(); } function sendMessage(message){ stompClient.send("/app/vince",{},name); }
第五步:管理ActiveMQ
可登錄localhost:8161進入activeMQ的管理頁面,初始賬號密碼均為admin,可以手動在管理頁面發送消息 
The End. (原文)
