Apache RocketMQ

RabbitMQ核心组件及应用场景

我是研究僧i 提交于 2020-04-24 14:19:48
一、适用场景 1.解耦 2.最终一致性 3.广播 4.错峰与流控(秒杀业务用于流量削峰场景) 秒杀场景 二、核心组件,关键点(交换器、队列、绑定) AMPQ消息路由必要三部分:交换器、队列、绑定。 Java核心组件:ConnectionFactory、Connection、Channel、Delivery、DeliverCallback、CancelCallback 队列 1. 建立连接 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("127.0.0.1"); factory.setPort(5672); factory.setUsername("admin"); factory.setPassword("admin"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); 2. 声明队列 如果在同一条信道上订阅了另一个队列,那就不能再声明队列,必须先取消订阅。 Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,

RocketMQ安装

时光总嘲笑我的痴心妄想 提交于 2020-04-21 17:00:03
初始化安装环境 下载RocketMQ安装包 wget http://mirror.bit.edu.cn/apache/rocketmq/4.6.1/rocketmq-all-4.6.1-bin-release.zip 安装jdk yum install -y jdk8 启动namesrv #执行脚本调整系统参数 bash /opt/rocketmq/bin/os.sh #vim /lib/systemd/system/rocketmq-nameserver.service --------------- cat > /lib/systemd/system/rocketmq-nameserver.service << EOF [Unit] Description=rocketmq-nameserver After=syslog.target network.target remote-fs.target nss-lookup.target ​ [Service] User=admin Type=simple ExecStart=/bin/sh /opt/rocketmq/bin/mqnamesrv ExecStop=/bin/sh /opt/rocketmq/bin/mqshutdown namesrv Restart=always PrivateTmp=true ​

rocketmq HA主从消息同步

为君一笑 提交于 2020-04-21 03:41:41
HA主从可用核心类 基于NIO的ServerSocketChannel Channel Selector 建立HAConnection 负责M_S之间的数据同步 AcceptSocketService 是用来主从服务器之间建立TCP连接的类,负责创建HAConnection GroupTransferService 是一个通知线程,用于通知 等待HA同步结果而阻塞的消息发送者线程 HAClient是实现主从同步功能的核心类 this.selector.select(1000); 进行事件选择,时间间隔为1s 过程: 1 slave服务器连接master服务器 2 master和slave之间的心跳间隔默认是3s,判断是否要将偏移量发送给master服务器 3 向master反馈拉取偏移量 4进行事件选择,执行间隔1s 5处理master返回的消息 会将主从服务器的连接SocketChannel封装成HAConnection 对象。进行读写操作 来源: oschina 链接: https://my.oschina.net/iioschina/blog/3285760

消息过滤tag,sql过滤FilterServer

a 夏天 提交于 2020-04-20 14:17:25
FilterServer会在启动时创建定时调度任务,每隔10s向Broker注册自己 1构建订阅消息,创建消息拉取任务 2定时将类过滤模式的过滤类源码上传到FilterServer 3根据消息消费组与主题名称构建filterClassTable缓存key,从缓存表中 获取过滤消息信息FilterClassInfo., 4允许消费者上传过滤类,用jdk提供方法将源代码编译,装载链接 5 rocketmq消息过滤发生在消息消费的时候,PullMessageService线程 6 消息过滤模式为classfilter,将拉取消息broker地址变成borker对应的FilterServer,从路由信息中 获取FilterServer列表 来源: oschina 链接: https://my.oschina.net/iioschina/blog/3276052

Docker 本地导入镜像/保存镜像/载入镜像/删除镜像

徘徊边缘 提交于 2020-04-19 15:01:05
1、Docker导入本地镜像 有时候我们自己在本地或者其它小伙伴电脑上拷贝了一份镜像,有了这个镜像之后,我们可以把本地的镜像导入,使用docker import 命令。 例如这里下载了一个 alibaba-rocketmq-3.2.6.tar.gz 镜像文件,使用下列命令导入: [root@rocketmq-nameserver4 dev]# cat alibaba-rocketmq-3.2.6.tar.gz | docker import - rocketmq:3.2.6 (镜像名自己定义) [root@rocketmq - nameserver4 dev]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE rocketmq 3.2 . 6 53925d1cf9f0 23 seconds ago 14MB my /python v1 36b6e288656c 2 days ago 281MB my /centos_width_python v1. 0.1 36b6e288656c 2 days ago 281MB my /sinatra v2 8ba1d6a3ce4e 2 days ago 453MB hello -world latest 725dcfab7d63 4 months ago 1 .84kB 可以看到导入完成后

2020最新高并发架构消息队列面试题解析(建议收藏)

冷暖自知 提交于 2020-04-18 19:47:47
面试题: 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析 其实面试官主要是想看看: 第一,你知不知道你们系统里为什么要用消息队列这个东西? 不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。 其实说白了,就是为了用而用,或者是别人设计的架构,他从头到尾都没思考过。 没有对自己的架构问过为什么的人,一定是平时没有思考的人,面试官对这类候选人印象通常很不好 因为面试官担心你进了团队之后只会木头木脑的干呆活儿,不会自己思考。 第二,你既然用了消息队列这个东西,你知不知道用了有什么好处&坏处? 你要是没考虑过这个,那你盲目弄个 MQ 进系统里,后面出了问题你是不是就自己溜了给公司留坑? 你要是没考虑过引入一个技术可能存在的弊端和风险,面试官把这类候选人招进来了,基本可能就是挖坑型选手。 就怕你干 1 年挖一堆坑,自己跳槽了,给公司留下无穷后患。 第三,既然你用了 MQ,可能是某一种 MQ,那么你当时做没做过调研? 你别傻乎乎的自己拍脑袋看个人喜好就瞎用了一个 MQ,比如 Kafka,甚至都从没调研过业界流行的 MQ 到底有哪几种。每一个 MQ 的优点和缺点是什么。 每一个 MQ 没有绝对的好坏,但是就是看用在哪个场景可以扬长避短

