
RabbitMQ
文章平均质量分 72
RabbitMQ基础
吴声子夜歌
个人学习记录
展开
-
RabbitMQ——SpringBoot配置选项
基本选项spring.rabbitmq.host: 服务Hostspring.rabbitmq.port: 服务端口spring.rabbitmq.username: 用户名spring.rabbitmq.password: 密码spring.rabbitmq.virtual-host: RabbitMQ的虚拟主机spring.rabbitmq.addresses: 指定client连接到的server的地址,多个以逗号分隔(优先取addresses,然后再取host)spring.rabb原创 2022-05-03 23:18:13 · 3319 阅读 · 1 评论 -
RabbitMq——Only one ConfirmCallback is supported by each RabbitTemplate
Only one ConfirmCallback is supported by each RabbitTemplate解决方案:由于spring的Bean默认都是单例的,这个RabbitTemplate也不例外,既然每个RabbitTemplate对象只支持一个回调,那我就在该Bean放入spring容器把该RabbitTemplate设置为原型的(也就是@Scope=“prototype”),具体代码如下@Bean@Scope("prototype")public RabbitTemplat原创 2022-05-03 22:10:00 · 2851 阅读 · 0 评论 -
RabbitMQ--队列结构、惰性队列
队列结构通常队列由rabbit_amqqueue_process 和backing_queue这两部分组成:rabbit_amqqueue_process 负责协议相关的消息处理,即接收生产者发布的消息、向消费者交付消息、处理消息的确认(包括生产端的confirm 和消费端的ack)等。backing_queue是消息存储的具体形式和引擎,并向rabbit_amqqueue_process提供相关的接口以供调用。如果消息投递的目的队列是空的,并且有消费者订阅了这个队列,那么该消息会直接发送给消费原创 2020-05-17 00:48:02 · 711 阅读 · 2 评论 -
RabbitMQ--存储机制
存储机制不管是持久化的消息还是非持久化的消息都可以被写入到磁盘。持久化的消息在到达队列时就被写入到磁盘,并且如果可以,持久化的消息也会在内存中保存一份备份,这样可以提高一定的性能, 当内存吃紧的时候会从内存中清除。非持久化的消息一般只保存在内存中,在内存吃紧的时候会被换入到磁盘中,以节省内存空间。这两种类型的消息的落盘处理都在RabbitMQ的“持久层”中完成。持久层是一个逻辑上的概念,实际包含两个部分:队列索引(rabbit_queue_index) 和消息存储(rabbit_msg_store)。原创 2020-05-17 00:12:37 · 1202 阅读 · 0 评论 -
RabbitMQ--服务相关配置
服务相关配置rabbitmq.config原创 2020-05-16 22:51:56 · 171 阅读 · 0 评论 -
RabbitMQ--消息分发、消息顺序性、消息传输保障
消息分发当RabbitMQ队列拥有多个消费者时,队列收到的消息将以轮询(round-robin) 的分发方式发送给消费者。每条消息只会发送给订阅列表里的一个消费者。这种方式非常适合扩展,而且它是专门为并发程序设计的。如果现在负载加重,那么只需要创建更多的消费者来消费处理消息即可。很多时候轮询的分发机制也不是那么优雅。默认情况下,如果有n个消费者,那么RabbitMQ会将第m条消息分发给第m%n (取余的方式)个消费者,RabbitMQ 不管消费者是否消费并已经确认(Basic.Ack)了消息。试想一下,原创 2020-05-16 22:07:12 · 2579 阅读 · 1 评论 -
RabbitMQ--持久化、事务机制、confirm机制
持久化交换器的持久化是通过在声明队列是将 durab1e参数置为tue实现的,如果交换器不设置持久化,那么在 RabbitMQ服务重启之后,相关的交换器元数据会丢失,不过消息不会丢失,只是不能将消息发送到这个交换器中了。对一个长期使用的交换器来说,建议将其置为持久化的。队列的持久化是通过在声明队列时将 durable参数置为true实现的。如果队列不设置持久化,那么在 RabbitMQ服务重启之后,相关队列的元数据会丢失,此时数据也会丢失。正所谓“皮之不存,毛将焉附”,队列都没有了,消息又能存在哪里呢?原创 2020-05-16 14:48:03 · 1207 阅读 · 0 评论 -
RabbitMQ--过期时间TTL、死信队列、延迟队列和优先队列
过期时间TTLTTL,Time to Live的简称,即过期时间。RabbitMQ 可以对消息和队列设置TTL。设置消息的TTL:目前有两种方法可以设置消息的TTL。第一种方法是通过队列属性设置,队列中所有消息都有相同的过期时间。第二种方法是对消息本身进行单独设置,每条消息的TTL可以不同。如果两种方法一起使用,则消息的TTL以两者之间较小的那个数值为准。消息在队列中的生存时间一旦超过设置的TTL值时,就会变成“死信”(DeadMessage),消费者将无法再收到该消息(这点不是绝对的)。原创 2020-05-16 00:14:09 · 1882 阅读 · 0 评论 -
RabbitMQ--mandatory、immediate参数和备份交换器
mandatory和immediate是channel.basicPublish方法中的两个参数,它们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能。RabbitMQ提供的备份交换器(AlternateExchange)可以将未能被交换器路由的消息(没有绑定队列或者没有匹配的绑定)存储起来,而不用返回给客户端。mandatory参数当mandatory参数设为true时,交换器无法根据自身的类型和路由键找到一个符合条件的队列,那么RabbitMQ会调用Basic. Return命令将消息原创 2020-05-15 23:01:11 · 406 阅读 · 0 评论 -
RabbitMQ--客户端常用API详解
连接RabbitMQ创建Connection://通过设置参数创建ConnectionFactory factory = new ConnectionFactory();factory.setHost(IP_ADDRESS);factory.setPort(PORT);factory.setUsername("guest");factory.setPassword("guest");Connection connection = factory.newConnection();//通过u原创 2020-05-15 22:10:17 · 2963 阅读 · 0 评论 -
RabbitMQ--AMQP命令
AMQP 0-9-1协议命令原创 2020-05-15 14:50:36 · 392 阅读 · 0 评论 -
RabbitMQ--架构、相关概念、运转流程
RabbitMQ架构RabbitMQ整体上是-一个生产者与消费者模型,主要负责接收、存储和转发消息。可以把消息传递的过程想象成:当你将一个包裹送到邮局,邮局会暂存并最终将邮件通过邮递员送到收件人的手上,RabbitMQ就好比由邮局、邮箱和邮递员组成的-一个系统。从计算机术语层面来说,RabbitMQ模型更像是一种交换机模型。生产者(Producer)生产者创建消息,然后发布到RabbitMQ中。消息一般可以包含2个部分:消息体和标签(Label)。消息体也可以称之为payload, 在实际应用中,消原创 2020-05-15 14:47:57 · 222 阅读 · 0 评论 -
SpringBoot--整合RabbitMQ
整合SpringBootSpringBoot未AMQP提供了自动化配置依赖spring-boot-starter-amqp,因此首先创建项目,并添加依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp...原创 2020-02-06 20:49:06 · 682 阅读 · 0 评论 -
RabbitMQ--Exchange匹配规则
测试图创建exchange添加消息队列将Exchange与Queues绑定测试direct因为direct是完全匹配路由键的,所以只有atguigu队列可以收到消息:测试fanout因为fanout不识别路由键,它只会将消息转发给绑定的所有队列,所以所有队列都收到了消息:测试Topictopic绑定的队列如下:topic会匹配路由键,"#...原创 2020-02-06 13:51:55 · 1194 阅读 · 0 评论 -
Docker--安装RabbitMQ
查找RabbitMQ镜像docker search rabbitmq拉取RabbitMQ镜像docker pull rabbitmq(镜像未配有控制台)docker pull rabbitmq:management(镜像配有控制台)注意:rabbitmq是官方镜像,该镜像不带控制台。如果要安装带控制台的镜像,需要在拉取镜像时附带tag标签,例如:management。安装Rabbi...原创 2020-02-06 12:39:24 · 368 阅读 · 0 评论 -
RabbitMQ--运行机制
AMQP中的消息路由AMQP中消息的路由过程和Java开发者熟悉的JMS存在一些差别,AMQP中增加了Exchange和Binding的角色。生产者把消息发布到Exchange上,消息最终到达队列并被消费者接收,而Binding决定交换器的消息应该发送到那个队列。Exchange类型Exchange分发消息时根据类型的不同分发策略有区别,目前共有4中类型:direct、fanout、top...原创 2020-02-06 12:30:21 · 570 阅读 · 0 评论