前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ActiveMQBytesMessage内容修改

ActiveMQBytesMessage内容修改

作者头像
歪歪梯
发布2020-06-19 16:20:29
1.2K0
发布2020-06-19 16:20:29
举报
文章被收录于专栏:歪歪梯Club歪歪梯Club

读写分离分析

ActiveMQBytesMessage是activeMQ进行字节传输使用的消息类型,内部维护一个DataInputStream和一个ByteArrayInputStream,使用一个ByteSequence对象保存数据,保存时关闭写操作,根据参数进行压缩,涉及到读写分离,因此编写本篇博客记录。 1.新创建或者调用clearBody方法后的对象,处于只写模式 2.处于只写模式下的对象无法读取数据,必须关闭只写模式,进入只读模式才能获取已写内容信息 3.只有处于只读模式下的对象才能调用getBodyLength方法获得数据长度,在写结束前长度为0 4.只能对只读对象调用clearBody,会将保存的内容清空,并进入只写模式 5.只能对只写对象调用reset方法,会将字节流数据flush到字节缓存流,通过字节缓存流获得ByteSequence对象保存数据,并关闭所有的输入流,计算长度信息,之后可以通过getBodyLength方法获得字节数据长度

获得旧内容

当一个BytesMessage完成字节流的编写后进入只读模式,先获得旧数据

     byte[] bytes = new byte[(int) bytesMessage.getBodyLength()];
     bytesMessage.readBytes(bytes);

写入新内容

获得旧数据后,既可以进行业务操作计算新的数据,然后需要调用clearBody清空旧内容进入可写模式,再写入新数据

     bytesMessage.clearBody();
     .....//业务计算
     bytesMessage.writeBytes(newBytes)

结束输入

写入后一定要调用reset关闭输入,进入只读模式,然后才会flush掉io管道中的所有数据并保存进入ByteSequence对象,如果没有调用关闭输入的消息直接生产到broker上,可能导致消费消息时出现下列bug: 1.getBodyLength方法返回值为0 2.ByteSequence内容丢失

     bytesMessage.reset()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 歪歪梯Club 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 读写分离分析
  • 获得旧内容
  • 写入新内容
  • 结束输入
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档