RocketMQ

devtools/2025/1/16 3:46:28/

目录

一、什么是RocketMQ

主要特点:

应用场景:

二、RocketMQ的使用

添加依赖

配置RocketMQ

创建生产者服务

创建消费者监听器

编写测试Controller

启动Spring Boot应用

三、RocketMQ与Kafka的异同

相似点

不同点


一、什么是RocketMQ

RocketMQ 是一款分布式消息中间件,最初由阿里巴巴集团开发,并于2012年开源。它在2017年成为了Apache软件基金会的顶级项目。RocketMQ设计用于满足互联网分布式架构的需求,特别是在处理海量消息时提供高效、稳定的服务。

主要特点:

  • 高吞吐量:RocketMQ能够支持每秒数万条至数十万条的消息发送和接收。

  • 低延迟:优化了消息传输机制,确保即使在高负载下也能实现低延迟的消息传递。

  • 可靠性:通过持久化存储、主从复制等机制保证消息不丢失,确保服务的高可用性。

  • 可扩展性:设计上易于水平扩展,以适应业务增长的需求。

  • 灵活性:提供了多种消息模型,包括点对点、发布/订阅模式,以及顺序消息、事务消息等功能。

应用场景:

  • 异步通信:将原本同步的操作转换为异步处理,提高系统响应速度。

  • 削峰填谷:在网络购物节等流量高峰期,使用消息队列可以有效缓解数据库的压力。

  • 日志处理:作为大规模分布式日志收集和处理的解决方案。

  • 事件驱动架构:构建基于事件驱动的应用程序和服务。

二、RocketMQ的使用

添加依赖

首先,在你的pom.xml文件中添加必要的依赖项:

<dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- RocketMQ Spring Boot Starter --><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.1</version> <!-- 确保选择适合的版本 --></dependency>
</dependencies>

配置RocketMQ

application.propertiesapplication.yml中配置RocketMQ的相关属性。这里以application.properties为例:

# RocketMQ NameServer地址
rocketmq.name-server=127.0.0.1:9876
# 生产者组名
rocketmq.producer.group=my-producer-group
# 消费者组名
rocketmq.consumer.group=my-consumer-group

创建生产者服务

创建一个服务类用于发送消息:

import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class RocketMQProducerService {@Autowiredprivate RocketMQTemplate rocketMQTemplate;public void sendMessage(String topic, String message) {rocketMQTemplate.convertAndSend(topic, message);System.out.println("Sent Message: "message);}
}

创建消费者监听器

创建一个监听器类用于接收消息:

import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Service;
@Service
@RocketMQMessageListener(topic = "test-topic", consumerGroup = "my-consumer-group")
public class RocketMQConsumerService implements RocketMQListener<String> {@Overridepublic void onMessage(String message) {System.out.printf("Received Message: %s %n", message);}
}

编写测试Controller

为了方便测试,可以编写一个简单的Controller来调用生产者服务发送消息:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {@Autowiredprivate RocketMQProducerService producerService;@GetMapping("/send")public String sendMessage(@RequestParam String msg) {producerService.sendMessage("test-topic", msg);return "Message sent!";}
}

启动Spring Boot应用

确保RocketMQ的服务(NameServer和Broker)已经启动,并运行你的Spring Boot应用程序。你可以通过访问http://localhost:8080/send?msg=Hello_RocketMQ来发送一条消息,并观察控制台输出确认消息是否被成功消费。

三、RocketMQ与Kafka的异同

相似点

  • 高吞吐量:两者都设计为能够处理大规模的数据流,并且都能够提供非常高的消息吞吐量。

  • 持久化存储:两者都支持将消息持久化到磁盘,以确保即使发生故障也不会丢失数据。

  • 扩展性:两者都可以通过增加节点来实现水平扩展,从而支持更高的负载。

  • 顺序消息:都能保证特定条件下的消息顺序(如分区内的顺序)。

