第01讲:RocketMQ入门

news2024/11/27 22:29:21

一、什么是消息队列

​ 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。

官方首页:RocketMQ · 官方网站 | RocketMQ

官方文档:RocketMQ · 官方网站 | RocketMQ

下载链接:点击下载

可视化工具:点击下载

1.1、应用场景

  1. 异步处理
  2. 流量削峰填谷(比如:秒杀)
  3. 解耦微服务

1.2、常见MQ产品对比

在这里插入图片描述

1.3、为什么选择RocketMQ

第一点,开发语言优势

​ RocketMQ 使用 Java 语言开发,比起使用 Erlang 开发的 RabbitMQ 来说,有着更容易上手的阅读体验和受众。在遇到 RocketMQ 较为底层的问题时,大部分熟悉 Java 的同学都可以深入阅读其源码,分析、排查问题,甚至可以在社区版的基础上进行二次开发

第二点,丰富的高级特性

​ 根据 RocketMQ 官方文档的列举,其高级特性达到了 12 种,例如顺序消息、事务消息、消息过滤、定时消息等。RocketMQ 丰富的特性,能够为我们在复杂的业务场景下尽可能多地提供思路及解决方案。

第三点,良好的商业前景

​ 比如阿里,在其生产环境中已经部署了数百个 RocketMQ 集群,上千个节点,如此大量地将 RocketMQ 应用于生产环境,足以说明 RocketMQ 是的确经得起残酷的生产环境考验的,并且能够针对线上环境复杂的需求场景提供相应的解决方案。

​ RocketMQ 不仅仅解决了阿里的内部需求,同时还被搬到了阿里云上,作为一个商业化的产品对外提供服务。在阿里云的产品叫作“消息队列 RocketMQ 版”,自从 2016 年开始商业化到现在,RocketMQ 商业化版已经具有相当大的规模。良好的商业前景,也反向推动着 RocketMQ 在业界的普及,两者相辅相成、相得益彰。

第四点,众多大厂背书

​ RocketMQ 现在被广泛应用于各个大厂的内部业务中,其诞生之地阿里自不必多说,历年来大家所熟悉的双十一促销,在阿里内部就是使用的 RocketMQ 来承载消息,面对如此庞大的流量洪峰,RocketMQ 交出了一份令人满意的答卷。

​ 再比如,RocketMQ 也是阿里交易链路中的核心产品。交易链路本已是核心中的核心,而这个核心又将 RocketMQ 当作核心链路中的核心,足以见对 RocketMQ 的重视程度。同时,字节跳动内部不同的业务也都在大量地使用 RocketMQ,同样也是作为业务主流程中的核心组件,RocketMQ 在生产环境中保持着非常高的稳定性、可用性,非常良好地支撑了业务的运行与发展。

二、如何使用RocketMQ

2.1、搭建RocketMQ

2.1.1、下载安装Apache RocketMQ

本博客使用的Rocket MQ版本为:rocketmq-all-5.0.0-bin-release,如果需要可以自行下载或者找博主要

2.1.2、配置环境变量

ROCKETMQ_HOME 本地解压路径

在这里插入图片描述

NAMESRV_ADDR localhost:9876

在这里插入图片描述

2.1.3、启动mqnamesrv

powerShell 管理员身份运行,否则服务会出现闪退现象!!!

若出现以下提示则服务启动成功,可进行下一步操作

在这里插入图片描述

2.1.4、启动mqbroker

在这里插入图片描述

2.2、搭建RocketMQ控制台

下载可视化工具zip包,本地解压后使用IDEA打开

在这里插入图片描述

运行,浏览器访问http://localhost:8080/

在这里插入图片描述

控制台使用说明参考:https://github.com/eacdy/rocketmq-externals/blob/master/rocketmq-console/doc/1_0_0/UserGuide_CN.md

三、SpringBoot整合RocketMQ

SpringBoot版本:2.7.4

3.1、pom.xml

