共 24 篇已发布文章
几种常用exchange总结通过前面几篇文章的学习,我们知道了常用的几种交换机:directexchange、topicexchange、fanoutexchange三种交换机。本篇文章我们对这三种交换机进行总结。Directexchange:直连交换机。定义:根据路由键(routingkey)需要完全匹配上才可以。会把消息路由到那些bingdingkey与routingkey完全匹配的队列中。R
Binding-绑定Exchange和Exchange、exchange和queue之间的连接关系Binding中可以包含RoutingKey或参数Queue-消息队列消息队列,实际存储消息数据属性:Durability:是否持久化。Durable:是,Transient:否AutoDelete:如选yes,代表当最后一个监听被移除之后,该Queue会自动被删除Message-消息服务器和应用程序
RabbitMQ高级篇一本章导航及BAT大厂如何保障生产端可靠性投递一:本章导航从本章节开始我们就要进入rabbitMq高级篇。我们先来看看本章导航:共分为九大模块。如下图:二:消息如何保证100%的投递成功?2.1:什么是生产端的可靠性投递? 思路: 保障消息的成功发布;
RabbitMQ消息中间件技术精讲9高级篇二高并发场景下,消息的延迟投递做二次确认进行回调检查来保障生产者消息投递成功的可靠性在上一篇文章中,我们介绍了BAT大厂中一种方式保障生成者消息投递可靠性。思考:在上一篇中可靠性投递,在高并发的场景下是否合适?其实在上一篇文章中,我们实际上对数据库操作了两次:业务数据入库和消息信息入库。这中对数据库多次操作的,如果在高并发场景下会出现问题的。所以我们可以使
利用幂等性保障消息不被重复消费本文主要内容:一:幂等性概念什么是幂等性?在网络超时等问题除外下,要求一次或多次请求同一个资源,对资源本身产生的影响和第一次执行的影响相同。关于幂等性更详细的介绍,可以参见《拓展知识一:幂等性》这篇文章。幂等性我们可以借鉴数据库的乐观锁机制来理解:比如,我们执行一条更新库存的sql语句:updatetablesetcount=count-1whereid=1流程说明:
RabbitMQ消息中间件技术精讲11高级篇四confirm确认消息理解Confirm消息确认机制:消息的确认,是指生产者投递消息后,如果broker收到消息,则会给生产者一个应答;生产者经行接收应答,用来确定这条消息是否正常的发送到broker,这中方式也是消息的可靠性投递的核心保障!确认机制流程图:如何实现Confirm确认消息?第一步:在channel上进行开启确认模式:channel.co
RabbitMQ消息中间件技术精讲12高级篇五return消息机制Return消息机制:ReturnListener的使用是用于处理一些不可路由的消息我们的消息生产者,通过指定的路由(Exchange)和Routingkey,把消息送达到某一个队列中去,然后我们的消费者监听队列,进行消费处理操作。但是,在某些场景或情况下,如果我们在发送消息的时候,当前的exchange不能在或者是指定的routi
RabbitMQ消息中间件技术精讲13高级篇六消费端自定义监听在之前的代码中我们一般就是在代码中写while循环,进行consumer.nexDelivery方法进行获取下一条消息,然后进行消费处理。但是在工作中,我们一般使用自定义的Consumer更加的方便,解耦性更加的强。代码如下:自定义消费监听类完整代码:publicclass MyConsumer extends&nb
消费端的限流?场景: 假设,我们mq服务器上有上万条未处理的消息,我们随便打开一个消费者客户端,会出现什么样的情况呢?大量的消息瞬间被全部推送给了这个消费者,但是单个消费者是无法消费这么多消息的。会导致系统崩溃,线上故障发生。RabbitMQ提供了一种qos(服务直连保证)功能,即在非自动确认消息的前提下,如果一定数目的消息(通过基于consumer或
RabbitMQ消息中间件技术精讲15高级篇八消费端ACK与重回队列消费端的签收方式:分为自动签收和手动签收。自动签收:channel.basicConsume方法的第二个参数(autoAck)设置为true即可;手动签收:将第二个参数设置为false即可。手动签收又分为两种方式:手动Ack和Nack。两者之间的区别:Ack表示手工签收后消息处理成功;Nack表示手动签合后消息处理失败。这个时候b
TTL队列及消息介绍本文是《RabbitMQ精讲系列》中第十六篇:RabbitMQ消息中间件技术精讲16高级篇九TTL队列及消息。如果想学习RabbitMQ的朋友建议从第一篇开始看起。TTL: TTL是TimeToLive的缩写,也就是生存时间。也就是说RabbitMQ支持消息的过期时间,在消息发送的时候可以对过期时间进行指定;同时RabbitMQ支持
死信队列介绍本文是《RabbitMQ精讲系列》中第十七:RabbitMQ消息中间件技术精讲17高级篇十死信队列死信队列:DLX(dead-letter-exchange) 当一个消息没有了消费者之后,这个队列就成了死信队列。在RabbitMQ中,死信队列是相对于exchange的。RabbitMQ的死信队列:利用DLX,当消息在一个队列中变为死信(de
在Rabbit基础的API中,声明一个exchange、声明一个绑定、声明一个队列都是通过channel创建出来的。如下图:那么在springAMQP中这些对象是怎么声明的?在使用springAMQP去声明,就需要使用springAMQP的如下模式。即使用@Bean模式:下面我们就进行代码演示:在上一篇代码中修改RabbitMQConfig类。添加如下:/*** 针对消费者配置*1.&n

RabbitMQ整合spring之消息模板-RabbitTemplateRabbitTemplate:消息模板。这是spring整合rabbit提供的消息模板。是进行发送消息的关键类。本文有凯哥Java(kaigejava)发布功能:该类提供了丰富的发送方法,包括可靠性投递消息方法、回调监听消息接口ConfirmCallback、返回值确认接口ReturnCallBack等等。同样我们需要注入到s
在本章学习中,我们主要是和应用整合的。下面来看看本章我们主要内容:整合springAMQP和springboot及springcloud整合。以及在整合中需要注意及工作中踩过的坑。如同如下图:本文主要内容:使用代码创建rabbitAdmin,通过rabbitAdmin操作MQ本文是《RabbitMQ精讲系列》教程中的第十八篇高级应用整合的第一篇。如果对RabbitMQ感兴趣的朋友,可以从第一章开始
rabbitMQ精讲系列第二十一篇高级整合应用第三篇 SimpleMessageListenerContainer今天主要内容:SimpleMessageListenerContainer对象SimpleMessageListenerContainer:简单消息监听容器。这个类非常的强大,我们可以对它进行很多的设置,对应消费者的配置项,这个类都可以满足的。监听队列(多个队列)、自动启动、
RabbitMQ学习系列第二十二篇高级整合第四篇MessageListenerAdapterMessageListenerAdaoter:即消息监听适配器。代码演示:在config类中修改:在SimpleMessageListenerContainer bean中(上一节课代码演示)修改如下:/**使用适配器模式**/MessageListenerAdapteradapter=

概述大家平时也有用到一些消息中间件(MQ),但是对其理解可能仅停留在会使用API能实现生产消息、消费消息就完事了。对MQ更加深入的问题,可能很多人没怎么思考过。比如,你跳槽面试时,如果面试官看到你简历上写了,熟练掌握消息中间件,那么很可能给你发起如下4个面试连环炮!为什么要使用MQ?使用了MQ之后有什么优缺点?怎么保证MQ消息不丢失?怎么保证MQ的高可用性?本文将通过一些场景,配合着通俗易懂的语言
FanoutExchange:不处理路由键,只需要简单的将队列绑定到交换机上。发送到交换机的消息都会被转发到该交换机绑定的所有队列上Fanout交换机转发消息是最快的。FanoutExchange交换机可以简单的理解为广播站。上面几句话,在生活中有个很常见的示例:在大学中,我们知道每天都会有广播站放出美妙的音乐。广播站是面向全校所有师生的,所有它的消息转发的是最快的。运行示意图:代码演示:生产者:
TopicExchange介绍:TopicExchange:所有发送到TopicExchange的消息被转发到所有关系rotekey中指定的topic的queue上。Exchange将routekey和某topic进行模糊匹配,此时队列就需要绑定一个topic注意:模糊匹配时可以使用通配符的。通配符使用规则,如下:官方关于topicexchange的介绍:运行示意图:从上图中,我们可以看到queu