前端与rabbitmq通信

embedded/2024/10/18 14:13:24/

本篇如何讲述前端通过stomp.js实现向rabbitmq推送和订阅消息。

开发前准备

rabbitmq_3">rabbitmq

在实现通信前,先需要开启rabbitmqweb stomp Plugin。这个在rabbitmq官网也有详细的说明点这里。
rabbitmq服务器上输入如下命令即可开启:
rabbitmq-plugins enable rabbitmq_web_stomp
开启该插件后,rabbitmq会开放15674端口,用于与前端进行通信。

我们也可以开启rabbitmq提供的示例进行测试
rabbitmq-plugins enable rabbitmq_web_stomp_examples
开启后,我们可以通过访问http://rabbitmq服务器地址:15670/ ,使用两个示例。

前端安装stomp

下载stomp.js

如果使用web框架则执行:npm install stompjs

前端实现

<!DOCTYPE html>
<html><head><script src="https://code.jquery.com/jquery-3.4.1.min.js"></script><script src="stomp.js"></script><style>.box {width: 440px;float: left;margin: 0 20px 0 20px;}.box div, .box input {border: 1px solid;-moz-border-radius: 4px;border-radius: 4px;width: 100%;padding: 5px;margin: 3px 0 10px 0;}.box div {border-color: grey;height: 300px;overflow: auto;}div code {display: block;}#first div code {-moz-border-radius: 2px;border-radius: 2px;border: 1px solid #eee;margin-bottom: 5px;}#second div {font-size: 0.8em;}</style><title>RabbitMQ Web STOMP Examples : Echo Server</title><link href="main.css" rel="stylesheet" type="text/css"/>
</head><body lang="en"><h1><a href="index.html">RabbitMQ Web STOMP Examples</a> > Echo Server</h1><div id="first" class="box"><h2>Received</h2><div></div><form><input autocomplete="off" value="Type here..."></input></form></div><div id="second" class="box"><h2>Logs</h2><div></div></div><script>var has_had_focus = false;var pipe = function(el_name, send) {var div  = $(el_name + ' div');var inp  = $(el_name + ' input');var form = $(el_name + ' form');var print = function(m, p) {p = (p === undefined) ? '' : JSON.stringify(p);div.append($("<code>").text(m + ' ' + p));div.scrollTop(div.scrollTop() + 10000);};if (send) {form.submit(function() {send(inp.val());inp.val('');return false;});}return print;};// Stomp.js boilerplatevar client = Stomp.client('ws://192.168.16.117:15674/ws');client.debug = pipe('#second');var channelName = "/exchange/test.front.exchange";var print_first = pipe('#first', function(data) {client.send(channelName , {"content-type":"text/plain"}, data);});var on_connect = function(x) {id = client.subscribe(channelName , function(d) {print_first(d.body);});};var on_error =  function() {console.log('error');};client.connect('admin', 'admin', on_connect, on_error, '/');$('#first input').focus(function() {if (!has_had_focus) {has_had_focus = true;$(this).val("");}});</script>
</body></html>			 

其中我们讲讲channelName 的命名:
/exchange/test.front.exchange
/exchange: 代表是发送到rabbitmq的交换机中。
也可以使用其他的:

  • /queue: 代表是发送到队列中
  • /topic: 代表是发送到topic模式的交换机,交换机名称通常是"amq.topic";后面再指定的url则被认为是routeKey.

  • 不可以乱写的。否则会报错。

/test.front.exchange: 则会被识别为交换机名称。如果后面再加入/xxx,则xxx则会被识别为routeKey。

总结

我这里只是使用了一种方式,据我了解,还存在amqp、mqtt等消息协议通信。后面会继续补充。
本篇到这里结束,感谢阅读,点赞关注!拜拜、


http://www.ppmy.cn/embedded/99357.html

相关文章

利用puppeteer将html网页生成图片

1.什么是puppeteer&#xff1f; Puppeteer是一个Node库&#xff0c;它提供了一个高级API来通过DevTools协议控制Chromium或Chrome。 可以使用Puppeteer来自动化完成浏览器的操作&#xff0c;官方给出的一些使用场景如下&#xff1a; 生成页面PDF抓取 SPA&#xff08;单页应用…

redis set(集合)类型

集合中的元素是无序的&#xff0c;集合中的元素是不能重复的 1.set add member [member ...] &#xff1a;向集合中添加元素 返回值&#xff1a;成功添加的元素个数 2.smembers key&#xff1a;获取set中的所有元素 3.sismember key member: 判断一个元素在不在set中&#x…

U盘安装Ubuntu24.04,乌邦图,UltralISO

文章目录 前言通过UltraISO&#xff0c;制作启动U盘下载镜像制作工具UltraISO(软碟通)下载ubuntu镜像文件制作启动U盘 安装ubuntu设置root密码&#xff0c;并登陆root 前言 在Ubuntu作为主流的linux系统&#xff0c;有时候使用VMware安装使用&#xff0c;总归有一定的性能损耗…

JavaScript 保留词

JavaScript 保留词 在 JavaScript 中&#xff0c;您不能把这些保留词作为变量、标记或函数名来使用&#xff1a; abstract arguments await* boolean break byte case catch char class* const continue debugger default delete do double else enum* eva…

创新实践:流媒体服务器如何推动WebRTC支持H.265及JS硬软解码(MSE硬解、WASM软解)

为了实现这一全面的解决方案&#xff0c;我们投入了近半年的时间进行调研与研发。我们的主要目标是&#xff1a;让流媒体服务器能够直接传输H.265编码的视频&#xff0c;而无需将其转码为H.264&#xff0c;从而使Chrome浏览器能够无缝解码并播放H.265视频。 值得注意的是&#…

iPhone照片怎么导入电脑?一键导入毫不费力

随着智能手机的普及&#xff0c;我们越来越依赖手机来记录生活的点点滴滴。iPhone作为其中的佼佼者&#xff0c;其高质量的摄像头为用户捕捉了无数珍贵瞬间。然而&#xff0c;随着照片数量的增多&#xff0c;手机存储空间可能会变得捉襟见肘&#xff0c;此时将照片导入电脑既能…

目标检测(Object Detection)

The essence of object detection is to get category and location through input images. 1、CV 计算机视觉概述 2、Classification of Object Detection 基于深度学习的目标检测算法主要分为两类&#xff1a;Two stage 和 One stage 。 &#xff08;1&#xff09;Tow St…

前端构建工具 webpack与vite对比

一、webpack构建原理 Webpack的构建过程大致为&#xff1a; 1.从入口文件开始分析依赖&#xff0c; 2.递归解析所有依赖模块&#xff0c;生成依赖图&#xff0c; 3.调用Loader转换文件内容&#xff0c; 4.打包所有模块输出优化后的静态资源 。 webpack工作特点&#xff1a; …