STOMP 消息高可用推送

2023-11-29 05:48
文章标签 推送 消息 可用 stomp

本文主要是介绍STOMP 消息高可用推送,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、背景

前端在部分消息需要实时推送,如果需要推送的终端比较多并且消息的准确性要求比较高,因此需要采用高可用

2、高可用方案

2.1 Websocket

Websocket+gateway网关

缺点:

  1. 实现起来有一定困难
  2. 基于gateway网关,对网关会造成一定性能压力

2.2 Stomp

        借用消息中间件实现高可用,如RabbitMQ、RocketMQ都支持Stomp协议。后端直接搭建消息高可用集群,前端通过Stomp协议直接连接消息中间件,进行消息订阅和发布。应用服务同样进行消息的订阅或发布。

2.2.1 STOMP协议

STOMP即Simple (or Streaming) Text Orientated Messaging Protocol,简单(流)文本定向消息协议,它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛地应用。

2.2.2 前端调用示例

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8" /><title>Websocket</title><noscript><h2 style="color:#ff0000">貌似你的浏览器不支持websocket</h2></noscript><script src="js/sockjs.min.js"></script><script src="js/stomp.min.js"></script><script src="js/jquery-3.4.1.min.js"></script><script type="text/javascript">var host="ws://192.168.56.101:15674/ws";function login() {host=$("#host").val();connect();}var stompClient = null;function setConnected(connected) {$('#disconnect').attr("disabled",false);$('#response').html();}function connect() {//地址+端点路径,构建websocket链接地址var headers = {"login": "admin","passcode": "admin",//虚拟主机,默认“/”"host": "/"};var username = document.getElementById("username").value;stompClient = Stomp.client(host);stompClient.connect(headers, function(frame) {setConnected(true);console.log('Connected:' + frame);showResponse('Connected');$("#message-container").show();$('#loginButton').attr("disabled",true);stompClient.subscribe('/queue/' + username, function(response) {showResponse(response.body);});},function(frame) {console.log('Connect fail:' + frame);showResponse('Connect fail:' + frame);});}function disconnect() {if (stompClient != null) {stompClient.disconnect();}setConnected(false);console.log("Disconnected");showResponse("Disconnected");}function send() {var username = $('#username').val();var message = $('#message').val();//发送消息的路径stompClient.send('/queue/' + username, {"content-type":"text/plain"}, JSON.stringify({username:username,message:message}));}function showResponse(message) {var response = $('#response');var html="<div><b>"+dateFormat("YYYY-mm-dd HH:MM:SS",new Date())+"</b>  :"+message+"</div>"response.append(html);}function dateFormat(fmt, date){let ret;const opt = {"Y+": date.getFullYear().toString(),        // 年"m+": (date.getMonth() + 1).toString(),     // 月"d+": date.getDate().toString(),            // 日"H+": date.getHours().toString(),           // 时"M+": date.getMinutes().toString(),         // 分"S+": date.getSeconds().toString()          // 秒// 有其他格式化字符需求可以继续添加,必须转化成字符串};for (let k in opt) {ret = new RegExp("(" + k + ")").exec(fmt);if (ret) {fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))};};return fmt;}
</script>
</head>
<body><div style=""><div><span>地址</span><input type="text"  placeholder="服务器地址" id="host" style="width: 200px" value="ws://192.168.56.101:15674/ws"/><br/><span>用户</span><input type="text"  placeholder="请输入用户名" id="username" style="width: 200px" value="jack"/></div><button type="button" id="loginButton" onclick="login()">登录</button><button type="button" id="disconnect" onclick="disconnect();" disabled>断开连接</button></div><div style=""><div id="message-container" style="display:none"><span>消息</span><input type="text" id="message" style="width: 200px" value="hello,world!"/><button type="button" id="send" onclick="send()">发送</button></div></div><div style="height: 400px;border: 1px solid black;padding:10px;width:300px;overflow-y:auto;"><div id="response"></div></div></body>
</html>

这篇关于STOMP 消息高可用推送的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/431695

相关文章

ActiveMQ—消息特性(延迟和定时消息投递)

ActiveMQ消息特性:延迟和定时消息投递(Delay and Schedule Message Delivery) 转自:http://blog.csdn.net/kimmking/article/details/8443872 有时候我们不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数。。。 类似

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和

VMware8实现高可用(HA)集群

陈科肇 =========== 操作系统:中标麒麟高级操作系统V6 x86-64 实现软件:中标麒麟高可用集群软件 ======================== 1.环境的规划与配置 硬件要求 服务器服务器至少需要 2 台,每台服务器至少需要 2 块网卡以做心跳与连接公网使用存储环境 建议使用一台 SAN/NAS/ISCSI 存储作为数据共享存储空间 软

用Cri-O,Sealos CLI,Kubeadm方式部署K8s高可用集群

3.6 Cri-O方式部署K8s集群 注意:基于Kubernetes基础环境 3.6.1 所有节点安装配置cri-o [root@k8s-all ~]# VERSION=1.28[root@k8s-all ~]# curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensu

Java消息队列:RabbitMQ与Kafka的集成与应用

Java消息队列:RabbitMQ与Kafka的集成与应用 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的分布式系统中,消息队列是实现系统间通信、解耦和提高可扩展性的重要组件。RabbitMQ和Kafka是两个广泛使用的消息队列系统,它们各有特点和优势。本文将介绍如何在Java应用中集成RabbitMQ和Kafka,并展示它们的应用场景。 消息队

Kafka 分布式消息系统详细介绍

Kafka 分布式消息系统 一、Kafka 概述1.1 Kafka 定义1.2 Kafka 设计目标1.3 Kafka 特点 二、Kafka 架构设计2.1 基本架构2.2 Topic 和 Partition2.3 消费者和消费者组2.4 Replica 副本 三、Kafka 分布式集群搭建3.1 下载解压3.1.1 上传解压 3.2 修改 Kafka 配置文件3.2.1 修改zookeep

Android 友盟消息推送集成遇到的问题

友盟消息推送遇到的问题 集成友盟消息推送,步骤根据提供的技术文档接入便可。可是当你集成到项目中去的时候,可能并不是一帆风顺就搞定,因为你项目里面是可能集成了其他的sdk(比如支付宝,微信,七鱼等等三方的sdk)。那么这个时候,再加上友盟的消息推送sdk集成可能就会出现问题。 问题清单 友盟消息推送sdk和支付宝sdk冲突问题 后台配置了消息推送,也显示发送成功,但是手机没有收到消息通知

Kubernetes高可用集群搭建(kubeadm)

1 Kubernetes高可用集群介绍 前面已经介绍了Kubernetes的集群部署,但是都只是介绍的单master节点的情况,由于单master节点的可靠性不高,不适合实际的生产环境,此处介绍如何实现多master节点的高可用集群的搭建。 2 安装要求 一台或多台机器,操作系统CentOS7.x-x86_64硬件配置:2G或更多ARM,2个CPU或更多CPU,硬盘20G及以上集群中所有机器