• RocketMQ(一)


    作用

    1. 限流削峰

    2. 异步解耦

    组成

    Producer:消息的发送者,生产者;举例:发件人

    Consumer:消息接收者,消费者;举例:收件人

    Broker:暂存和传输消息的通道;举例:快递

    NameServer:管理Broker;举例:各个快递公司的管理机构 相当于broker的注册中心,保留了broker的信息

    Queue:队列,消息存放的位置,一个Broker中可以有多个队列

    Topic:主题,消息的分类

    快速入门

    生产者

    1.创建消息生产者producer,并制定生产者组名

    2.指定Nameserver地址

    3.启动producer

    4.创建消息对象,指定主题Topic、Tag和消息体等

    5.发送消息

    6.关闭生产者producer

    消费者

    1.创建消费者consumer,制定消费者组名

    2.指定Nameserver地址

    3.创建监听订阅主题Topic和Tag等

    4.处理消息

    5.启动消费者consumer


    搭建pom依赖

    1. <dependency>
    2. <groupId>org.apache.rocketmqgroupId>
    3. <artifactId>rocketmq-clientartifactId>
    4. <version>4.9.2version>
    5. dependency>

    编写生产者

    1. @Test
    2. void simpleProducer() throws MQClientException, MQBrokerException, RemotingException, InterruptedException {
    3. //创建一个生产者,指定组名
    4. DefaultMQProducer producer = new DefaultMQProducer("test-producer-group");
    5. //连接namesrv
    6. producer.setNamesrvAddr(MqConstant.NAME_SRV_ADDR);
    7. //启动
    8. producer.start();
    9. //创建一个消息
    10. Message message = new Message("testTopic", "hello world".getBytes());
    11. //发送消息
    12. SendResult send = producer.send(message);
    13. System.out.println(send.getSendStatus());
    14. //关闭生产者
    15. producer.shutdown();
    16. }

    编写消费者

    1. @Test
    2. void simpleConsumer() throws Exception{
    3. //创建一个消费者
    4. DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("test-consumer-group");
    5. //连接
    6. consumer.setNamesrvAddr(MqConstant.NAME_SRV_ADDR);
    7. //订阅一个主题 *表示所有的消息,后期会有消息过滤
    8. consumer.subscribe("testTopic", "*");
    9. consumer.registerMessageListener((MessageListenerConcurrently) (list, consumeConcurrentlyContext) -> {
    10. //业务处理
    11. System.out.println("我是消费者");
    12. System.out.println("消费:"+new String(list.get(0).getBody()));
    13. System.out.println("消费上下文"+consumeConcurrentlyContext);
    14. //返回值
    15. return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
    16. });
    17. //启动
    18. consumer.start();
    19. System.in.read();
    20. }

    消费模式

    Push是服务端【MQ】主动推送消息给客户端,优点是及时性较好,但如果客户端没有做好流控,一旦服务端推送大量消息到客户端时,就会导致客户端消息堆积甚至崩溃。

    Pull是客户端需要主动到服务端取数据,优点是客户端可以依据自己的消费能力进行消费,但拉取的频率也需要用户自己控制,拉取频繁容易造成服务端和客户端的压力,拉取间隔长又容易造成消费不及时。

    Push模式也是基于pull模式的,只能客户端内部封装了api,一般场景下,上游消息生产量小或者均速的时候,选择push模式。在特殊场景下,例如电商大促,抢优惠券等场景可以选择pull模式

  • 相关阅读:
    吐槽 B 站收费,是怪它没钱么?
    腾讯音乐回港上市,抖音取代网易云,成为腾讯音乐终极对手?
    设计一个网络爬虫(Python)
    时间工具类-- LocalDateTimeUtil详解
    adb shell命令
    yolov5检测是否佩戴口罩
    linux c++ 程序只能运行一个实例 文件锁
    微服务架构整理-(十二、SpringCloud实战之Zuul网关)
    2018.7-2019.7一周年Java进阶架构师技术文章整理 建议收藏
    2022 深度学习 & 计算机视觉 & 感知算法 面经整理 二十五(241 242 243 244 245 246 247 248 249 250)
  • 原文地址:https://blog.csdn.net/weixin_64704029/article/details/138756387