基于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>

丁俊能
1 声望0 粉丝

引用和评论

0 条评论