Docker 部署 RocketMQ 5.0

news2024/10/5 19:57:23

文章目录

  • Github
  • 官网
  • 文档
  • 简介
  • Docker 镜像
  • Docker 部署
  • 消息类型
    • 普通消息
    • 顺序消息
    • 定时/延时消息
    • 事务消息

Github

  • https://github.com/apache/rocketmq

官网

  • https://rocketmq.apache.org/zh/

文档

  • https://rocketmq.apache.org/zh/docs/

简介

RocketMQ 5.0 引入了全新的弹性无状态代理模式,将当前的Broker职责进行拆分,对于客户端协议适配、权限管理、消费管理等计算逻辑进行抽离,独立无状态的代理角色提供服务,Broker则继续专注于存储能力的持续优化。这套模式可以更好地实现在云环境的资源弹性调度。 值得注意的是RocketMQ 5.0的全新模式是和4.0的极简架构模式相容相通的,5.0的代理架构完全可以以Local模式运行,实现与4.0架构完全一致的效果。开发者可以根据自身的业务场景自由选择架构部署。
在这里插入图片描述

  • Namesrv (Name Server):

    • Namesrv 是 Name Server 的简写,主要负责管理 Broker 的元数据信息和路由信息。
    • Namesrv 维护着 Topic、Producer 和 Consumer 的路由信息,以及 Broker 的地址信息。
    • Producer 和 Consumer 在启动时会向 Namesrv 注册自己,并定期从 Namesrv 获取最新的路由信息,以便能够正确地发送和接收消息。
  • Broker:

    • Broker 是 RocketMQ 中存储消息的节点,负责接收来自 Producer 的消息,并将其存储到相应的 Topic 中。
    • 同时,Broker 也负责从存储中检索消息,并将其发送给 Consumer。
    • 一个 Broker 可以管理多个 Topic,每个 Topic 可以有多个队列,以实现负载均衡和高可用性。
    • Broker 还负责消息的复制和同步,以确保消息的可靠传输和高可用性。
  • Proxy:

    • Proxy 是 RocketMQ 中的代理组件,主要负责为 Producer 和 Consumer 提供代理服务。
    • Proxy 位于 Producer 和 Consumer 之间,负责代理它们的请求,并将其转发给相应的 Broker 或 Namesrv。
    • Proxy 可以实现负载均衡、故障转移和流量控制等功能,以提高系统的可用性和性能。
    • Proxy 是一个无状态的中间件组件,它不保存与客户端连接相关的状态信息,可以轻松地实现水平扩展和负载均衡。

Docker 镜像

  • https://hub.docker.com/r/apache/rocketmq
docker pull apache/rocketmq:5.2.0

Docker 部署

  • 创建目录
├── rocketmq
│   ├── broker
│   │   ├── store
│   │   ├── logs
│   ├── namesrv
│   │   ├── logs
│   ├── proxy
│   │   ├── logs
mkdir rocketmq && cd rocketmq
mkdir broker namesrv proxy
cd namesrv && mkdir logs
cd broker && mkdir store logs
cd proxy && mkdir logs
  • docker-compose.yml
services:
  rocketmq-dashboard:
    image: apacherocketmq/rocketmq-dashboard:latest
    container_name: rocketmq-dashboard
    ports:
      - 8000:8080
    environment:
      - JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876
    networks:
      - rocketmq
  namesrv:
    image: apache/rocketmq:5.2.0
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    volumes:
      - ./rocketmq/namesrv/logs:/home/rocketmq/logs/rocketmqlogs
    networks:
      - rocketmq
    command: sh mqnamesrv
  broker:
    image: apache/rocketmq:5.2.0
    container_name: rmqbroker
    ports:
      - 10909:10909
      - 10911:10911
      - 10912:10912
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876
    volumes:
      - ./rocketmq/broker/store:/home/rocketmq/store
      - ./rocketmq/broker/logs:/home/rocketmq/logs/rocketmqlogs
    depends_on:
      - namesrv
    networks:
      - rocketmq
    command: sh mqbroker
  proxy:
    image: apache/rocketmq:5.2.0
    container_name: rmqproxy
    networks:
      - rocketmq
    depends_on:
      - broker
      - namesrv
    ports:
      - 8080:8080
      - 8081:8081
    restart: on-failure
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876
    volumes:
      - ./rocketmq/proxy/logs:/home/rocketmq/logs/rocketmqlogs
    command: sh mqproxy
networks:
  rocketmq:
    driver: bridge
  • 部署 namesrv broker proxy
docker-compose up -d proxy
  • 容器启动日志
# 验证 Namesrv 是否启动成功
docker exec -it rmqnamesrv bash -c "tail -n 10 /home/rocketmq/logs/rocketmqlogs/namesrv.log"
# 验证 Broker 是否启动成功
docker exec -it rmqbroker bash -c "tail -n 10 /home/rocketmq/logs/rocketmqlogs/broker.log"
# 验证 Proxy 是否启动成功
docker exec -it rmqproxy bash -c "tail -n 10 /home/rocketmq/logs/rocketmqlogs/proxy.log"
  • 部署 dashboard
