要求:
tomcat7以上
前端html5
首先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>。