![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
消息中间件(Kafka & RabbitMQ)
文章平均质量分 94
消息中间件(Kafka & RabbitMQ)
奋斗的小媛
这个作者很懒,什么都没留下…
展开
-
RabbitMQ存储和队列结构
了解一些 RabbitMQ 的实现原理也是很有必要的,它可以让你在遇到问题时能透过现象看本质。比如一个队列的内部存储其实是由5个子队列来流转运作的,队列中的消息可以有4种不同的状态等,通过这些可以明白在使用 RabbitMQ 时尽量不要有过多的消息堆积,不然会影响整体服务的性能。存储机制RabbitMQ存储层包含两个部分:队列索引和消息存储。RabbitMQ消息有两种类型:持久化消息和非持久化消息,这两种消息都会被写入磁盘。持久化消息在到达队列时写入磁盘,同时会内存中保存一份备份,当内存吃紧时.转载 2021-05-06 23:38:40 · 485 阅读 · 0 评论 -
订单付款倒计时实现方案
当使用 12306 抢票成功后,就会进入付款界面,这个时候就会出现一个订单倒计时,下面我们就对付款倒计时的功能实现,进行深入学习和介绍,界面展示如下:[外链图片转存失败,源站可能如何实现付款及时呢,首先用户下单后,存储用户的下单时间。下面介绍四种系统自动取消订单的方案:一、DelayQueue 延时无界阻塞队列我们的第一反应是用 数据库轮序+任务调度 来实现此功能。但这种高效率的延迟任务用任务调度(定时器)实现就得不偿失。而且对系统也是一种压力且数据库消耗极大。因此我们使用 Java 延迟队列.原创 2021-04-19 19:52:49 · 1568 阅读 · 1 评论 -
消息中间件的优缺点
原创 2020-06-03 23:31:40 · 223 阅读 · 0 评论 -
docker快速安装rabbitmq
一、找到需要的镜像,management是带界面的docker search rabbitmq:management如图所示,我们安装带界面的rabbitmq:二、现在我们来下载rabbitmqdocker pull rabbitmq:management如图所示,镜像就下载下来了注意:如果docker pull rabbitmq 后面不带management,启动rabbitmq后是无法打开管理界面的,所以我们要下载带management插件的rabbitmq....原创 2020-06-08 22:59:17 · 148 阅读 · 0 评论 -
Kafka如何保证消息的顺序性
1. 问题比如说我们建了一个 topic,有三个 partition。生产者在写的时候,其实可以指定一个 key,比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到同一个 partition 中去,而且这个 partition 中的数据一定是有顺序的。消费者从 partition 中取出来数据的时候,也一定是有顺序的。到这里,顺序还是 ok 的,没有错乱。接...转载 2020-04-09 12:32:14 · 421 阅读 · 0 评论 -
Kafka如何保证消息的可靠性传输
1.消费端弄丢了数据唯一可能导致消费者弄丢数据的情况,就是说,你消费到了这个消息,然后消费者那边自动提交了 offset,让 Kafka 以为你已经消费好了这个消息,但其实你才刚准备处理这个消息,你还没处理,你自己就挂了,此时这条消息就丢咯。这不是跟 RabbitMQ 差不多吗,大家都知道 Kafka 会自动提交 offset,那么只要关闭自动提交offset,在处理完之后自己手动提交 ...转载 2020-04-09 12:28:01 · 422 阅读 · 0 评论 -
kafka是如何保证消息不被重复消费的
一、kafka自带的消费机制 kafka有个offset的概念,当每个消息被写进去后,都有一个offset,代表他的序号,然后consumer消费该数据之后,隔一段时间,会把自己消费过的消息的offset提交一下,代表我已经消费过了。下次我要是重启,就会继续从上次消费到的offset来继续消费。 但是当我们直接kill进程了,再重启。这会导致consumer有些消息处理了,但是没来得及...转载 2020-04-09 12:21:37 · 1373 阅读 · 0 评论 -
如何保证kafka的高可用性
(1)kafka的一个基本架构:多个broker组成,一个broker是一个节点;你创建一个topic,这个topic可以划分成多个partition,每个partition可以存在于不同的broker上面,每个partition存放一部分数据。这是天然的分布式消息队列。实际上rabbitmq并不是分布式消息队列,他就是传统的消息队列,只不过提供了一些集群、HA的机制而已,因为无论如何配...转载 2020-04-09 12:02:21 · 1750 阅读 · 0 评论 -
消息队列kafka、activemq、ribbitmq的俩种消息模式区别
JMS规范目前支持两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic)。1.1、点对点:Queue,不可重复消费消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。Queue支持存在多个消费者,但是...原创 2020-04-09 11:24:09 · 204 阅读 · 0 评论 -
RabbitMQ 消息中间件总结
RabbitMQ 是实现高级消息队列协议(AMQP:Advanced Message Queue Protocol)的开源代理软件,也称为面向消息的中间件。支持多种操作系统、多种编程语言。RabbitMQ 服务器使用 Erlang 语言编写,其集群和故障转移是构建在开放电信平台框架上的。AMQP 是一个面向消息中间件的开放式应用层协议。定义消息方向、消息队列、消息路由、可靠性、安全性等特性。要求消息的提供者和客户端接收者的行为要实现对不同供应商可以用相同的方式(FTP/HTTP/SMTP等)进行互相操作原创 2021-03-16 19:07:29 · 155 阅读 · 1 评论 -
java面试---消息中间件之kafka、activemq、ribbitmq、rocketmq详解与区别
首先我们说说为什么要使用队列,什么情况下才会使用队列?实时性要求不高,且比较耗时的任务,是队列的最佳应用场景。比如说我在某网站注册一个账号,当我的信息入库注册成功后,网站需要发送一封激活邮件,让我激活账号,而这个发邮件的操作并不是需要实时响应的,没有必要卡在那个注册界面,等待邮件发送成功,再说发送邮件本来就是一个耗时的操作(需要调用第三方smtp服务器),此时,选择消息队列去处理。注册完成...原创 2020-03-30 16:01:54 · 660 阅读 · 0 评论