小程序通过stomp操作activemq

最近这一阵子一直在研究activemq的使用,发现也是支持stomp协议的,之前在研究小程序websocket的时候,发现我们可以使用stomp.js配合小程序的websocket也是可以和服务器实现stomp协议通讯,那么我们能不能使用小程序通过stomp.js来操作activemq呢?答案当然是可以的。下面我们就介绍一下如何让微信小程序通过stomp协议来操作activemq。

1,新建小程序项目

2,下载stomp.js,下载完成之后,我们把它发到我们小程序utils目录下。

小程序通过stomp操作activemq_第1张图片

      3、在app.js的onLaunch方法添加组后添加下面的代码。

    //socket是否连接
    var socketConnected = false;
    //待发送的消息队列
    var messageQueue = [];
    //是否断线重连
    var reconnect = true;

    //发送消息
    function sendSocketMessage(msg) {
      // console.log(msg);
      // 如果socket已连接则发送消息
      if (socketConnected) {
        wx.sendSocketMessage({
          data: msg
        })
      } else {
        // socket没有连接将消息放入队列中
        messageQueue.push(msg);
      }
    }

    // 关闭连接
    function close() {
      if (socketConnected) {
        wx.closeSocket()
      }
    }

    // 定义一个符合WebSocket定义的对象
    var ws = {
      send: sendSocketMessage,
      close: close
    }

    // 创建一个 WebSocket 连接
    function connect() {
      wx.connectSocket({
        url: 'ws://127.0.0.1:61614/stomp',  // activemq的ws端口
        protocols: ['stomp']   //指明协议类型,这里很重要,否则客户端会因为报文头缺少协议信息拒绝连接
      })
    }
    
    connect();

    // 监听 WebSocket 连接打开事件
    wx.onSocketOpen(function (res) {
      console.log("WebSocket 连接成功")
      socketConnected = true;
      ws.onopen();
      // 连接成功后,将队列中的消息发送出去
      let queueLength = messageQueue.length
      for (let i = 0; i < queueLength; i++) {
        const messageQueueElement = messageQueue.shift();
        wx.sendSocketMessage({
          data: messageQueueElement
        })
      }
    })

    // 监听 WebSocket 接受到服务器的消息事件
    wx.onSocketMessage(function (res) {
      ws.onmessage(res);
    })

    // 监听 WebSocket 错误事件
    wx.onSocketError(function (res) {
      console.log("WebSocket 错误事件")
    })

    // 监听 WebSocket 连接关闭事件
    wx.onSocketClose(function (res) {
      console.log("WebSocket 连接关闭")
      socketConnected = false;
      // 断线重连
      if (reconnect) {
        connect();
      }
    })

    var Stomp = require('/utils/stomp.js').Stomp;

    /**
     * 定期发送心跳或检测服务器心跳
     *  The heart-beating is using window.setInterval() to regularly send heart-beats and/or check         server heart-beats.
     *  可看stomp.js的源码(195,207,489行),由于小程序没有window对象,所以我们要调用小程序的定时器api实现
     */
    Stomp.setInterval = function (interval, f) {
      return setInterval(f, interval);
    };
    // 结束定时器的循环调用
    Stomp.clearInterval = function (id) {
      return clearInterval(id);
    };

    var stompClient = Stomp.over(ws);
    stompClient.connect("guest", "guest", function () {
      console.log("************************")
      stompClient.subscribe("/queue/tttt", function (message) { //订阅一条消息
        console.log(message.body);
      });
    });
    stompClient.send("/queue/test",{},"111111")  // 发布一条消息到activemq

 上面的代码,我们通过小程序的websocket接口定义了符合ws定义的对象,然后通过stomp.js的over方法创建了一个stomp客户端,上面的注释有些细节需要注意一下。

     4.运行小程序,我们登录activemq管理界面,我们可以看到,我们发布和订阅的信息已经可以看到了。

小程序通过stomp操作activemq_第2张图片

       5.我们通过管理界面自带的send功能,给我们订阅的/queue/test发布一条消息。

小程序通过stomp操作activemq_第3张图片

回到小程序,我们可以看到小程序收到了我们发布的消息。

小程序通过stomp操作activemq_第4张图片

写完收工。

你可能感兴趣的:(小程序通过stomp操作activemq)