消息队列MQ(Kafka&RabbitMQ)程序员

消息队列--RocketMQ学习笔记

2018-06-19  本文已影响83人  LY丶Smile

序言

本文是RocketMQ学习及使用过程中整理的笔记,主要是个人觉得很关键或者是需要加深理解部分知识的纪录,主要涉及RocketMQ基本概念、部署结构、消息相关知识等,可以做入门资料阅读

消息队列应用场景

基本概念

物理部署结构

图片来自网络

逻辑部署结构

图片来自网络

消费类型

offset

纪录消费位置

顺序消息

  1. 相关概念

    • 顺序消息(FIFO 消息)是 MQ 提供的一种严格按照顺序进行发布和消费的消息类型。包括顺序发布和顺序消费
  2. 注意事项

    • 顺序消息暂不支持广播模式

事务消息

  1. 相关概念

    • 事务消息:通过事务消息能达到分布式事务的最终一致
    • 半消息:暂时还不能投递的消息,发送方成功将消息发送到了RocketMQ的服务器端,但是服务端没有收到生产者对该消息的二次确认,此时消息被标记为“暂不能投递”状态
    • 消息回查:由于网络闪断、生产者应用重启等原因,导致某条事务消息的二次确认丢失,MQ 服务端通过扫描发现某条消息长期处于“半消息”时,需要主动向消息生产者询问该消息的最终状态(Commit 或是 Rollback),该过程即消息回查。
  2. 事务消息图解

    图片来自网络

    1). 可以分为三个阶段:第一阶段发送Prepare消息并且能拿到消息的地址,第二阶段执行本地事务,第三阶段通过第一阶段拿到的地址去访问消息并修改消息的状态
    2). 事务消息主要在于消息投递给消费者之前,消息投递给消费者之后,如果消费者消费失败,则不断重试,如果最终还是失败,则只能人工介入。
    3). 回查是在二次确认未到达MQ Server的情况下启用

  1. 注意事项

    • 事务消息的 Producer ID 不能与其他类型消息的 Producer ID 共用。
    • 通过 ONSFactory.createTransactionProducer 创建事务消息的 Producer 时必须指定 LocalTransactionChecker 的实现类,处理异常情况下事务消息的回查。
    • 事务消息发送完成本地事务后,可在 execute 方法中返回如下三种状态:
      • TransactionStatus.CommitTransaction 提交事务,允许订阅方消费该消息。
      • TransactionStatus.RollbackTransaction 回滚事务,消息将被丢弃不允许消费。
      • TransactionStatus.Unknow 暂时无法判断状态,期待固定时间以后 MQ Server 向发送方进行消息回查。

消息查询手段

消息过滤

  1. broker端消息过滤

    • 减少无用消息传输,减少了网络开销
    • 增加了broker的负担,实现起来相对复杂
  2. Consumer端消息过滤

    • 过滤逻辑完全自定义实现
    • 缺点是有无用消息传输,增大了网络开销

开发--零散知识点

引入

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>4.2.0-incubating</version>
</dependency>

用法

参考

如果您觉得对您有所帮助,点个赞吧~

上一篇下一篇

猜你喜欢

热点阅读