RocketMQ——RocketMQ搭建及问题解决

RocketMQ:发送消息与接收实例 RocketMQ:发送消息与接收实例【同步消息 异步消息 单线消息 顺序消息】 阅读详情

RocketMQ简介

RocketMQ是一个开源的分布式消息和流数据平台,由阿里研发目前属于apache顶级项目:rocketmq.apache.org/ RocketMQ消息队列主要功能功能:引用解耦、流量消峰、消息分发、保证最终一致性、方便动态扩容

RocketMQ安装

下载地址

RocketMQ 4.5.1

系统要求

64位 Linux、unix或mac;
JDK版本1.8以上;

准备工作

由于下载的是zip压缩格式文件,因此在linux上安装unzip来进行解压

yum install -y unzip

使用unzip命令解压

unzip rocketmq-all-4.5.1-bin-release.zip

单机模式安装

启动nameserver

两种启动方式

  1. 进入解压目录:/rocketmq-all-4.5.1-bin-release/bin,输入./mqnamesrv进行启动
[root@node1 bin]# ./mqnamesrv
Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON

命令行提示启动成功

  1. 进入解压目录:/rocketmq-all-4.5.1-bin-release/bin,输入指令nohup sh bin/mqnamesrv &
[root@node1 bin]# nohup sh ./mqnamesrv &
[1] 68705

命令行显示启动的进程号,查看启动日志

namesrv.log 
...
The Name Server boot success. serializeType=JSON

日志提示启动成功

启动broker

两种启动方式:

  1. 直接运行mqbroker
./mqbroker -n localhost:9876
The broker[node1, 172.17.0.1:10911] boot success. serializeType=JSON and name server is localhost:9876

或者

./mqbroker
The broker[node1, 172.17.0.1:10911] boot success. serializeType=JSON

提示启动成功

  1. 通过nohup指令启动
nohup sh ./mqbroker -n localhost:9876 &
[2] 69248

查看broker启动日志

tail -f ~/logs/rocketmqlogs/broker.log
...
INFO main - The broker[node1, 172.17.0.1:10911] boot success. serializeType=JSON and name server is localhost:987

提示启动成功

测试

运行源文件中以写好的测试demo

