【消息中间件】为什么选择RocketMQ及使用案例

news2024/9/20 20:50:08

 

目录

一、为什么选择RocketMQ

1、为什么是为什么选择RocketMQ

2、RocketMQ、ActiveMQ和Kafka之间的比较

2.1、对比1

2.2、对比2,接着上表

二、使用案例

1、引入依赖

2、编写启动类

3、编写application.yml配置文件

4、创建rocketmq文件夹

4.1、创建生产者

4.2、创建消费者

5、控制器


一、为什么选择RocketMQ

1、为什么是为什么选择RocketMQ

    在阿里孕育 RocketMQ 的雏形时期,阿里将其用于异步通信、搜索、社交网络活动流、数据管道,贸易流程中。随着阿里的贸易业务吞吐量的上升,源自阿里的消息传递集群的压力也变得紧迫。

    根据研究,随着队列和虚拟主题使用的增加,ActiveMQ IO模块达到了一个瓶颈。阿里尽力通过节流、断路器或降级来解决这个问题,但效果并不理想。于是尝试了流行的消息传递解决方案Kafka。不幸的是,Kafka不能满足阿里的要求,其尤其表现在低延迟高可靠性方面,详见这里。在这种情况下,阿里决定发明一个新的消息传递引擎来处理更广泛的消息用例,覆盖从传统的pub/sub场景到高容量的实时零误差的交易系统。

    Apache RocketMQ 自诞生以来,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨,RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案,被广泛应用于互联网、大数据、移动互联网、物联网等领域的业务场景。

2、RocketMQ、ActiveMQ和Kafka之间的比较

2.1、对比1

消息队列Client SDK支持协议有序消息调度消息批处理消息广播消息消息过滤器
ActiveMQJava, .NET, C++ etc.Push模式, 支持 OpenWire, STOMP, AMQP, MQTT, JMS独占使用者队列或独占队列可以确保排序支持不支持支持支持
KafkaJava, Scala etc.Pull模式, 支持TCP确保分区内消息的顺序不支持支持,使用异步生产者不支持支持,你可以使用Kafka Streams来过滤信息
RocketMQJava, C++, GoPull模式, 支持 TCP, JMS, OpenMessaging确保严格的消息顺序,并能够优雅地扩大规模支持支持,同步模式,以避免消息丢失支持支持,基于 SQL92的属性筛选表达式

2.2、对比2,接着上表

 

服务器触发重发


消息存储
消息追溯消息优先级 

高可用性和故障转移

消息轨道配置管理及运作工具
不支持使用 JDBC 和高性能日志(如 levelDB、 kahaDB)支持非常快速的持久性支持支持 

支持,如果使用 levelDB,则需要一个 ZooKeeper 服务器,具体取决于存储

不支持默认配置级别较低,用户需要优化配置参数支持
不支持 

高性能文件存储

支持偏移量指示不支持 

支持,需要一个 ZooKeeper 服务器

不支持卡夫卡使用键值对格式进行配置。这些值可以通过文件提供,也可以通过编程方式提供。支持,使用终端命令公开核心指标
支持高性能和低延迟文件存储支持时间戳和偏移量指示不支持支持,主从模型,没有其他工具包支持开箱即用,用户只需要注意几个配置支持丰富的 web 和终端命令来公开核心指标

二、使用案例

1、引入依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>2.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.5.2</version>
        </dependency>
    </dependencies>

2、编写启动类

前提是你安装了RocketMQ,在《Window系统安装RocketMQ》已经介绍。

/**
 * RocketMQ启动mqnamesrv.cmd、mqbroker.cmd
 *
 * @author CeaM
 * 2022/08/28 10:11
 **/
@SpringBootApplication
public class RocketMQApp {

    public static void main(String[] args) {
        SpringApplication.run(RocketMQApp.class, args);
    }
}

3、编写application.yml配置文件

server:
  port: 8989


rocketmq:
  name-server: localhost:9876
  producer:
    group: ceam_group
  consumer:
    group: ceam_group

我用本地的rocketmq端口,这个按照你自己环境配置

4、创建rocketmq文件夹

4.1、创建生产者

package com.ceam.rocketmq.rocketmq;

import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.stereotype.Component;

/**
 * @author CeaM
 * 2022/08/28 10:24
 **/
@Slf4j
@Component
@AllArgsConstructor
public class MQProducer {