java程序员跳槽难吗?掌握面试五个核心要素,跳槽阿里也不是难事

≯℡__Kan透↙ 提交于 2020-04-18 17:48:12
现在疫情已经好转很多,相信现在很多朋友都已经复工了,但也有很多人都面临失业或想要跳槽的情况,不管那种情况金三已经过去了,银四已经过半了, 你将作何准备迎接这个找工作季节呢? 倘若你打算在现在换工作的话,那样做为1个Java工程师,应当怎样使用一个月的时间,迅速的为即将来临的招聘面试开展充足的准备呢? 站在面试官的角度: 给大伙儿深入分析了平日互联网企业是怎样多方位的考察1个候选人的。 小结下去,面试官调查候选人的时候首要是从技术广度、技术深度、基本功底、系统设计、项目经验好多个角度来开展的。 这么本文我们就对于每一大块内容,主要的来讲一下调查的许多点。更关键的,是对于调查的那些点,怎样来迅速的做好准备。 一、技术广度 技术广度,说白了,你做为1个及格的工程师在开发设计1个系统,进行某些实际的技术任务的时候,必定是要采用到许多的技术的, 并且对于那些技术还必须熟练掌握有些十分普遍,各类不一样的系统或者都会涉及的一些技术构架/技术方案。 举例说明: 1个互联网企业的较为关键的系统,首要毫无疑问会采用分布式服务框架 例如:dubbo/spring cloud,那样都可以将系统拆分成分布式的架构,换句话说如今很流行的讲法是微服务架构,那样一个人负责一个服务并且是一个子系统。 紧接着这一系统很可能为了支撑某些独特的技术性情景会采用别的各类技术。

RabbitMQ和Kafka到底怎么选?

情到浓时终转凉″ 提交于 2020-04-18 11:34:55
前言 开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程选择时,往往眼花缭乱,不知所措。对于RabbitMQ和Kafka,到底应该选哪个? RabbitMQ架构 RabbitMQ是一个分布式系统,这里面有几个抽象概念。 broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。 master queue:每个队列都分为一个主队列和若干个镜像队列。 mirror queue:镜像队列,作为master queue的备份。在master queue所在节点挂掉之后,系统把mirror queue提升为master queue,负责处理客户端队列操作请求。注意,mirror queue只做镜像,设计目的不是为了承担客户端读写压力。 如上图所示,集群中有两个节点,每个节点上有一个broker,每个broker负责本机上队列的维护,并且borker之间可以互相通信。集群中有两个队列A和B,每个队列都分为master queue和mirror queue(备份)。那么队列上的生产消费怎么实现的呢? 队列消费 如上图有两个consumer消费队列A,这两个consumer连在了集群的不同机器上。RabbitMQ集群中的任何一个节点都拥有集群上所有队列的元信息,所以连接到集群中的任何一个节点都可以

RabbitMQ和Kafka到底怎么选?

孤人 提交于 2020-04-18 11:34:37
前言 开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程选择时,往往眼花缭乱,不知所措。对于RabbitMQ和Kafka,到底应该选哪个? RabbitMQ架构 RabbitMQ是一个分布式系统,这里面有几个抽象概念。 broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。 master queue:每个队列都分为一个主队列和若干个镜像队列。 mirror queue:镜像队列,作为master queue的备份。在master queue所在节点挂掉之后,系统把mirror queue提升为master queue,负责处理客户端队列操作请求。注意,mirror queue只做镜像,设计目的不是为了承担客户端读写压力。 如上图所示,集群中有两个节点,每个节点上有一个broker,每个broker负责本机上队列的维护,并且borker之间可以互相通信。集群中有两个队列A和B,每个队列都分为master queue和mirror queue(备份)。那么队列上的生产消费怎么实现的呢? 队列消费 如上图有两个consumer消费队列A,这两个consumer连在了集群的不同机器上。RabbitMQ集群中的任何一个节点都拥有集群上所有队列的元信息,所以连接到集群中的任何一个节点都可以

我们为什么要使用RabbitMQ?

夙愿已清 提交于 2020-04-18 05:54:27
一、前言 这篇文章就是讲RabbitMQ的好处,你可能要说RocketMQ很好呀,我们主要看上的就是RabbitMQ支持多语言的客户端,很符合我们公司的现状,不要我们花费功夫去搞一个客户端,所以下面请大家不要吐槽,我们就来静心听听RabbitMQ的好; 二、RabbitMQ 在消息队列的一发一收中,我们来看下RabbitMQ怎么让我们放心使用的?首先我们来看下RabbitMQ发收的过程: 发消息的过程(生产者): 1.连接到RabbitMQ Borker,建立一个连接(Connection),开启一个信道(Channel); 2.声明交换机(Exchange); 3.声明队列(Queue); 4.通过路由键(Binding Key)将交换机与路由器绑定; 5.发送消息(消息包含路由键(Routing Key)和交换机等内容)到RabbitMQ Borker; 6.交换机根据接收到路由键去匹配到相应的队列中,如果找到则放入到对应的队列中,找不到则退回(这里是根据配置信息来的); 7.关闭; 收消息的过程(消费者): 1.连接到RabbitMQ Borker,建立一个连接,开启一个信道; 2.请求接收RabbitMQ Borker中队列的消息; 3.等待RabbitMQ Borker回应返回队列中相应的消息; 4.消费者接收到消息,返回确认(ack); 5