<!--RocketMQ坐标-->
<dependency>
	<groupId>org.apache.rocketmq</groupId>
	<artifactId>rocketmq-spring-boot-starter</artifactId>
	<version>2.2.1</version>
</dependency>

3.2、application.yml

server:
  port: 8083
rocketmq:
  #RocketMQ Namesrv
  name-server: 127.0.0.1:9876
  producer:
    #生产者分组,RocketMQ必填项,字符可随意
    group: test_mq
    #发送消息超时时间,单位:毫秒。默认为 3000
    send-message-timeout: 3000
    #消息压缩阀值,当消息体的大小超过该阀值后,进行消息压缩。默认为 4 * 1024B
    compress-message-body-threshold: 4096
    #消息体的最大允许大小。。默认为 4 * 1024 * 1024B
    max-message-size: 4194304
    #同步发送消息时,失败重试次数。默认为 2 次。
    retry-times-when-send-failed: 2
    #异步发送消息时,失败重试次数。默认为 2 次。
    retry-times-when-send-async-failed: 2
    #发送消息给 Broker 时,如果发送失败,是否重试另外一台 Broker 。默认为 false
    retry-next-server: false

3.3、编写生产者

package com.rocket.rocketdemo.controller;

import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    /**
     * 发送普通消息
     * convertAndSend(String destination, Object payload) 发送字符串比较方便
     */
    @RequestMapping("/send")
    public void send(){
        //参数一:topic
        //参数二:消息内容
        rocketMQTemplate.convertAndSend("test1","test-message");
    }

    /**
     * 发送同步消息
     * Tip:该方法底层调用的是 producer.send()方法,是阻塞的,producer 一定要等到Broker进行了响应后才会返回,才能继续往下执行。如果超时,或者失败了,会触发两次默认的重试。
     */
    @RequestMapping("/testSyncSend")
    public void testSyncSend(){
        //参数一:topic
        //参数二:消息内容
        SendResult sendResult = rocketMQTemplate.syncSend("test1","同步消息测试");
        System.out.println(sendResult);
    }

    /**
     * 发送异步消息
     * Tip:该方法是非阻塞的,发送结果将由一个回调函数callback进行回调。它与同步发送消息的区别是它在发送消息时多传递了一个SendCallback对象,该方法一调用立马返回,而不需要等待Broker的响应返回。消息发送成功或失败后将回调SendCallback对象的对应方法。
     */
    @RequestMapping("/testASyncSend")
    public void testASyncSend(){
        //参数一:topic
        //参数二:消息内容
        //参数三:回调
        rocketMQTemplate.asyncSend("test1", "异步消息测试", new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                System.out.println(sendResult);
            }
            @Override
            public void onException(Throwable throwable) {
                System.out.println("消息发送异常");
                throwable.printStackTrace();
            }
        });
    }

    /**
     * 发送单向消息
     * Tip:它的发送是单向的,即它不需要等待Broker的响应,只管发送即可,而不论发送成功与失败。通常应用于一些消息不是那么重要,可丢失的场景。
     */
    @RequestMapping("/testOneWay")
    public void testOneWay(){
        for (int i = 0; i <10 ; i++) {
            //参数一:topic   如果想添加tag,可以使用"topic:tag"的写法
            //参数二:消息内容
            rocketMQTemplate.sendOneWay("test1","单向消息测试测试下"+i);
        }
    }
}

3.4、编写消费者

package com.rocket.rocketdemo.config;

import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Service;

@Service
//consumerGroup与application.yml中rocketmq.producer.group值一致
//topic与消息生产者发送的消息topic一致
@RocketMQMessageListener(consumerGroup = "test_mq",topic = "test1")
public class RocketMQConsumerListener implements RocketMQListener<String> {
    @Override
    public void onMessage(String s) {
        System.out.println("消费消息:"+s);
    }
}

3.5、测试

发送同步消息,用postman发送请求 http://localhost:8083/send

控制台效果:

在这里插入图片描述

发送异步消息,用postman发送请求 http://localhost:8083/testSyncSend

控制台效果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++进阶3-二叉搜索树】强,但没貌似还不够?