    private final RocketMQTemplate rocketMQTemplate;

    /**
     * convertAndSend(…):使用此方法,交换机会马上把所有的信息都交给所有的消费者,消费者再自行处理,不会因为消费者处理慢而阻塞线程。
     * convertSendAndReceive(…):可以同步消费者。使用此方法,当确认了所有的消费者都接收成功之后,才触发另一个convertSendAndReceive(…),
     * 也就是才会接收下一条消息。RPC调用方式。
     * **/
    public void sendMessage(){
        // new_topic是topic
        rocketMQTemplate.convertAndSend("TopicTest","hello RocketMQ");
        log.info("发送成功过了");
    }
}

4.2、创建消费者

package com.ceam.rocketmq.rocketmq;

import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

/**
 * @author CeaM
 * 2022/08/28 10:24
 **/
@Slf4j
@Component
@RocketMQMessageListener(topic = "TopicTest", consumerGroup = "${rocketmq.consumer.group}")
public class MQConsumer implements RocketMQListener<String> {

    @Override
    public void onMessage(String s) {
        log.info("收到消息啦,消息为:{}", s);
    }
}

5、控制器

简单测试一下接口调用

package com.ceam.rocketmq.controller;

import com.ceam.rocketmq.rocketmq.MQProducer;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author CeaM
 * 2022/08/28 15:05
 **/
@RestController
@AllArgsConstructor
public class TestController {

    private final MQProducer mqProducer;

    @GetMapping("/mq")
    public void send() {
        mqProducer.sendMessage();
    }

}

测试结果:

 

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

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

相关文章

OpenCV实战(4)——像素操作

OpenCV实战&#xff08;4&#xff09;——像素操作0. 前言1. 图像的基本组成2. 访问像素值2.1 修改图像像素2.2 cv::Mat_ 模板类2.3 完整代码示例3. 用指针扫描图像3.1 图像扫描3.2 其他减色公式3.3 使用输入和输出参数3.4 高效扫描连续图像3.5 低阶指针算法4. 使用迭代器扫描图…

linux操作系统期末考试题库

1. cal命令 目录 1. cal命令 2.cat命令 3.cd命令 4.date命令 5.echo命令 6.grep命令 7.head 命令 8.ls 命令 9.touch 命令 10.more命令 11. ln创建链接命令 12.查看进程 13.mkdir命令 cal -3 cal 查看指定日期的日历 cal 4 2022 cal 2018 2.cat命令 cat -n /etc…

认识MyBatis

MyBatis是什么&#xff1f; MyBatis是dao层&#xff08;持久层&#xff09;框架&#xff0c;它支持自定义SQL、存储过程以及高级映射。 MyBatis 免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的XML或注解来配置和映射原始类型、接口和Java …

2022 NCTF

MISC 炉边聚会 卡组代码是 Base64 编码的字节串&#xff0c;exp <?php $deckstring "AAEDAZoFKIwGngXIBrwFzgnQBfIHygf0CIgJkAiBogJ1gjMCPIHtgeeBeAD6AfyB7YHvgbgAAD4AO2B7wFkgnMCMwIga2B/QImgi6BJAIiAn2BOIJAAA"; #这是⼀个⾮常有趣的萨满卡组 $binary bas…

非零基础自学Golang 2 开发环境 2.2 配置GOPATH

非零基础自学Golang 学习文档地址&#xff1a;https://www.topgoer.cn/ 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删【已联系过文档作者】 文章目录非零基础自学Golang2 开发环境2.2 配置GOPATH2.2.1 配置GOPATH2.2.2 go的项目目录2.2.3 适合个人开发…

[附源码]Python计算机毕业设计Django剧本杀交流分享平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

年产2万吨山楂酒工厂的设计-发酵工段及车间的设计(lunwen+任务书+cad图纸)

目录 1前 言 1 2总论 2 2.1设计依据 2 2.2设计指导思想和原则 2 2.3设计范围 2 2.3.1生产部门 2 2.3.2设计图纸 3 2.4工艺设计基本数据和指标 3 2.5生产工艺概述 3 2.6生产设备概述 4 2.7生产工艺流程图 4 2.8生产方法的简单介绍 6 3全程物料衡算 7 3.1全程总物料概算 7 3.1.1山…

MySQL主从同步

