当前位置: 首页 > news >正文

Java小案例-RocketMQ的11种消息类型,你知道几种?(普通消息和批量消息)

前言

这篇给大家讲普通消息和批量消息,主要配合代码进行讲解,关于RocketMQ的基础知识已经在上篇给大家讲过需要回顾的点击下面这个链接去看

RocketMQ基础知识

普通消息

普通消息其实就很简单,是Apache RocketMQ中最基础的消息形式,区别于有特性的顺序消息、定时/延时消息和事务消息。普通消息一般应用于微服务解耦、事件驱动、数据集成等场景,这些场景大多数要求数据传输通道具有可靠传输的能力,且对消息的处理时机、处理顺序没有特别要求。

在电商交易场景中,上游订单系统将用户下单支付这一业务事件封装成独立的普通消息并发送至RocketMQ服务端,下游按需从服务端订阅消息并按照本地消费逻辑处理下游任务。每个消息之间都是相互独立的,且不需要产生关联。

在离线的日志收集场景中,通过埋点组件收集前端应用的相关操作日志,并转发到RocketMQ。每条消息都是一段日志数据,RocketMQ不做任何处理,只需要将日志数据可靠投递到下游的存储系统和分析系统即可,后续功能由后端应用完成。

普通消息是RocketMQ基本消息功能,支持生产者和消费者的异步解耦通信。

例如下面这个代码就是普通消息:

public class Producer {public static void main(String[] args) throws Exception {//创建一个生产者,指定生产者组为 sanyouProducerDefaultMQProducer producer = new DefaultMQProducer("sanyouProducer");// 指定NameServer的地址producer.setNamesrvAddr("192.168.200.143:9876");// 启动生产者producer.start();//创建一条消息 topic为 sanyouTopic 消息内容为 java日记Message msg = new Message("sanyouTopic", "java日记".getBytes(RemotingHelper.DEFAULT_CHARSET));// 发送消息并得到消息的发送结果,然后打印SendResult sendResult = producer.send(msg);System.out.printf("%s%n", sendResult);// 关闭生产者producer.shutdown();}}

构建的消息的topic为sanyouTopic,内容为java日记,这就是一条很普通的消息

批量消息

MQ的批量消息是指将多条小的消息合并成一个批量消息,然后一次发送出去。

这种批量发送的好处是可以减少网络IO,提升吞吐量。在实际使用时,一个批次消息的大小不应超过1MB,但实际的最大限制是4194304字节,大概4MB。

同时,批量消息的使用也有一定限制,这些消息应该有相同的Topic,相同的waitStoreMsgOK。而且不能是延迟消息、事务消息等。

通俗易懂说就是将多个消息同时发过去,减少网络请求的次数

public class Producer {public static void main(String[] args) throws Exception {//创建一个生产者,指定生产者组为 sanyouProducerDefaultMQProducer producer = new DefaultMQProducer("sanyouProducer");// 指定NameServer的地址producer.setNamesrvAddr("192.168.1.135:9876");// 启动生产者producer.start();//用以及集合保存多个消息List<Message> messages = new ArrayList<>();messages.add(new Message("sanyouTopic", "java日记 0".getBytes()));messages.add(new Message("sanyouTopic", "java日记 1".getBytes()));messages.add(new Message("sanyouTopic", "java日记 2".getBytes()));// 发送消息并得到消息的发送结果,然后打印SendResult sendResult = producer.send(messages);System.out.printf("%s%n", sendResult);// 关闭生产者producer.shutdown();}}

多个普通消息同时发送,这就是批量消息

不过在使用批量消息的时候,需要注意以下两点

  • 每条消息的Topic必须都得是一样的

  • 不支持延迟消息和事务消息

总结

普通消息和批量消息比较简单,没有复杂的逻辑,就是将消息发送过去,在ConsumeQueue和CommitLog存上对应的数据就可以了。

联系方式

关于文章中大家有任何疑问可以通过关注公众号《编程乐学》进行留言,同时,公众号还有更多有趣的项目以及关于学习编程的笔记资料大家可以看看,欢迎大家进行留言。

http://www.lryc.cn/news/259465.html

相关文章:

  • 前端小技巧: 设计一个简版前端统计 SDK
  • DevOps搭建(十一)-Jenkins容器内部使用Docker详解
  • 用户访问认证
  • 前端知识(七)———HTTPS:保护网络通信安全的关键
  • element-ui按钮el-button,点击之后恢复之前的颜色
  • Excel: Python 如何干掉 VBA 系列 乙
  • 算法笔记—链表、队列和栈
  • MySQL中的时间函数整理汇总
  • stu06-VSCode里的常用快捷键
  • Bypass open_basedir
  • 【数据库设计和SQL基础语法】--查询数据--过滤
  • 关于git clone速度极慢的解决方法
  • 软件设计不是CRUD(8):低耦合模块设计实战——组织机构模块(下)
  • docker-compose Install gitea
  • 【Pytorch】学习记录分享1——Tensor张量初始化与基本操作
  • Python数据科学视频讲解:Python的数据运算符
  • 参数学习——糖果问题(人工智能期末复习)
  • 【深度学习】注意力机制(六)
  • 螺旋矩阵算法(leetcode第59题)
  • SQL Server 服务启动报错:错误1069:由于登录失败而无法启动服务
  • “ABCD“[(int)qrand() % 4]作用
  • Vue2面试题:说一下组件通信有哪些方式?
  • C# 两个日期比较大小
  • 路由基本原理
  • 配置本地端口镜像示例
  • 使用FluentAvalonia组件库快速完成Avalonia前端开发
  • JAVA实体类集合该如何去重?
  • 修改Element UI可清空Input的样式
  • Java常用注解
  • golang实现同步阻塞、同步非阻塞、异步非阻塞IO模型