docker-compose up -d rocketmq-dashboard
  • http://localhost:8000/#/

在这里插入图片描述

消息类型

普通消息

  • 同步发送: 同步发送是指消息发送方发送消息后会等待消息服务器(Broker)的响应,直到收到确认或者超时才返回。

    • 对消息可靠性要求高的场景,例如订单支付、资金交易等。
    • 对发送消息的吞吐量要求不是特别高的场景,因为同步发送会阻塞等待服务器响应,可能会影响发送方的性能。
  • 异步发送: 异步发送是指消息发送方发送消息后不等待服务器响应,而是立即返回,通过回调函数处理服务器响应。

    • 对发送消息的吞吐量要求较高的场景,因为异步发送不会阻塞发送方,可以提高发送方的性能。
    • 对消息可靠性要求一般的场景,例如日志记录、统计数据等,可以通过重试机制来保证消息的可靠性。

顺序消息

  • 顺序消息是指消息消费的顺序与消息发送的顺序一致。
  • RocketMQ 通过消息队列和消息队列中的消息分区来实现顺序消息。在同一个消息队列中的消息将按照发送顺序进行消费,不同消息队列之间的消息则可能并发消费。
  • 应用场景:
    • 需要保证消息处理的顺序性,例如订单处理、日志记录等。
    • 需要避免消息处理的并发冲突,例如库存同步、账户余额更新等。

定时/延时消息

  • 定时/延时消息是指消息发送后会在一定的时间延迟后才被消费者接收。
  • RocketMQ 提供了消息延迟发送的功能,可以在发送消息时设置消息的延迟时间。
  • 应用场景:
    • 需要在未来的某个特定时间点触发某些操作,例如定时任务调度、消息提醒等。
    • 需要实现消息的重试机制,可以通过延迟发送实现消息重试的逻辑。

事务消息

  • 事务消息是指发送方发送消息后,消息并不立即被消费者接收,而是处于预提交状态,需要发送方确认后消息才会被真正发送到消费者。
  • RocketMQ 提供了事务消息的支持,通过发送方的确认和回查机制来保证消息的可靠传递。
  • 应用场景:
    • 需要保证消息发送的原子性操作,例如分布式事务、多个系统间的数据同步等。
    • 需要在消息发送和消息确认之间进行一些业务逻辑处理,例如本地事务的提交、回滚等。

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

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

相关文章

Markdown如何分页操作

Markdown导出分页操作 在平时的文档导出过程中Markdown过程中会出现因为不能分页导致的排版问题。 排版问题在将Markdown文档导出为PDF或其他格式时尤为明显。当文档内容超过一页时,无法自动调整页面布局,导致内容不连续,甚至导致图片或表格…

2-5 基于matlab的信号的希尔伯特-黄变换

基于matlab的信号的希尔伯特-黄变换,IMF分解,对IMF进行Hilbert处理,绘制二维/三维时-频图,时间-能量图(瞬时能量谱) ,频率-能量图(希尔伯特谱)。程序已调通,可直接运行。 2-5 希尔伯…

代码随想录算法训练营第五十九天|115.不同的子序列、 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇

