WebSocket 雙向通信,RabbitMQ發消息到瀏覽器

首先RabbitMQ安裝STOMP 插件

我們進入rabbitmq容器,執行下面的命令開啓stomp插件

rabbitmq-plugins enable rabbitmq_web_stomp rabbitmq_web_stomp_examples

將當前的容器提交爲新的鏡像

docker commit 3989ec68bf3c rabbitmq:stomp

 

停止當前的容器

docker stop 3989ec68bf3c

 

根據新的鏡像創建同期

docker run -di --name=changgou_rabbitmq -p 5671:5617 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 -p 15670:15670 -p 15674:15674 rabbitmq:stomp

 

注意這裏插件端口是15674

然後寫前端js

1.下載stomp.min.js(RabbitMQ官網有提供)
2.js代碼

<html>
<head>
    <title>RabbitMQ Web STOMP Examples : Echo Server</title>
    <meta charset="UTF-8">
    <script src="js/stomp.min.js"></script>
</head>
<script>
    var client = Stomp.client('ws://localhost:15674/ws');
    var on_connect = function(x) {
//paynotify是交換機,/exchange是固定寫法
        id = client.subscribe("/exchange/paynotify", function(d) {
            alert(d.body);
        });
    };
    var on_error =  function() {
        console.log('error');
    };
//賬號  密碼  接到消息執行的方法   異常執行方法   路由
    client.connect('guest', 'guest', on_connect, on_error, '/');
</script>
</body>
</html>

 

服務端發消息

 @Autowired
    private StringRedisTemplate redisTemplate;
public void run(){
//發一個123的消息
rabbitTemplate.convertAndSend(paynotify,"","123");
}

這樣瀏覽器就可以接受服務端的消息了

擴展

destination 在 RabbitMQ Web STOM 中進行了相關的定義,根據使用場景的不同,主要有以下 4 種:

  • 1./exchange/<exchangeName>

對於 SUBCRIBE frame,destination 一般爲/exchange/<exchangeName>/[/pattern] 的形式。該 destination 會創建一個唯一的、自動刪除的、名爲<exchangeName>的 queue,並根據 pattern 將該 queue 綁定到所給的 exchange,實現對該隊列的消息訂閱。

對於 SEND frame,destination 一般爲/exchange/<exchangeName>/[/routingKey] 的形式。這種情況下消息就會被髮送到定義的 exchange 中,並且指定了 routingKey。

  • 2./queue/<queueName>
    對於 SUBCRIBE frame,destination 會定義<queueName>的共享 queue,並且實現對該隊列的消息訂閱。
    對於 SEND frame,destination 只會在第一次發送消息的時候會定義<queueName>的共享 queue。該消息會被髮送到默認的 exchange 中,routingKey 即爲<queueName>。
  • 3./amq/queue/<queueName>
    這種情況下無論是 SUBCRIBE frame 還是 SEND frame 都不會產生 queue。但如果該 queue 不存在,SUBCRIBE frame 會報錯。
    對於 SUBCRIBE frame,destination 會實現對隊列<queueName>的消息訂閱。
    對於 SEND frame,消息會通過默認的 exhcange 直接被髮送到隊列<queueName>中。
  • 4./topic/<topicName>
    對於 SUBCRIBE frame,destination 創建出自動刪除的、非持久的 queue 並根據 routingkey 爲<topicName>綁定到 amq.topic exchange 上,同時實現對該 queue 的訂閱。
    對於 SEND frame,消息會被髮送到 amq.topic exchange 中,routingKey 爲<topicName>。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章