©网络研究院 安装环境 基本需求 ——采用CentOS7系统搭建MySQL服务器 ——关闭防火墙 ——关闭SELinux ——软件 MySQL-5.7.17-1 安装MySQL 续&#xff08;1&#xff09; 从官方下载RPM软件包 ——http://dev.mysql.com/downloads/mysql/ ——适用于当前系统的b…

数图互通高校房产管理——校园电子地图

数图互通房产管理系统在这方面做得比较全面&#xff1b; 1、校园电子地图建设方案 支持地图和房间双向无缝对接。通过电子地图选择建筑物&#xff08;平面或立体&#xff09;能够查看建筑物信息、楼层平面布局图或立体图&#xff0c;点击楼层上的房间能够编辑或查看房间信息。…

非零基础自学Golang 2 开发环境 2.4 Git 安装

非零基础自学Golang 学习文档地址&#xff1a;https://www.topgoer.cn/ 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删【已联系过文档作者】 文章目录非零基础自学Golang2 开发环境2.4 Git 安装2.4.1 安装git2 开发环境 2.4 Git 安装 2.4.1 安装git 虽…

Web 性能测试

Web 性能测试 作为网站应用的开发者或维护者&#xff0c;我们需要时常关注网站当前的健康状况&#xff0c;譬如在主流程运行正常的情况下&#xff0c;各方面性能体验是否满足期望&#xff0c;是否存在改进与提升的空间&#xff0c;如何进行快速且准确的问题定位等&#xff0c;…

mongoDB操作文档(全部)

mongoDB 1、创建、查询数据库 创建数据库 use dade 查询数据库 show dbs 2、创建集合、查看 创建集合插入数据 db.集合名.insert({}) db.dade.insert({dade:大得,age:18}) ​ 查看集合 show tables ​ 查看集合中的数据 db.集合名.find() 查询所有 db.dade.find() ​ db.集…

微服务框架 SpringCloud微服务架构 16 SpringAMQP 16.1 基本介绍

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构16 SpringAMQP16.1 基本介绍16.1.1 什么是SpringAMQP16 SpringAMQP 16.1 …

Android -- 每日一问:你在Android开发中遇到的技术难题是什么,你是怎么解决的?

经典回答 一个工作过几年的程序员肯定会有工作中遇到技术难点问题&#xff0c;虽然这个问题有可能对于别人不是技术难点&#xff0c;但只要对于当时的你是技术难点&#xff0c;只要让你抓耳挠腮毫无头绪就往往会在你的大脑中留下深刻的印象。 这个问题&#xff0c;我也比较难…

【三维目标检测】VoteNet(二)

VoteNet数据和源码配置调试过程请参考上一篇博文&#xff1a;【三维目标检测】VoteNet&#xff08;一&#xff09;_Coding的叶子的博客-CSDN博客。本文主要详细介绍VoteNet网络结构及其运行中间状态。 1 VoteNet模型总体过程 VoteNet核心思想在于通过霍夫投票的方法实现了端到…

[附源码]计算机毕业设计基于SpringBoot的高校课程知识库

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

1550_AURIX_TC275_锁相环的操作

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 继续SCU模块的学习&#xff0c;这一次主要是看一下锁相环的操作。锁相环之前接触的不少了&#xff0c;其实主要的一个功能就是提升单片机的时钟主频。 1. 备份时钟其实也是稳定可靠的&…

供应荧光染料FITC-PEG-FA,Folic acid-PEG-Fluorescein,荧光素-聚乙二醇-叶酸

An English name&#xff1a;FITC-PEG-FA&#xff0c;Folic acid-PEG-Fluorescein Chinese name&#xff1a;荧光素-聚乙二醇-叶酸 Item no&#xff1a;X-GF-0247-5k CAS&#xff1a;N/A Formula&#xff1a;N/A MW&#xff1a;荧光素-聚乙二醇5-叶酸、FITC-PEG 2-FA、荧光…

使用Python和SAS Viya分析社交网络

本示例使用Python和SAS分析了预防高危药物研究的结果。这个社交网络有194个节点和273个边&#xff0c;代表药物、使用者之间的联系。最近我们被客户要求撰写关于社交网络的研究报告&#xff0c;包括一些图形和统计输出。 背景 SAS Viya的最新版本提供了用于探索实验问题的全套创…

GIT分布式版本控制系统 | 命令讲解入门

Git概述 Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件&#xff1b;分布式相比于集中式的最大区别在于开发者可以提交到本地&#xff0c…