今天&#xff0c;带来二叉搜索树的讲解。 文中不足错漏之处望请斧正&#xff01; 是什么 二叉搜索树&#xff08;Binary Search Tree&#xff09;又称二叉排序树。 它可以是一棵空树&#xff0c;也可以是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所…

《花雕学AI》不用花钱,也能和ChatGPT聊天!快来看看这五个免费客户端吧

引言 你有没有想过和一个智能的聊天机器人对话&#xff1f;一个可以陪你聊天、讲故事、写代码、模仿名人、生成歌词等等的聊天机器人&#xff1f;如果你有这样的想法&#xff0c;那么你一定要了解ChatGPT。ChatGPT是一个由OpenAI开发的人工智能聊天机器人程序&#xff0c;它使用…

基于Ajax+JSon的表格数据浏览【简单版--没连接数据库】+【连接数据库版】

目录 基于AjaxJSon的表格数据浏览【简单版--没连接数据库】 代码&#xff1a; ajax.js ch10_4.jsp student.java Query.java 运行结果&#xff1a; 点击获取表格后&#xff1a; 基于AjaxJSon的表格数据浏览【简单版--没连接数据库】 代码&#xff1a; ajax.js //声明XM…

【案例实战】SpringBoot3.x自定义封装starter实战

1.starter背景简介及作用 &#xff08;1&#xff09;什么是starter starter是SpringBoot中的一个新发明&#xff0c;它有效的下降了项目开发过程的复杂程度&#xff0c;对于简化开发操做有着很是好的效果。 starter的理念&#xff1a;starter会把全部用到的依赖都给包含进来&a…

三极管的几点应用

三极管有三个工作状态&#xff1a;截止、放大、饱和&#xff0c;放大状态很有学问也很复杂&#xff0c;多用于集成芯片&#xff0c;比如运放&#xff0c;现在不讨论。其实&#xff0c;对信号的放大&#xff0c;我们通常用运放处理&#xff0c;三极管更多的是当做一个开关管来使…

微信小程序入门05-用户登录注册接口开发

用户登录注册&#xff0c;我们先需要开发后端的接口&#xff0c;接口一般需要有入参&#xff0c;然后和数据库进行交互。 1 创建表 我们现在先实现用户的登录及注册&#xff0c;建表语句 create database diancan; use diancan; CREATE TABLE users (id INT AUTO_INCREMENT …

软件设计模式介绍与入门

目录 1、软件设计模式的起源 2、什么是设计模式&#xff1f; 2.1、设计模式的设计意图 2.2、设计模式的分类准则 3、为什么要学习设计模式 4、如何学习设计模式 5、最后 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#x…

毕业论文写作技巧

毕业论文的组成部分目录自定义目录 摘要&#xff08;Abstract&#xff09;绪论相关工作&#xff08;Related work&#xff09;研究方法和结果&#xff08;Method and Results&#xff09;研究方法研究结果 结论&#xff08;Conclusion&#xff09; 写好一篇论文其实就是讲好一个…

批量查询域名历史软件-域名历史快照查询工具

批量查询域名历史和域名历史快照 批量查询域名历史和域名历史快照是一种可以为您提供有关域名历史信息的工具&#xff0c;以下是该主题的详细介绍。 什么是域名历史&#xff1f; 域名历史记录是指域名在被注册前或过去的使用期间所经历的所有事件的记录。这些事件可能包括域…

SpringBoot拦截器获取Request的body数据

1. 场景 自定义Token后&#xff0c;需要在拦截器中进行token验证。在验证的过程中需要读取HttpServletRequest的body部分数据进行验证。 2. 存在问题 如果直接配置拦截器进行urlPatterns拦截&#xff0c;并进行参数验证&#xff0c;在拦截器中获取request的输入流&#xff0c…

智能防盗防偷门锁语音方案设计

智能锁主要功能 防撬报警功能&#xff08;非必须&#xff0c;但很实用&#xff09;&#xff1a;防撬报警功能可以说是指纹密码锁功能中对提升家居安全有效的功能之一。当指纹锁受到外暴力破坏时&#xff0c;就会自动发出警报声&#xff0c;提醒小区安保。好一点的甚至可以自动…

