ActiveMQ使用(四):在JavaScript中发送的MQTT消息在SpringBoot中变为字节数组

news2025/1/11 17:52:58

ActiveMQ使用(四):在JavaScript中发送的MQTT消息在SpringBoot中变为字节数组

1. 问题描述

    @JmsListener(destination = "test_producer", containerFactory = "topicListenerContainer")
    public void receiveTestProducer(String message) throws JMSException {
        System.out.println("收到测试生产者的消息: " + message);
    }
  1. 使用浏览器客户端发送消息:
    在这里插入图片描述
    在这里插入图片描述
  2. JavaScript中发送消息
    在这里插入图片描述
    在这里插入图片描述
    从上面的图片可以看到,JavaScript发送的消息变成了字节数据

2. 解决

  1. 思路描述:
    可以发现JavaScript发送的是BytesMessage,只要修改发送的数据为TextMessage类型就可以了,但是我没找到这种思路的解决方法
  2. 字符串解码
    通过判断数据类型,如果是TestMessage就直接取出text就是utf-8形式的字符串,如果是BytesMessage就取出字节数组,将字节数组转成utf-8字符串就可以了
	import org.apache.activemq.command.Message;

    @JmsListener(destination = "test_producer", containerFactory = "topicListenerContainer")
    public void receiveTestProducer(Message message) throws JMSException {
        String msg = StringUtils.activeMQMessageParse(message);
        System.out.println("收到测试生产者的消息: " + message);
    }


package com.icebear.icedt.utils;

import org.apache.activemq.command.ActiveMQBytesMessage;
import org.apache.activemq.command.ActiveMQTextMessage;
import org.apache.activemq.command.Message;

import javax.jms.JMSException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
  *
  * @author icebear
  * @date 2023/4/13
  * @info 字符串工具类
  */
public class StringUtils {

    /**
     * 将字符串进行分割并获得字节数组
     * @param str 待处理字符串
     * @param split 分割字符串
     * @return 字节数组
     */
    public static byte[] stringToBytes(String str, String split) {
        String[] strArr = str.split(split);
        byte[] byteArr = new byte[strArr.length];
        for (int i = 0; i < strArr.length; i++) {
            byteArr[i] = (byte) Integer.parseInt(strArr[i]);
        }
        return byteArr;
    }

    /**
     * 根据字节数组获取指定字符集的字符串
     * @param byteArr 字节数组
     * @param charset 编码字符集
     * @return 处理后的字符串
     */
    public static String bytesToString(byte[] byteArr, Charset charset) {
        return new String(byteArr, charset);
    }

    /**
     * 将字符串根据分隔符转成字节数组,然后转成指定字符集的字符串
     * @param str 待处理字符串
     * @param split 分割字符串
     * @param charset 指定字符集
     * @return 处理后的字符串
     */
    public static String stringToString(String str, String split, Charset charset) {
        return bytesToString(stringToBytes(str, split), charset);
    }

