当前位置: 首页 > backend >正文

RocketMQ-

第一课

下载源码并编译安装

这个broker对应的jar包启动时,传入到启动方法中的JVM参数

可以看到默认broker的最大内存和最小内存就是8G,如果虚拟机的内存不足8G,那么./mqBroker启动broker就会报错。所以需要把这几个参数值改小一点

提示找不到node-01这个主机名对应的ip地址

默认不加参数,就是启动broker,并直接在本机中找nameserver进行注册,我们也可以在启动时制定往哪台nameserver上连接

测试发送和接收消息

数据发送失败,提示找不到这个topic(就是因为当前要发送消息的broker,没有注册到nameserver上去)

通过启动broker,并注册到指定的nameserver后

此时,client端发送数据就成功了,可以看到发送的数据的topic就是TopicTest

消费者消费消息

rocketmq-console

像rocketmq-4.6.1-master这个里面就有pom文件,rocketmq-4.6.1-master目录下有namesrv、brokker、client、等等,master目录中有pom文件,所以这就是一个聚合项目,可以整个使用一次mvn命令进行编译

这里编译完成以后,是生成一个springboot框架的控制台项目jar包,我们需要通过jar -jar来启动这个控制台项目

正常java项目打包出来就是jar包,我们需要通过jar -jar来启动项目,就如当前的rocketmq-console项目,而上面的rocketmq-master可以通过./mqbroker启动项目,是因为写了runborker.sh的shell脚本文件,runborker.sh的shell脚本文件中就配置了很多JVM的启动参数等

这就是这个springboot项目的配置文件

或者,因为这是一个springboot项目,所以我们可以在jar -jar启动springboot项目的jar,在后面跟上一些参数

这个springboot写的控制台项目就启动起来了

可以看到有broker TOP 10的展示,说明RocketMQ生来就是为了多集群多broker,大数据量的存储而生的

整体架构

nameserver是无状态的(主要是为了高可用),也就是它里面什么属性、状态都不记录,所有的nameserver都是对等的,都干一模一样的事情,多台nameserver中缺了哪台都无所谓

producer只能连master,consumer既可以连master、又可以连slave进行消费

zk,没有自己写的nameserver的性能高。nameserver使用的是CAP中的AP,多个nameserver之间是不保证一致性的

dubbo、springcloud、rocketMQ的producer都是客户端负载均衡的典型,客户端侧缓存服务列表,自己选择负载均衡算法,快速失败以后,可以快速的发起重试调用,追求速度

Nginx、LVS这是服务端负载均衡的典型

第二课

消息消费

如果不执行shutdown,那么producer会和broker一直建立长连接不关闭,producer会一直保持运行

broker把一条消息push给了消费者A,消费者需要给broker回送CONSUME_SUCCESS或者RECONSUME_LATER这样的ACK确认,如果broker长时间没有收到这条消息对应从消费者A回来的ACK,那么broker会把这条消息重新投递给消费者B

异步消息发送

异步发送时,不能随便shutdown,因为无法确认异步发送的回调是什么时候来的

可以看到是,先停机、然后异步发送的回调才回来,并执行onException()方法

http://www.xdnf.cn/news/15308.html

相关文章:

  • 【字符串移位包含问题】2022-8-7
  • Opencv---深度学习开发
  • 单细胞入门(1)——介绍
  • 电商订单数据分析全流程:从数据处理到可视化洞察
  • 【PTA数据结构 | C语言版】车厢重排
  • Geant4 安装---Ubuntu
  • 【深度剖析】致力“四个最”的君乐宝数字化转型(下篇:转型成效5-打造数字化生存能力探索可持续发展路径)
  • 26. 删除有序数组中的重复项
  • 【MySQL笔记】事务的ACID特性与隔离级别
  • 详细理解向量叉积
  • 二分搜索 (左程云)
  • 【C/C++】编译期计算能力概述
  • uniapp弹出手机键盘,布局被顶飞,导致页面混乱问题
  • 使用Pycharm集成开发工具远程调试部署在虚拟机上的flask项目:超级详细的完整指南
  • Rust Web 全栈开发(六):在 Web 项目中使用 MySQL 数据库
  • Transforms
  • 单向链表反转 如何实现
  • JVM的垃圾回收算法和多种GC算法
  • Redis面试精讲 Day 1:Redis核心特性与应用场景
  • Day59
  • JavaWeb(苍穹外卖)--学习笔记05(MD5)
  • 2D转换之缩放scale
  • Cursor创建Spring Boot项目
  • 关于赛灵思的petalinux zynqmp.dtsi文件的理解
  • 网络连接:拨号连接宽带PPPOE
  • 使用 Java 开发大数据应用:Hadoop 与 Java API 的结合
  • Golang 面向对象(封装、继承、多态)
  • Eureka实战
  • Git企业级开发(多人协作)
  • 【设计模式】装饰(器)模式 透明装饰模式与半透明装饰模式