基于RabbitMQ的消息推送
H5定义了WebSocket,能实现浏览器和服务器之间全双工通信,服务器可以推送数据给客户端浏览器。
针对WebSocket通信,RabbitMQ需要提供Web STOMP插件,这样浏览器就可以使用RabbitMQ。
前端需要引入一个stomp.js文件,可到GitHub上下载该文件,https://github.com/jmesnil/stomp-websocket,js文件地址:https://github.com/jmesnil/stomp-websocket/blob/master/lib/stomp.js
1.启用Web STOMP插件
进入RabbitMQ安装目录,在sbin目录下执行以下命令:rabbitmq-plugins enable rabbitmq_management rabbitmq_web_stomp rabbitmq_stomp rabbitmq_web_stomp_examples
2.发布消息
public class StompProducer {
public static void main(String[] args) throws IOException, TimeoutException {
// 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername("guest");
factory.setPassword("guest");
// 设置RabbitMQ地址
factory.setHost("localhost");
factory.setVirtualHost("/");
// 建立到代理服务器的连接
Connection conn = factory.newConnection();
// 创建信道
Channel channel = conn.createChannel();
String exchangeName = "exchange-stomp";
// 声明Topic类型交换器
channel.exchangeDeclare(exchangeName, "topic");
String routingKey = "shopping.discount";
String message = "<a href=\"https://www.baidu.com\" target=\"_blank\">微醺好时光,美酒3件7折,抢购猛戳</a>";
// 发布消息
channel.basicPublish(exchangeName, routingKey, null, message.getBytes());
channel.close();
conn.close();
}
}
3.Web页面接收消息
<html>
<head>
<meta charset="UTF-8">
<title>rabbitMQ 消息提醒示例</title>
<link rel="stylesheet" type="text/css" href="default.css">
<link rel="stylesheet" type="text/css" href="jquery.notify.css">
<script type="text/javascript" src="stomp.js"></script>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="jquery.notify.js"></script>
</head>
<script type="text/javascript">
$(function () {
$.notifySetup({sound: 'jquery.notify.wav'});
//创建客户端
var client = Stomp.client("ws://localhost:15674/ws");
//定义连接成功回调函数
var onConnect = function () {
//订阅商品折扣主题的消息
client.subscribe("/exchange/exchange-stomp/shopping.discount", function (message) {
//弹出业务消息提醒,并停留10秒
$("<p>" + message.body + "</p>").notify({stay: 10000});
});
};
//定义错误时回调函数
var onError = function (msg) {
$("<p>服务器错误:" + msg + "</p>").notify("error");
};
//连接服务器
client.connect("guest", "guest", onConnect, onError);
client.heartbeat.incoming = 5000;
client.heartbeat.outgoing = 5000;
});
</script>
<body>
</body>
</html>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。