代码随想录算法训练营第五十九天 115.不同的子序列 题目链接:115.不同的子序列 确定dp数组以及下标的含义:dp[i][j] :以下标i - 1为结尾的s,和以下标j - 1为结尾的t,s中t的个数dp[i][j]确定递推公式: s[…

学习记录:VS2019+OpenCV3.4.1实现SURF库函数的调用

最近在学习opencv的使用,在参照书籍《OpenCV3编程入门》实现SURF时遇到不少问题,下面做归纳总结。 错误 LNK2019 无法解析的外部符号 “public: static struct cv::Ptr __cdecl cv::xfeatures2d::SURF::create(double,int,int,bool,bool)” (?createSUR…

Obsidian 工作区Workspace:实现切换和管理工作区的多任务处理插件

工作区 工作区是Obsidian 的核心插件之一,旨在帮助用户更好地管理和组织他们的工作环境。 功能简介 工作区保存和切换:Workspace 插件允许用户保存当前的窗口布局和打开的笔记状态,用户可以随时切换到不同的工作区,这样可以根据…

【星海随笔】云解决方案学习日志篇(二) kafka、Zookeeper、Fielbeat

Elastic 中国社区官方博客 https://blog.csdn.net/ubuntutouch/category_9209092.html Kafka kafka的源代码是基于Scala语言编写的,运行在Java虚拟机(即:JVM)上。因此,在安装kafka之前需要先安装JDK Kafka 为什么依赖 Zookeepe…

WebSocket 入门教程

什么是 WebSocket? WebSocket 是一种通信协议,它在单个 TCP 连接上提供全双工通信。与传统的 HTTP 不同,WebSocket 允许服务器主动向客户端推送数据,而不仅仅是客户端请求数据。这使得 WebSocket 非常适用于需要低延迟和实时通信…

【星座运势】本周财运分析,巨蟹座财富潜力大开!

大家好!今天我们来谈谈巨蟹座本周的财富运势。经过调查和数据分析,我发现巨蟹座这周的财运潜力很大!接下来,我将用通俗易懂的语言,通过代码说明,向大家展示巨蟹座的财富运势。 首先,我们需要通…

通俗范畴论2 有向图与准范畴

退一步海阔天空,在正式进入范畴论之前,我们可以重新审视一下我们是如何认识世界的,有了这个对人类认识世界过程的底层理解,可以帮助我们更好地理解范畴论。 对于人类认识世界,最神奇的一点就是这个世界居然是可以认识…

【SpringBoot】SpringBoot:实现文件上传和下载功能

文章目录 引言项目初始化添加依赖 配置文件存储位置实现文件上传功能创建文件上传控制器创建上传页面 实现文件下载功能创建文件下载控制器 安全性和最佳实践文件大小限制文件类型验证文件名和路径验证文件下载时的安全性 测试与部署示例:编写单元测试 部署结论 引言…

C++的异常捕获

目录 C语言的异常处理方式 C的异常处理方式 异常的抛出与捕获 抛出与捕获原则 自定义异常体系 异常安全 异常规范 异常的优缺点 优点 缺点 C语言的异常处理方式 1、终止程序 常见形式:assert 缺陷:太过强硬,如果发生内存错误&#…

文心一言 VS 讯飞星火 VS chatgpt (282)-- 算法导论20.4 3题

三、在 CONNECTED-COMPONENTS 作用于一个有 k 个连通分量的无向图 G(V,E) 的过程中,FIND-SET 需要调用多少次? UNION 需要调用多少次?用 |V| 、 |E| 和 k 来表示你的答案。如果要写代码,请用go语言。 文心一言&#x…

【Java】过滤器/拦截器

文章目录 两者区别request链路全过程 在实际开发中,过滤器和拦截器都是经常使用的技术,但一被提及到其区别时,整个人就愣住了,好像没有认真地对两者进行区别和总结,这两者之间也确实很容易混淆,因此结合了很…

C++ 54 之 继承中同名的静态成员处理

#include <iostream> using namespace std;// 父类 class Base07{ public:static int m_a; // 静态成员&#xff0c;类内定义static void fun(){cout << "Base中的fun"<< endl;}static void fun(int a){cout << "Base中的fun(int a)&qu…

53. QT插件开发--插件(动态库so)的调用与加载

1. 说明 在使用QT进行插件库的开发之后,还需要将这个插件库程序生成的so动态链接库加载到主程序框架中进行使用,才能达到主程序的模块化开发的效果。在前一篇文章插件创建中介绍了如何在QT中开发插件库,并提供外部接口调用。本篇博客的主要作用是模拟在主程序框架中加载动态…

EasyRecovery2024数据恢复神器#电脑必备良品

EasyRecovery数据恢复软件&#xff0c;让你的数据重见天日&#xff01; 大家好&#xff01;今天我要给大家种草一个非常实用的软件——EasyRecovery数据恢复软件&#xff01;你是不是也曾经遇到过不小心删除了重要的文件&#xff0c;或者电脑突然崩溃导致数据丢失的尴尬情况呢&…

element-ui input输入框和多行文字输入框字体不一样

页面中未作样式修改&#xff0c;但是在项目中使用element-ui input输入框和多行文字输入框字体不一样&#xff0c;如下图所示&#xff1a; 这是因为字体不一致引起的&#xff0c;如果想要为Element UI的输入框设置特定的字体&#xff0c;你可以在你的样式表中添加以下CSS代码…

快速UDP网络连接之QUIC协议介绍

文章目录 一、QUIC协议历史1.1 问题&#xff1a;QUIC为什么在应用层实现1.2 QUIC协议相关术语1.3 QUIC和TCP对比1.4 QUIC报文格式1.4.1 QUIC报文格式-Stream帧11.4.2 QUIC报文格式-Stream帧2 二、QUIC的特点2.1 连接建立低时延&#xff0c;2.2 多路复用流复用-HTTP1.1流复用-HT…

SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件二(补充)

SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件二&#xff08;补充&#xff09; 如果你想在cmd命令窗口内看到程序运行&#xff0c;即点开弹出运行窗口&#xff0c;关闭时exe自动关闭。 需要再launch4j上进行如下操作&#xff1a; 这样转换好的exe就可以有控制台了…

springboot + Vue前后端项目(第十六记)

项目实战第十六记 写在前面1 第一个bug1.1 完整的Role.vue 2 第二个bug2.1 修改路由router下面的index.js 总结写在最后 写在前面 发现bug&#xff0c;修复bug 1 第一个bug 分配菜单时未加入父id&#xff0c;导致分配菜单失效 <!-- :check-strictly"true" 默…