
MQ
木木那年
从事java相关
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《我要进大厂》- MQ夺命连环11问
你们为什么使用mq?具体的使用场景是什么?mq的作用很简单,削峰填谷。以电商交易下单的场景来说,正向交易的过程可能涉及到创建订单、扣减库存、扣减活动预算、扣减积分等等。每个接口的耗时如果是100ms,那么理论上整个下单的链路就需要耗费400ms,这个时间显然是太长了。如果这些操作全部同步处理的话,首先调用链路太长影响接口性能,其次分布式事务的问题很难处理,这时候像扣减预算和积分这种对实时一致性要求没有那么高的请求,完全就可以通过mq异步的方式去处理了。同时,考虑到异步带来的不一致的问题,我们可以转载 2020-11-24 18:15:08 · 533 阅读 · 0 评论 -
Kafka从入门到原理
目录一、kafka概述1.1、定义1.2、消息队列1.2.1、传统的消息队列&新式的消息队列的模式1.2.2、使用消息队列的好处1.2.3、消息队列的模式1.3、kafka的基础架构1.4、kafka安装1.5、启动kafka1.6、kafka操作1.7、启动生产者生产消息,kafka自带一个生产者和消费者的客户端二、kafka架构深入2.1、kafka的工作流程2.2、kafka原理三、kafka的生产者和消费者3.1、kafk.转载 2020-11-24 11:02:03 · 343 阅读 · 0 评论 -
消息队列(进阶篇)- 如何使用异步设计提升系统性能?
对于开发者来说,异步是一种程序设计的思想,使用异步模式设计的程序可以显著减少线程等待,从而在高吞吐量的场景中,极大提升系统的整体性能,显著降低时延。因此,像消息队列这种需要超高吞吐量和超低时延的中间件系统,在其核心流程中,一定会大量采用异步的设计思想。接下来,我们一起来通过一个非常简单的例子学习一下,使用异步设计是如何提升系统性能的。异步设计如何提升系统性能?假设我们要实现一个转账的微服务 Transfer( accountFrom, accountTo, amount),这个服务有三个参数转载 2020-11-16 11:37:36 · 676 阅读 · 0 评论 -
延时队列实现的几种方式
在开发中,往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,这个延时任务和定时任务的区别究竟在哪里呢?一共有如下几点区别1、 定时任务有明确的触发时间,延时任务没有2、 定时任务有执行周期,而延时任务在某事件触发后一段时间内执行,没有执行周期3、 定时任务一般执行的是批处理操作是多个任务,而延时任务一般是单个任务下面,我们以判断订单转载 2020-10-26 15:30:16 · 1443 阅读 · 2 评论 -
消息队列(基础篇)- 7 消息积压了该如何处理
我们都知道,消息积压的直接原因,一定是系统中的某个部分出现了性能问题,来不及处理上游发送的消息,才会导致消息积压。所以,我们先来分析下,在使用消息队列时,如何来优化代码的性能,避免出现消息积压。然后再来看看,如果你的线上系统出现了消息积压,该如何进行紧急处理,最大程度地避免消息积压对业务的影响。优化性能来避免消息积压在使用消息队列的系统中,对于性能的优化,主要体现在生产者和消费者这一收一发两部分的业务逻辑中。对于消息队列本身的性能,你作为使用者,不需要太关注。为什么这么说呢?主要原因是,对于转载 2020-10-16 10:27:56 · 2743 阅读 · 1 评论 -
消息队列(基础篇)-6 如何处理消费过程中的重复消息
在消息传递过程中,如果出现传递失败的情况,发送方会执行重试,重试的过程中就有可能会产生重复的消息。对使用消息队列的业务系统来说,如果没有对重复消息进行处理,就有可能会导致系统的数据出现错误。比如说,一个消费订单消息,统计下单金额的微服务,如果没有正确处理重复消息,那就会出现重复统计,导致统计结果错误。你可能会问,如果消息队列本身能保证消息不重复,那应用程序的实现不就简单了?那有没有消息队列能保证消息不重复呢?消息重复的情况必然存在在 MQTT 协议中,给出了三种传递消息时能够提供的服务质量标转载 2020-10-16 10:19:52 · 1028 阅读 · 1 评论 -
消息队列(基础篇)-5 如何确保消息不会丢失?
其实,现在主流的消息队列产品都提供了非常完善的消息可靠性保证机制,完全可以做到在消息传递过程中,即使发生网络中断或者硬件故障,也能确保消息的可靠传递,不丢消息。绝大部分丢消息的原因都是由于开发者不熟悉消息队列,没有正确使用和配置消息队列导致的。虽然不同的消息队列提供的 API 不一样,相关的配置项也不同,但是在保证消息可靠传递这块儿,它们的实现原理是一样的。这节课我们就来讲一下,消息队列是怎么保证消息可靠传递的,这里面的实现原理是怎么样的。当你熟知原理以后,无论你使用任何一种消息队列,再简单看一下它转载 2020-10-11 17:41:35 · 1914 阅读 · 0 评论 -
消息队列(基础篇)-4 如何利用事务消息实现分布式事务?
很多场景下,我们“发消息”这个过程,目的往往是通知另外一个系统或者模块去更新数据,消息队列中的“事务”,主要解决的是消息生产者和消息消费者的数据一致性问题。依然拿我们熟悉的电商来举个例子。一般来说,用户在电商 APP 上购物时,先把商品加到购物车里,然后几件商品一起下单,最后支付,完成购物流程,就可以愉快地等待收货了。这个过程中有一个需要用到消息队列的步骤,订单系统创建订单后,发消息给购物车系统,将已下单的商品从购物车中删除。因为从购物车删除已下单商品这个步骤,并不是用户下单支付这个主要流程中必需的转载 2020-10-11 17:23:43 · 1572 阅读 · 2 评论 -
消息队列(基础篇)- 3 主题和队列有什么区别
主题和队列有什么区别?在互联网的架构师圈儿中间,流传着这样一句不知道出处的名言,我非常认同和喜欢:好的架构不是设计出来的,而是演进出来的。 现代的消息队列呈现出的模式,一样是经过之前的十几年逐步演进而来的。最初的消息队列,就是一个严格意义上的队列。在计算机领域,“队列(Queue)”是一种数据结构,有完整而严格的定义。在维基百科中,队列的定义是这样的:队列是先进先出(FIFO, First-In-First-Out)的线性表(Linear List)。在具体应用中通常用链表或者数组来实现。队列转载 2020-10-10 23:11:01 · 974 阅读 · 2 评论 -
消息队列(基础篇)-2 该如何选择消息队列
选择消息队列产品的基本标准开源 活跃度高 满足技术要求可供选择的消息队列产品1. RabbitMQ首先,我们说一下老牌儿消息队列 RabbitMQ,俗称兔子 MQ。RabbitMQ 是使用一种比较小众的编程语言:Erlang 语言编写的,它最早是为电信行业系统之间的可靠通信设计的,也是少数几个支持 AMQP 协议的消息队列之一。RabbitMQ 就像它的名字中的兔子一样:轻量级、迅捷,它的 Slogan,也就是宣传口号,也很明确地表明了 RabbitMQ 的特点:Messaging t转载 2020-10-10 23:02:53 · 409 阅读 · 0 评论 -
消息队列(基础篇)-1 为什么需要消息队列?
解决实际工作中的问题异步处理大多数程序员在面试中,应该都问过或被问过一个经典却没有标准答案的问题:如何设计一个秒杀系统?这个问题可以有一百个版本的合理答案,但大多数答案中都离不开消息队列。秒杀系统需要解决的核心问题是,如何利用有限的服务器资源,尽可能多地处理短时间内的海量请求。我们知道,处理一个秒杀请求包含了很多步骤,例如:风险控制; 库存锁定; 生成订单; 短信通知; 更新统计数据。如果没有任何优化,正常的处理流程是:App 将请求发送给网关,依次调用上述 5 个流程,然后将结果转载 2020-10-10 22:56:06 · 531 阅读 · 0 评论 -
消息队列(基础篇)-0 准备
门槛 熟练使用各种常用集合,比如:数组、链表、字典等; 掌握 Linux 系统的基础知识,会使用常用的命令; 具备多线程、并发控制编程能力; 编写过读写文件、通过网络收发数据的程序; 能看懂最基本的 UML 图,包括类图、时序图等; 了解最常用的几种设计模式和算法。 知识图谱 相关文档 RocketMQ 官方文档: https://rocketmq.apache.org/docs/quick-start/ RocketM.原创 2020-10-10 15:33:24 · 161 阅读 · 0 评论