美文网首页
Day14 RocketmQ 客户端模型编程

Day14 RocketmQ 客户端模型编程

作者: 小周爱吃瓜 | 来源:发表于2024-12-13 01:34 被阅读0次
Screenshot 2024-12-14 at 00.54.07.png
  • 消息确认ACK机制
    FLUAH_DISH ASYNC_FLUSH 等机制.

  • 广播消息,TAG标记过滤消息,顺序消息

  • batch comsume 批量消息

  • 事务消息

  • 消费者端消息回调
    ConsumeConcurrently.CONSUME_SUCCESS 或者是LATER.

  • 发送方式,同步,异步,单向等落盘策略.
  defaultMQProducer.send(new Message(), new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                SendStatus sendStatus = sendResult.getSendStatus();
                SEND_OK,
                        FLUSH_DISK_TIMEOUT,
                        FLUSH_SLAVE_TIMEOUT,
                        SLAVE_NOT_AVAILABLE;
            }

            @Override
            public void onException(Throwable throwable) {

            }
        });
        defaultMQProducer.send();
        
        defaultMQProducer.sendOneway();

-- 消费者端

defaultMQPullConsumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {

                ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
                ConsumeConcurrentlyStatus.RECONSUME_LATER;
                return null;
            }
        });

  • 消息确认机制:
    Producer: 多次重试+消息确认机制保证。

  • one way 单向

  • 同步

  • 异步发送


消费模式:

广播和集群(默认是集群模式)

  • 集群消费模式
Screenshot 2024-12-14 at 01.15.21.png

集群可以负载均衡,这样一条数据处理完到消费者就结束了。

  • 广播模式: (每台机器都会消费一次)
    比如更新本地缓存. 每台实例都可以收到消息.

过滤消息:

Tag: 比如货物出库,入库.

new Message("topic","tagA","message".getBytes());

也可以自定义参数属性进行过滤.

顺序消息

下单顺序保证 :
MessageListenerOrderly接口
下单->锁库存->支付->物流等步骤是有顺序的。 可以借助MQ顺序消息实现.

  • 延迟消息:
    18个默认级别
Screenshot 2024-12-14 at 01.21.53.png

改topic名称,然后定时扫描

Screenshot 2024-12-14 at 01.22.34.png
  • 批量消息 建议不超过1M.
    SendResult send(final Collection<Message> msgs) throws MQClientException, RemotingException, MQBrokerException,
        InterruptedException;
Screenshot 2024-12-14 at 01.26.11.png

事务消息 2阶段提交

2PC


Screenshot 2024-12-14 at 01.25.34.png Screenshot 2024-12-14 at 01.25.55.png

ACL 权限控制,方便开人。 分配特定topic即可。

  • 消息ID 是唯一的,每条收到的msg消息的Id。

  • msg Id

但是需要注意,对于客户端来说,毕竟是不知道这个msgId是如何产生的。实际上,在RocketMQ内部,也会针对批量消息、事务消息等特殊的
消息机制,有特殊的msgId分配机制。因此,在复杂业务场景下,不建议使用msgId来作为消息的唯一索引,而建议采用下面的key属性,自行
指定业务层面上的唯一索引
 new Message().setKeys("业务的唯一keyid,作为补充");

对于复杂的业务场景,rocketMQ内部会针对批量消息,事务消息等对msgId做特殊分配,因为需要用keys 补充唯一id依据.

重试16次

Screenshot 2024-12-14 at 01.31.25.png

16次未成功,就投入到死信队列里.

私信队列

  • group: %DLQ%+ConsumeGroup
Screenshot 2024-12-14 at 01.33.16.png

死信消息处理需要设置权限,默认是禁读的.
保存的默认时间是3

比如对于死信做处理,然后发送到正常的topic处理,或者消息.

相关文章

  • Linux网络编程

    一 Socket编程 1 TCP客户端/服务器模型 server端 client端 2 UDP客户端/服务器模型...

  • Socket编程(Java)

    1. socket 编程模型 socket编程分为服务端以及客户端,客户端以及服务端一般按照以下步骤进行编写。服务...

  • 第十一章《网络编程》

    客户端-服务器编程模型 每个网络应用都是基于客户端-服务器模型的,这个模型中的基本操作是事务。一个事务又四个步骤组...

  • java BIO通信模型详解

    客户端/服务器模型 Client/Server模型是网络编程的基本模型,服务端提供位置信息(绑定的IP地址和监听端...

  • RocketMQ源码编译安装

    RocketMQ整体认知 RocketMQ是一款分布式、队列模型的消息中间件: 天然支持集群模型、负载均衡、水平扩...

  • 网络编程

    ## 客户端-服务器编程模型 客户端与服务器均指进程。 一个客户端-服务器事务由四步组成: 1. 客户端发送请求 ...

  • RcoketMQ GUI 可视化管理工具

    优秀的 RocketMQ 可视化管理工具 GUI 客户端 快速查看所有 RocketMQ 集群,包括Brokers...

  • kafka书籍重读

    Kafka客户端 kafka 客户端设计有2个方面,应用层的编程模型和API,也就是主线程涉及到的事情; kafk...

  • RocketMQ学习笔记

    RocketMQ RocketMQ 概念模型 Producer:消息生产者,负责产生消息,一般由业务系统负责产生消...

  • 网络编程

    Socket网络编程 Socket套接字。 网络通信模型:C/S:client/server 客户端/服务器端B/...

网友评论

      本文标题:Day14 RocketmQ 客户端模型编程

      本文链接:https://www.haomeiwen.com/subject/miffejtx.html