不同点

  • 存储模型:

    • Kafka使用基于日志结构的存储模型,消息按顺序追加到持久化日志文件中。

    • RocketMQ采用更类似于传统数据库的设计,将消息存储在逻辑表中。

  • 消息可靠性:

    • Kafka的消息可靠性依赖于副本机制,但可能无法完全保证消息不丢失。

    • RocketMQ通过重试等机制提高了消息保存的可靠性,并提供了同步刷盘功能,在单机可靠性上比Kafka更高。

  • 消息模式:

    • Kafka主要关注于高吞吐量场景,适用于大数据流处理。

    • RocketMQ提供了更多的消息模型,如顺序消息、延时消息和事务消息,适合需要高可靠性和复杂消息模式的应用。

  • 性能优化:

    • Kafka在高吞吐量场景下表现优异,特别适合需要大量数据快速传输的情况。

    • RocketMQ在高并发场景下有更好的表现,特别是在需要保证消息准确性的场景中。

  • API灵活性:

    • Kafka拥有丰富的客户端库,支持多种编程语言,便于集成不同的系统。

    • RocketMQ的API相对简单,但在某些高级特性上提供了更强的支持。

  • 社区和支持:

    • Kafka由Apache软件基金会维护,拥有广泛的社区支持和大量的第三方工具。

    • RocketMQ同样也是Apache顶级项目,但其社区规模和生态系统相对较小。

选择RocketMQ还是Kafka取决于具体的应用需求。如果应用需要处理海量的数据流并且对延迟要求不高,Kafka可能是更好的选择。而如果需要复杂的交易处理或严格的消息顺序和可靠性保证,RocketMQ则可能更适合。


http://www.ppmy.cn/devtools/150832.html

相关文章

【C++学习篇】红黑树 从入门到进阶

目录 1.红黑树的概念 1.1红黑树的规则 1.2红黑树的效率 2. 红黑树的实现 2.1 红黑树的结构 2.2红黑树的插入 2.2.1红黑树插入&#xff0c;旋转的一些细节 2.2.1.1 u&#xff08;uncle&#xff09;不存在 &#xff0c;c为p的左孩子&#xff08;单旋变色&#xff09; 2.2.…

C#读写ini配置文件保存设置参数

本示例使用设备&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1b5P5rkA&ftt&id22173428704 [DllImport("kernel32", CharSet CharSet.Unicode)] public static extern uint GetPrivateProfileString(string lpAppName, stri…

服务器出现蓝屏现象的原因有什么?

当服务器定期出现蓝屏的现象&#xff0c;则会影响到企业业务的连续性&#xff0c;同时还可能会导致重要数据信息丢失和系统稳定性下降&#xff0c;是一种较为复杂的技术问题&#xff0c;本文就来探讨一下导致服务器出现蓝屏的原因都有什么。 服务器出现蓝屏有可能是硬件出现了故…

在Ubuntu下安装PostgreSQL数据库以及安装pgAdmin4工具

文章目录 1. 环境安装2. 基础操作3. 配置数据库4. 安装pgAdmin45. 注意 1. 环境安装 PostgreSQL是一个功能强大的开源对象-关系型数据库系统 QT安装数据库 sudo apt-get update sudo apt-get install libqt5sql5-psql2. 基础操作 sudo su - postgres //进入数据库 psql //数…

深入理解多线程 线程的start方法 底层原理 为何Java=(C++)--

目录 Java 并发包 祖师爷 四大口诀 为什么多线程及其重要 硬件&#xff1a;摩尔定律失效 软件&#xff1a;系统需求 Start 方法 C 源码解读 底层逻辑 操作系统分配 Java 并发包 Java Util Concurrent 祖师爷 四大口诀 为什么多线程及其重要 硬件&#xff1a;摩尔定律…

java fastjson2将 map、实体类、list等 类型转换为JSON介绍

Fastjson2 提供了强大的类型转换功能&#xff0c;可以方便地将 JSON 字符串解析为 Java 对象、集合类型&#xff0c;或者其他自定义类型。这些功能使得 Fastjson2 在 JSON 数据的处理上更为灵活和高效。下面详细介绍 Fastjson2 的类型转换方法和相关用法。 1. 基本的类型转换 …

如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等)

如何在本地部署大模型并实现接口访问&#xff08; Llama3、Qwen、DeepSeek等&#xff09; 如何在本地部署大模型并实现接口访问&#xff08; Llama3、Qwen、DeepSeek等&#xff09;模型地址模型下载模型部署指定显卡运行app.py 运行环境requirements 调用接口代码调用 结语 如何…

C#,入门教程(27)——应用程序(Application)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(26)——数据的基本概念与使用方法https://blog.csdn.net/beijinghorn/article/details/124952589 一、什么是应用程序 Application&#xff1f; 应用程序是编程的结果。一般把代码经过编译&#xff08;等&#xff09;过程&#…