【AUTOSAR】【以太网】UdpNM

目录 一、概述 二、限制与约束 三、功能说明 3.1 协调算法 3.2 操作模式 3.2.1 Network Mode 3.2.2 准备总线睡眠模式 3.2.3 准备总线睡眠模式 3.3 网络状态 3.4 初始化 3.5 通信调度 3.5.1 NM消息发送 3.5.2 NM消息接收 3.6 其他功能 3.7 帧结构 四、API接口 …

创新案例 | 肆拾玖坊白酒0到20亿增长是传销还是创新

01.背景介绍 中国证券报引用公开数据显示&#xff0c;2016年&#xff0c;规模以上白酒企业数量为1578家&#xff0c;2021年&#xff0c;这一数字下降到965家。 同时&#xff0c;白酒产能逐年向优势产区集中&#xff0c;头部企业市场占有率不断提高。2021年&#xff0c;茅台、…

性能测试-操作和优化分析

打流工具 iperf 测试吞吐率 服务端&#xff1a;iperf -u -s 客户端&#xff1a;iperf -u -c 1.1.1.1 -b 500M -t 10 测试结果 ------------------------------------------------------------ Client connecting to 192.168.56.106, UDP port 5001 Sending 1470 byte d…

全面监测健康数据,更实用的健康手表,dido E55S Pro上手

关心健康的朋友&#xff0c;一般都特别关注自己的各项健康数据&#xff0c;会通过智能手表之类的工具来持续检测。现在健康类的智能手表选择很多&#xff0c;功能也很丰富&#xff0c;像是我现在用的这款dido E55S Pro&#xff0c;除了常规的心率、血氧之外&#xff0c;还检测心…

vector【实现】:迭代器失效以及非法的间接寻址、深拷贝中的浅拷贝。

vector模拟实现_云的小站的博客-CSDN博客 目录 主题&#xff1a; 迭代器失效 Insert导致的迭代器失效 ereas导致的迭代器失效 非法的间接寻址 深拷贝中的浅拷贝。 主题&#xff1a; 1&#xff09;迭代器失效 2&#xff09;非法的间接寻址 3&#xff09;深拷贝中的浅拷…

2023年最佳SleekFlow最佳替代品

建立更强大的对话关系的最佳平台是什么&#xff1f;现如今&#xff0c;国内客服集成与营销自动化工具也有非常多&#xff0c;比如SaleSmartly&#xff08;ss客服&#xff09;&#xff0c;被称为SleekFlow的最佳替代品。了解为什么SaleSmartly是SleekFlow的最佳替代品。在这篇文…

BTC交易费激增,LTC活跃地址数飙升! BRC-20爆火背后,区块链网络经历了什么?

BRC-20 代币和 Ordinals 协议的日益普及推动了对比特币区块空间的需求&#xff0c;比特币区块链的费用已飙升至两年来的高点。 BRC-20代币标准在 Ordinals 协议上运行。Ordinals 允许用户通过将对数字艺术的引用写入基于比特币的小型交易中&#xff0c;来将数据嵌入比特币区块…

网站历史快照查询软件-批量网站历史快照查询

批量网站历史快照查询软件 批量网站历史快照查询软件是一种可以让用户在短时间内批量查询多个网站历史快照的工具&#xff0c;可以极大地提高用户的工作效率。批量实时查询是该软件的一大优势&#xff0c;下面主要介绍批量实时查询的优势。 一、高效性 批量实时查询可以同时…

通过2种Python库,教会你如何在自动化测试时加入进度条?

前言 我们在执行自动化测试或者调试时&#xff0c;自动化测试用例数量过多&#xff0c;不清楚目前用例数执行了多少个了&#xff0c;还差多少个执行完成。 这时候就会猜想&#xff0c;如果执行过程中存在进度条&#xff0c;就很清楚的了解到测试用例的执行情况&#xff0c;今…