ActiveMQ、Stomp、SockJS入门级应用
使用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); }
第五步:可登录localhost:8161进入activeMQ的管理页面,初始账号密码均为admin,可以手动在管理页面发送消息
The End