export NAMESRV_ADDR=localhost:9876
# 生产者
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId=AC110001104B2B193F2D6EA72CC003E7...
# 消费者
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_20 Receive New Messages: [MessageExt [queueId=3, storeSize=179...

单点消息队列启动成功

关闭消息队列

通过mqshutdown命令关闭消息队列,依次关闭nameserver和broker

sh mqshutdown broker
The mqbroker(69255) is running...
Send shutdown request to mqbroker(69255) OK

sh mqshutdown namesrv
The mqnamesrv(68711) is running...
Send shutdown request to mqnamesrv(68711) OK

问题

broker内存不够

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /component/rocketmq-all-4.5.1-bin-release/bin/hs_err_pid68880.log

解决方案

报错原因是虚拟机启动内存不够,修改bin下的服务启动脚本 runserver.sh 、runbroker.sh 中对于内存的限制,

runserver.sh:
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

runbroker.sh:
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"

改成如下示例:

runserver.sh:
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"

runbroker.sh:
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m"

集群搭建

通过两台虚拟机(192.168.108.128和192.168.108.129)模拟集群

启动NameServer

分别启动两台虚拟机的NameServer,启动方式与单机模式相同

启动broker

两台虚拟机的broker互为主备,即各自启动一个Master和一个Slave,在启动broker之前需要修改相关配置文件

修改配置文件

在目录conf/2m-2s-sync中(两主两从,同步更新),该目录下有四个配置文件,分别对应两个Master和两个Slave配置

├── broker-a.properties     #Master-a配置
├── broker-a-s.properties   #Slave-a配置
├── broker-b.properties     #Master-b配置
└── broker-b-s.properties   #Slave-b配置

在这里我们需要修改192.168.108.128的broker-a.properties和broker-b-s.properties,即128这台机器是名字为broker-a的broker的主节点,是名称为broker-b的broker的从节点;相对应的192.168.108.129是名字为broker-a的broker的从节点,是名称为broker-b的broker的主节点,因此修改129机器的broker-b.properties和broker-a-s.properties配置文件。修改如下:

修改机器1的配置文件(192.168.108.128)

master:broker-a.properties

namesrvAddr=192.168.108.128:9876;192.168.108.129:9876   #配置nameserver地址
listenPort=10911                                     #broke监听端口号
storePathRootDir=/home/rocketmq/store-a                #存储消息和配置信息路径
brokerClusterName=DefaultCluster                      #集群名称
brokerName=broker-a                                  #broke名称,集群中master和slave通过相同的broke名来进行关联
brokerId=0                                          #0表示master,大于0为slave对应ID
deleteWhen=04                                       #删除消息时间,04表示凌晨4点
fileReservedTime=48                                  #磁盘上保存消息的时长,单位小时
brokerRole=SYNC_MASTER                               #broke角色,有三种角色:SYNC_MASTER、ASYNC_MASTER、SLAVE
flushDiskType=ASYNC_FLUSH                            #刷盘策略

slave:broker-b-s.properties

namesrvAddr=192.168.108.128:9876;192.168.108.129:9876   #配置nameserver地址
listenPort=11011                                     #broke监听端口号
storePathRootDir=/home/rocketmq/store-b                #存储消息和配置信息路径
brokerClusterName=DefaultCluster                      #集群名称
brokerName=broker-b                                  #broke名称,集群中master和slave通过相同的broke名来进行关联
brokerId=1                                          #0表示master,大于0为slave对应ID
deleteWhen=04                                       #删除消息时间,04表示凌晨4点
fileReservedTime=48                                  #磁盘上保存消息的时长,单位小时
brokerRole=SLAVE                                     #broke角色,有三种角色:SYNC_MASTER、ASYNC_MASTER、SLAVE
flushDiskType=ASYNC_FLUSH                            #刷盘策略

修改机器2的配置文件(192.168.108.129)

master:broker-b.properties

namesrvAddr=192.168.108.128:9876; 192.168.108.129:9876  #配置nameserver地址 
listenPort=10911                                     #broke监听端口号
storePathRootDir=/home/rocketmq/store-b                #存储消息和配置信息路径
brokerClusterName=DefaultCluster                      #集群名称
brokerName=broker-b                                  #broke名称,集群中master和slave通过相同的broke名来进行关联
brokerId=0                                          #0表示master,大于0为slave对应ID
deleteWhen=04                                       #删除消息时间,04表示凌晨4点
fileReservedTime=48                                  #磁盘上保存消息的时长,单位小时
brokerRole=SYNC_MASTER                               #broke角色,有三种角色:SYNC_MASTER、ASYNC_MASTER、SLAVE
flushDiskType=ASYNC_FLUSH                            #刷盘策略

slave:broker-a-s.properties

namesrvAddr=192.168.108.128:9876; 192.168.108.129:9876  #配置nameserver地址 
listenPort=11011                                     #broke监听端口号
storePathRootDir=/home/rocketmq/store-a                #存储消息和配置信息路径
brokerClusterName=DefaultCluster                      #集群名称
brokerName=broker-a                                  #broke名称,集群中master和slave通过相同的broke名来进行关联
brokerId=1                                          #0表示master,大于0为slave对应ID
deleteWhen=04                                       #删除消息时间,04表示凌晨4点
fileReservedTime=48                                  #磁盘上保存消息的时长,单位小时
brokerRole=SLAVE                                     #broke角色,有三种角色:SYNC_MASTER、ASYNC_MASTER、SLAVE
flushDiskType=ASYNC_FLUSH                             #刷盘策略

启动四个broker


nohup sh ./bin/mqbroker -c ./conf/2m-2s-sync/broker-a.properties &
nohup sh ./bin/mqbroker -c ./conf/2m-2s-sync/broker-b-s.properties & 

nohup sh ./bin/mqbroker -c ./conf/2m-2s-sync/broker-b.properties &
nohup sh ./bin/mqbroker -c ./conf/2m-2s-sync/broker-a-s.properties & 

2019-07-25 14:00:19 INFO BrokerControllerScheduledThread1 - Update slave consumer offset from master, 192.168.108.128:10911
2019-07-25 14:00:19 INFO BrokerControllerScheduledThread1 - Update slave delay offset from master, 192.168.108.128:10911
2019-07-25 14:00:20 INFO brokerOutApi_thread_2 - register broker[0]to name server 192.168.108.129:9876 OK
2019-07-25 14:00:20 INFO brokerOutApi_thread_1 - register broker[0]to name server 192.168.108.128:9876 OK


名两行出现broker注册到nameserver成功,则集群搭建成功

问题

Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <172.17.0.2:10911> failed

解决方案

出现该问题是因为虚拟机中搭建了docker产生了虚拟网卡过多,RocketMQ在访问docker网络时不通产生问题。 首先关闭docker服务

systemctl stop docker
systemctl is-enabled  docker         #查询是否自启动
systemctl disable  docker            #禁止自启动

然后重启虚拟机即可解决

测试

通过java代码对集群进行测试

生产者代码:

public class producer {
    public static void main(String[] args) throws Exception {
        //创建生产者,并设置group
        DefaultMQProducer producer = new DefaultMQProducer("group");
        //设置nameserver
        producer.setNamesrvAddr("192.168.108.128:9876");
        //启动生产者
        producer.start();
        //创建发送的消息,发送100条数据
        for (int i = 0; i < 100; i++){
            Message msg = new Message("TopicTest", "TagA",("MQ Test"+i).getBytes(RemotingHelper.DEFAULT_CHARSET));
            //发送
            SendResult result = producer.send(msg);
            System.out.println(result);
        }
        //关闭生产者
        producer.shutdown();
    }
}

消费者代码

public class consumer {
    public static void main(String[] args) throws Exception {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group");
        consumer.setNamesrvAddr("192.168.108.128:9876");
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
        consumer.subscribe("TopicTest", "*");
        consumer.registerMessageListener((MessageListenerConcurrently) (list, consumeConcurrentlyContext) -> {
            System.out.println(Thread.currentThread().getName() + " Receive Message: " + list);
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        });
        System.out.println("consumer start...");
        consumer.start();
    }
}

测试结果

生产者

从控制台可以看到,在消费者端显示消息发送成功的数据,sendStatus均为ok,消费者端显示读取出来对应的消息,集群搭建成功

可视化管理平台

RocketMQ拥有一个可视化的管理平台,可以通过图形界面的方式查看集群情况、topic、生产者、消费者等具体信息 地址: RocketMQ扩展,项目拉下来后进入目录rocketmq-console 项目使用springboot搭建,在配置文件application.properties中修改配置rocketmq.config.namesrvAddr

rocketmq.config.namesrvAddr=192.168.108.128:9876;192.168.108.129:9876

启动项目,运行App.java。访问localhost:8080即可进入管理平台

SpringBoot中使用RocketMQ 接下来我们模拟一种场景:商品下单成功之后,向下单用户发送短信。以此来示例SpringBoot中RocketMQ的使用方式。 目录 1 订单微服务发送消息 1.1 订单微服务添加rocketmq的依赖 1.2 添加配置 1.3 编写测试代码 1.4 测试 2 用户微服务订阅消息 2.1 用户微服务增加rocketmq依赖 2.2 修改主类,启动nacos客户端 2.3 修改配置文件 2.4 编写消息接收服务 2.5 测试 1 订单微服务发送消息 1.1 订单微服务添加ro. 阅读详情

相关推荐

Win10搭建rocketmq遇到的问题及解决办法

由于项目需要与第三方交互,而第三方提供得对接方式是rocketmq,所以开始了熟悉rocketmq-搭建环境-写代码之路。 按照网上的一些教程启动NAMESERVER,启动BROKER都没问题,但是到了编译rocketmq-console就出了问题: 1.cmd提示mvn不是内部命令,因为我是个java白痴(工作后主要用于开发的语言是C++),查了网上资料才了解需要配置maven环境,我是参考[添...

qq_21722303的博客 1858

RocketMQ可视化管理平台rocket-console

下载地址 https://github.com/apache/incubator-rocketmq-externals/tree/master/rocketmq-console 源码编译 mvn clean package -Dmaven.test.skip=true 运行 java -jar rocketmq-console-ng-1.0.0.jar --server.port

骑猪喝咖啡 1万+

mac 搭建rocketmq环境

搭建 rocketmq https://github.com/apache/rocketmq/releases下载github你想要的版本 unzip rocketmq-all-4.6.0-source-release.zip # 解压 cd rocketmq-all-4.6.0/ mvn -Prelease-all -DskipTests clean install -U # 编译...

youn 1424

Apache RocketMQ 概览

简介 Apache RocketMQ 是阿里开源的一款高性能、高吞吐量的分布式消息中间件。相比于 Kafka,其拥有更好的实时性和消息可靠性。更适用于和 Money 相关的系统。它支持如下特性: 订阅/发布模式的消息 支持消费组模式的消费,即一个消费组集群内只有一个实例会收到那一条消息。 延时消息 只支持特定 Level 的延时设置,默认有 “1s 5s 10s 30s 1m 2m 3m...

Vioao's Blog 1105

RocketMQ集群搭建记录(三主三从)

一、方案目标: - 三主三从 - 异步同步消息 - 异步刷盘 二、机器信息: 共三台机器,每台上分别布有一台主从。 如下: 机器1 broker-a broker-b-s 机器2 broker-b broker-c-s 机器3 broker-c broker-a-s 三、搭建步骤: 1 上传解压,新建目录 上传压缩包至 /tmp,解压到/usr/local unzip 压缩包名(rocketXXXX)...

wulitaotao96的博客 3180

RocketMQ MQTT 快速搭建验证

来自业务的需求,需要快速搭建一套支持 MQTT 协议的消息系统。

github yx9o Apache RocketMQ & ShardingSphere Committer 2996

Docker搭建RocketMQ问题及解决方案

本文为Docker搭建RocketMQ问题及解决方案转载请注明:http://blog.youkuaiyun.com/sinat_28434649/article/details/792919881、环境OS:Linux Docker:1.6.2 RocketMQ:4.2搭建参考rocketmq-docker,请下载该工程1.2、构建mqnamesrv镜像下载rocketmq-docker#构架镜像 sh d...

sinat_28434649的博客 9184

记一次rocketmq消费者DefaultMQPushConsumer启动失败

本人运行的springboot项目是在windows环境下; springboot版本是1.3.0 使用的是gradle构建项目 由于springboot版本比较低,使用的原生rocketmq 添加依赖: compile "com.alibaba.rocketmq:rocketmq-client:3.2.6" windows环境下使用命令部署启动项目 问题: 报错如下: com.alibaba.rocketmq.client.exception.MQClientException.

DN金猿的博客 2989

rocketmq集群搭建笔记

本次搭建的是双Master+双Slave集群模式笔记最后记录了本次安装出现的一些问题,以及解决方法。

西城风雨楼 917

OpenClaw + Ollama 本地大模型部署教程:彻底告别Token焦虑

OpenClaw + Ollama 本地大模型部署教程:彻底告别Token焦虑

leaning_java的博客 1228

SAP BTP开发入门:从PaaS到CAP/UI5的30天学习路线

在云计算与数字化转型的大背景下,企业系统集成与云端扩展需求激增,传统的单点开发模式正面临深刻变革。PaaS(平台即服务)作为云原生的核心概念,将基础设施、开发环境与应用服务统一封装,为企业提供了灵活的扩展能力。SAP BTP正是SAP生态中的PaaS平台,它承载着系统集成、低代码开发、AI服务与数据管理,成为连接S/4HANA等核心业务系统与创新应用的桥梁。对于ABAP开发者而言,掌握BTP不仅是技能升级,更是应对从传统部署向云端订阅模式转型的必由之路。本文从平台基础出发,梳理BTP的核心服务与开发模型(如

weixin_31766003的博客 285

Java架构学习(三十五)RocketMQ基础&rocketMQ概述&rocketMQ原理&rocketMQ集群&rocketMQ搭建集群&rockeyMQAPI&rocketMQ解决幂等问题

一、rocketMQ概述 1、rocketmq:分布式消息中间件,支持集群,效率非常高。 2、activityMQ是点对点通讯,发布订阅、 本身不支持集群,不支持分布式。 为什么MQ发生消息堆积,消费者不会宕机? 答:因为MQ中有消息缓存机制。 MQ发生消息堆积,消费者不会宕机,但是消息中间件可能会宕机。 3、rocketmq 海量消息堆积、支持上万个队列。 4、消息中间件集群的目的是什么...

Leeue李月 553

deepin搭建samba服务器

一.为什么要用Samba? Samba的主要任务就是实现Linux系统和Windows系统之间的资源共享。二.需要的软件? 我是在deepin上实现的,在终端中使用一下两句命令,就可以安装Samba的软件包 $sudo apt-get install samba //安装samba 三.Samba服务的组成 Samba的核心是两个守护进程smbd和nmbd。当然,它

xbrother123的博客 8598

RocketMQ 环境搭建指南(一)

RocketMQ 环境搭建指南(一)

1373

吉比特-笔试

1. 题一:打雷后下雨的概率是80%,而打闪电后下雨的概率是70%,那么即打雷又打闪电后下雨的概率是多少?   答:打雷后下雨和打闪电后下雨都是独立事件,P=1-又打雷又闪电但没下雨的概率= 1 - 0.2 *0.3 = 94%        题二:打雷后下雨的概率是80%,但是没打闪电后下雨的概率是20%,那么打雷了但没打闪电后下雨的概率是多少?答:P=0.8 *0.2 / ( 0.8 *0

naturism的专栏 2496

HID报告描述符实战解析:从Usage到Item的完整设计流程

本文深入解析了HID报告描述符的设计流程,从核心概念Usage(用途定义)入手,详细阐述了如何通过Item(条目)的三种角色——全局、局部与主干,构建出能被系统正确识别的设备“说明书”。文章以标准USB鼠标和键盘为例进行实战拆解,并介绍了使用Report ID与自定义设备等进阶设计方法,帮助开发者掌握这一实现USB设备即插即用的关键技术。

weixin_29230865的博客 282

Docker使用docker-compose搭建部署 RocketMQ 出现broker 253退出问题解决

在Docker中,每个容器都有自己的文件系统,而且默认情况下,容器内的进程以非特权用户身份运行。因此,如果您将RocketMQ的日志和存储挂载到home目录下,可能会出现权限问题,因为容器内的进程无法访问该目录。另外,您还可以通过在Dockerfile中设置USER指令,将容器内的进程以特权用户身份运行,从而避免权限问题。相反,如果您将RocketMQ的日志和存储挂载到root目录下,容器内的进程就可以访问该目录,因为root用户拥有对整个文件系统的完全访问权限。再次启动,服务均可以正常启动。

cyb_123的博客 1716

[统计模型] 基于R的潜在剖面分析(LPA)

本文主要介绍基于R进行潜在剖面分析(Latent Profile Aanalysis, LPA)。 关于潜在类别分析LCA/潜在剖面分析LPA的概念和区别,可以参考一下这篇文章: 潜在类别分析LCA \潜在剖面分析LPA介绍https://www.jianshu.com/p/4c830094131e?utm_campaign=maleskine 但是此文对潜类别分析的阐释还比较生涩,而且没有具体的代码编写、模型优选等内容。本文旨在丰富LPA的内容,并希望和大家交流、共同进步。 1. 什么是潜类别分.

bigstar863的博客 1万+

rocketmq在linux搭建双master遇到的坑

rocketmq在linux搭建双master遇到的坑 我的环境 两台阿里云centos7服务器 首先,去官网下载解压包,解压。 然后进入bin目录,需要修改runserver.sh文件和runbroker.sh文件。因为rocketmq默认配置文件需要的内存是非常高的。需要改小点。 就是把那两个文件的这个参数改得小点。改成512m就可以了 然后启动Name Serve...

秋天的博客 365

虚拟电厂功率预测最佳实践白皮书

虚拟电厂(VPP)通过聚合分散的可再生能源资源,为电网提供可观测、可调度和可交易的解决方案。本文提出了一套功率预测方法论,并给出LSTM实现脚本,涵盖资源接入、数据治理、预测模型设计及市场交易闭环。针对风-光-储-负荷混合场景,该方法论强调轻量化部署和滚动优化,可有效提升预测精度和调度收益。未来研究将融合深度气象预报和强化学习,进一步优化VPP的协同调度能力。

专注AI大模型,软件混淆,授权 377

手把手教你学Simulink--基于Simulink的高速公路自动驾驶场景仿真建模

特点车道保持:自动调整车辆方向以保持在车道中央。自适应巡航控制(ACC):根据前方车辆的速度自动调节车速。换道辅助:安全地变换车道以超过慢速行驶的车辆或准备驶离高速公路。紧急制动:检测潜在碰撞并采取措施避免事故。挑战安全性:确保所有功能在各种条件下都能可靠运行。实时性:处理大量传感器数据,并迅速做出反应。复杂性:集成多个子系统,包括感知、规划与控制。首先明确要模拟的任务内容。车辆需保持在车道内行驶。根据交通情况自动调整速度。安全地执行换道操作。在必要时实施紧急制动。

MHD0815的博客 247

RocketMQ的Broker启动时报空指针异常

Rocket集群部署的时候,由于提前创建store目录,导致broker启动时报空指针异常

reniidong的博客 943

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

rocketmq及控制台搭建

rocketmq 下载 各版本下载 选择 rocketmq-all-xxx-bin-release.zip 配置 参考文档 下载后的文件导入linux并解压 unzip rocketmq-all-4.6.0-bin-release.zip 编辑runbroker.sh和runserver.sh修改默认JVM大小 cd rocketmq-all-4.6.0-bin-release/bin/ vi runbroker.sh vi runserver.sh # 参考设置 JAVA_OPT="${

wangjinkui的博客 5625

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RocketMQ的安装使用以及踩过的坑

  好久没写博客了,由于最近刚工作需要用到RocketMQ,所以自己也简单搭建了一下RocketMQ,本文为最简单的搭建方法,只有一个namesrv和一个broker,本文只提供搭建方法、demo和踩过的坑,并不解释RocketMQ的原理等,至于原理,请同学们自己度娘或者点本文下面的连接。1.所需软件:   Cent OS  alibaba-rocketmq-3.2.6.tar.gz,在进行安装前...

Jipon 7191

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

RocketMQ集群搭建(2m-2s-sync)及搭建中遇到的问题

RocketMQ集群搭建(2m-2s-sync)及搭建中遇到的问题       在学习一门技术之前,首先应该弄明白这门技术的使用流程或者说是运行流程,这样在代码开发、环境搭建上都会有很大的帮助,首先我们梳理下2m-2s-sync的原理图,如下: 1.各个角色及功能 (1)Producer生产者:生产并发送消息 (2)Consumer消费者:消费处理消息 (3)Broker:消息存储,生产者发送消息到broker,同时broker可完成消息的持久化

qq_36816062的博客 924
上一篇: Apache common-pool对象池介绍
下一篇: CopyOnWriteArrayList是如何保证线程安全的?
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值