    /**
     * 将ActiveMQ接收到的消息转换为UTF-8字符串
     * @param message
     * @return
     */
    public static String activeMQMessageParse(Message message) {
        String str = null;
        if (message instanceof ActiveMQTextMessage) {
            ActiveMQTextMessage textMessage = (ActiveMQTextMessage) message;
            try {
                str = textMessage.getText().toString();
            } catch (JMSException e) {
                e.printStackTrace();
            }
//            System.out.println("text : " + textMessage.getText());
        } else if (message instanceof ActiveMQBytesMessage) {
            ActiveMQBytesMessage bytesMessage = (ActiveMQBytesMessage) message;
            byte[] byteArr = new byte[0];
            try {
                byteArr = new byte[(int) bytesMessage.getBodyLength()];
                int flag = bytesMessage.readBytes(byteArr);
                str = bytesToString(byteArr, StandardCharsets.UTF_8);
//                System.out.println("bytes : " + flag + " : " + str);
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
        return str;
    }
}

3. 测试

3.1 浏览器

在这里插入图片描述

在这里插入图片描述

3.2 JavaScript

在这里插入图片描述

在这里插入图片描述

4. 参考

如何从ActiveMqMessage获取消息文本

activemq - 接收到的 ActiveMQBytesMessage 内容为空

https://activemq.apache.org/maven/apidocs/org/apache/activemq/command/ActiveMQBytesMessage.html

byte数组与字符串之间相互转换

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI绘画兴起,Stable Diffusion脱颖而出,来一探究竟

近几年&#xff0c;AI图像生成风靡全球&#xff0c;它能够根据文字描述生成精美图像&#xff0c;这极大地改变了人们的图像创作方式。众多专业人士说该技术正在引领着新一轮深度学习创意工具浪潮&#xff0c;并有望彻底改变视觉媒体的创作。 AI绘画兴起 Stable Diffusion脱颖…

[Django] 后台管理系统

浏览之前&#xff0c;请先阅读以下文章 1.Django项目创建 2.Django路由系统 在项目目录下的urls.py文件中&#xff0c;我们会看到这样一个url的配置 启动服务&#xff0c;在浏览器中输入网址http://127.0.0.1:8000/admin/&#xff0c;结果如下 Django提供了一个非常强大的管…

前端解析Excel中的数据进行操作

技术要点&#xff1a;Vue、Element、JSON 功能描述&#xff1a;读取Excel中的数据&#xff0c;利用JavaScript技术奖数据转成Json格式进行操作&#xff01; 功能描述&#xff1a;只能用前端操作数据&#xff0c;并未实现将数据传送至后端处理&#xff01; 注意注意注意 如果…

Dapper——分布式跟踪系统

分布式跟踪系统 背景 当代的互联网的服务&#xff0c;通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上&#xff0c;这些软件模块&#xff0c;有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器&#xff0…

常用加密算法

目录 常见的加密算法可以分成三种&#xff1a; 对称加密算法 DES 3DES AES 非对称加密 RSA ECC Hash算法 MD5 SHA1 算法对比 算法选择 常见的加密算法可以分成三种&#xff1a; 对称加密算法&#xff1b;非对称加密算法&#xff1b;Hash算法&#xff1b;接下来我们…

论文 : Multi-Kernel Broad Learning systems Based on Random Features

Multi-Kernel Broad Learning systems Based on Random Features:A Novel Expansion for Nonlinear Feature Nodes 基于核方法的强大性能&#xff0c;本文提出了一种基于多核的BLS系统扩展方法。首先&#xff0c;将多核形式的非线性特征映射合并为广义学习系统的特征节点; 然后…

液晶显示器输入信号接口(一) —— VGA

VGA1. 简介2. VGA接口3. VGA线4. 技术原理4.1 信号传输4.2 模拟信号的扫描方式4.3 参数本文主要介绍VGA&#xff0c;其它输入输出信号接口介绍可从以下链接跳转&#xff1a; 液晶显示器输入信号接口(二) —— DVI 液晶显示器输入信号接口(三) —— HDMI 液晶显示器输入信号接口…

Mysql高级 学习笔记分享

索引&#xff1a;Index是帮助Mysql高效获取数据的数据结构 索引是一种数据结构 ---排好序的快速查找数据结构 、 某种满足特定查找算法的数据结构、以某种方式指向数据 两大功能&#xff1a;查找快、排好序 目的在于提高查询效率&#xff0c;类比字典 如果没有索引&a…

【Vue】学习笔记-列表渲染/数据监视

列表渲染/数据监视基本列表Key的作用与原理列表过滤列表排序Vue 数据监视原理基本列表 v-for指令 用于展示列表数据语法&#xff1a;v-for“(item,index) in xxx” :key“yyy”可遍历&#xff1a;数组&#xff0c;对象&#xff0c;字符串&#xff08;用的很少&#xff09;&am…

中国农业大学821数据结构经验贴

中国农业大学821经验贴目录个人情况说明初试复习经验数学二英语二政治数据结构复试复习经验目录 个人情况说明 初试成绩 复试成绩 复试成绩在平均水平&#xff0c;综合成绩第五 本科经历 河南双非GPA&#xff1a;3.79&#xff0c;专业排名第6竞赛经历&#xff1a;CCPC省银&…

Matlab进阶绘图第16期—三维填充折线图

三维填充折线图是在三维折线图的基础上&#xff0c;对其与XOY平面之间的部分进行颜色填充&#xff0c;从而能够更好地刻画细节变化。 由于Matlab中未收录三维填充折线图的绘制函数&#xff0c;因此需要大家自行设法解决。 本文使用自制的FilledPlot3小工具进行三维填充折线图…

计算机网络第一章(概述)【湖科大教书匠】

1. 各种网络 网络(Network)由若干**结点(Node)和连接这些结点的链路(Link)**组成多个网络还可以通过路由器互连起来&#xff0c;这样就构成了一个覆盖范围更大的网络&#xff0c;即互联网(互连网)。因此&#xff0c;互联网是"网络的网络(Network of Networks)"**因特…

扩散模型的Prompt指南:如何编写一个明确提示

Prompt&#xff08;提示&#xff09;是扩散模型生成图像的内容来源&#xff0c;构建好的提示是每一个Stable Diffusion用户需要解决的第一步。本文总结所有关于提示的内容&#xff0c;这样可以让你生成更准确&#xff0c;更好的图像 一个好的提示 首先我们看看什么是好的提示…

MCM箱模型建模方法及大气O3来源解析

详情点击链接&#xff1a;MCM箱模型建模方法及大气O3来源解析一、大气中O3形成、MCM和Atchem 2原理及Linux系统安装1.大气中O3形成的原理 2、MCM原理及基本流程3、Atchem 2 下载安装4、Linux系统安装5、Atchem 2 运行需要的其他工具A、Fortran&#xff1b;B、Python&#xff1…

小程序分包(普通分包、独立分包)

普通分包和独立分包的区别 当小程序从普通的分包页面启动的时候&#xff0c;首先需要下载主包独立分包是不依赖看于主包就可以运行&#xff0c;提升分包的执行速度&#xff0c;一个小程序可以有多个独立分包。 独立分包属于分包的一种。普通分包的所有限制都对独立分包有效。独…

基于LDA+SVM实现人脸识别模型

基于LDASVM实现人脸识别模型 描述 人脸识别&#xff08;图像识别&#xff09;是机器学习领域十经典的应用&#xff0c;在本质上&#xff0c;人脸识别属于监督学习中的分类问题。前面章节中我们已经学习了支持向量机&#xff08;SVM&#xff09;&#xff0c;该算法在图像分类领…

专为智能设备安全打造 | 基于ACM32 MCU的智能断路器方案

随着我国电网建设的快速发展&#xff0c;数字化变电站成为建设和研究的热点&#xff0c;数字化变电站的核心在于一次设备的智能化与二次设备的网络化&#xff0c;对于断路器这种极其重要的电力一次设备而言&#xff0c;其智能化的实现有十分重要的意义&#xff0c;断路器智能化…

耗时半月,终于把牛客网上的软件测试面试八股文整理成了PDF合集(测试基础+linux+MySQL+接口测试+自动化测试+测试框架+jmeter测试+测试开发)

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;近期的面试越来越难了&#xff0c;要背的八股文越来越多了&#xff0c;考察得越来越细&#xff0c;越来越底层&#xff0c;明摆着就是想让我们徒手造航母嘛&#xff01;实在是太为难我们这些程序员了。 这不&#xf…

【Git】速食Git,一文学会Git使用

1.什么是版本控制 版本控制是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。【通俗来说就跟我们所玩的游戏一样&#xff0c;不断地更新迭代游戏内容&#xff0c;比如…

微服务高级篇学习【4】之多级缓存

文章目录前言一 多级缓存二 JVM进程缓存2.1 案例导入2.1.1 使用docker安装mysql2.1.2 修改配置2.1.3 导入项目工程2.1.4 导入商品查询页面2.1.5 反向代理2.2 初识Caffeine2.3 实现JVM进程缓存三 Lua脚本入门3.1 安装Lua3.2 Lua语法学习四 实现多级缓存4.1 OpenResty简介4.2 Ope…