
RabbitMQ
文章平均质量分 96
吴顺达
这个作者很懒,什么都没留下…
展开
-
手把手带你实现 rabbitmq 保证消息不丢失 MQ消息稳定性
MQ运行图哪些步骤会发生消息丢失生产者到MQ之间丢失,网络抖动通信异常。MQ中的消息还没有完成异步存盘,MQ宕机,再重启消息丢失。消费者获取到消息之后,没有来得及处理完毕,自己直接宕机了。属于操作不当,消费者没有将消息投递到对应的Exchange中导致消息丢失解决方案MQ宕机之后消息丢失开启消息持久化MQ将消息持久化到磁盘中通常情况是,等到有几千条消息的时候,会一次性的刷盘到磁盘上面。消息在MQ内存中还没有刷盘到磁盘就宕机了,消息依旧还是会丢失。需要下面的confirm机制,co原创 2021-03-06 17:22:06 · 512 阅读 · 0 评论 -
SpringBoot 整合RabbitMQ使用
添加用户。none不能访问 management pluginmanagement列出自己可以通过AMQP登入的virtual hosts查看自己的virtual hosts中的queues, exchanges 和 bindings查看和关闭自己的channels 和 connections查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。policymaker查看、创建和删除自己的virtual hosts所属的po原创 2021-02-06 18:02:43 · 537 阅读 · 0 评论 -
rabbitmq 怎么保证消息的稳定性(怎么避免消息丢失)
• 生产者发出后保证到达了MQ。为了解决这个问题,RabbitMQ引入了事务机制和发送方确认机制(publisher confirm),由于事务机制过于耗费性能所以一般不用。另一个就是消息发送到MQ那端之后,MQ会回一个确认收到的消息给我们。• MQ收到消息保证分发到了消息对应的Exchange。消息找不到对应的Exchange。找不到对应的Queue。这两种情况都可以用RabbitMQ提供的mandatory参数来解决,它会设置消息投递失败的策略,有两种策略:自动删除或返回到客户端。• Exch.原创 2020-10-14 00:33:43 · 1936 阅读 · 0 评论 -
RabbitMQ 发送方确认机制
消息发送方(生产者)如何知道消息是否真正地到达了 RabbitMQ(服务器)生产者将信道设置成 confmn 确认)模式,一旦信道进入 confmn 模式,所有在该信道上面发布的消息都会被指派个唯一的 ID(1开启),一旦消息被投递到所有匹配的队列之后,RabbitMQ 会发送一个确认 CBasic.Ack) 给生产者(包含消息的唯一 ID) ,这就使得生产者知晓消息已经正确到达了目的地了。如果...原创 2019-10-01 23:19:43 · 343 阅读 · 0 评论 -
RabbitMQ 事务机制
存在一个问题:当生产者将消息发送出去之后,如何去确认消息到底有没有到达服务器。通过事务机制实现:通过发送方确认(publisher confirm )机制实现。这边先介绍事务机制。相关的方法有三个: channel.txSelect;channel.txCommit和channel.txRollback在发送消息前开启事务:channel.txSelect;消息发送之后提交事务:...原创 2019-10-01 16:25:48 · 1575 阅读 · 1 评论 -
RabbitMQ 持久化
持久化:消息队列路由器存入磁盘,当RabbitMQ重启后相应数据不会丢失。路由器持久化: 交换器非持久化,在RabbitMQ服务重启后,交换器数据会丢失。消息不会丢失,但是不能再将消息发送到这个交换器中//声明了一个direct 类型的交换器,并且持久化操作(durable设为true)channel.exchangeDeclare(EXCHANGE_NAME, “direct”, tr...原创 2019-10-01 16:09:57 · 202 阅读 · 0 评论 -
RabbitMQ 优先级队列
优先级队列:此队列中的消息可以拥有优先级属性,在发送有优先级属性的消息到此队列时,优先级属性能够生效。优先级高的消息得以提早消费,消息优先级的最大值由队列的属性决定。超出队列的最大值按最大值算。Map<String, Object> priority = new HashMap<String, Object>();priority.put("x-max-priority...原创 2019-10-01 16:00:58 · 414 阅读 · 0 评论 -
RabbitMQ 死信队列 DLX配置 延迟队列实现
先明白几个概念:死信消息如何变成死信:1.消息被拒绝(Basic.Reject/Basic.Nack),并且设置requeue参数为false;2.消息过期;3.队列达到最大长度。死信邮箱DLX当消息在一个队列中变成死信之后,它可以被重新被发送到另一个交换器中,这个交换器就是DLX ,绑定DLX 的队列就称之为死信队列。死信队列:1.当某个队列(非死信队列)中存在死信...原创 2019-10-01 13:55:54 · 782 阅读 · 0 评论 -
RabbitMQ 过期时间TTL
设置消息的 TTL第一种方法是通过队列属性设置第二种方法是对消息本身进行单独设置如果两种方法一起使用,则消息的 TTL 以两者之间较小的那个数值为准消息在队列中的生存时间超过消息设置的TTL时,就会变成”死信" (Dead Message) ,消费者将无法再收到该消息(非绝对)通过队列属性设置消息TTL 的方法是在 channel.queueDeclare 方法中加入x-messag...原创 2019-10-01 12:58:42 · 286 阅读 · 0 评论 -
RabbitMQ 备份交换器使用
生产者在发送消息时不设置mandatory 参数,那么消息达到路由器后匹配不到相应的队列后消息将会丢失。设置了mandatory 参数,那么需要添加ReturnListener的编程逻辑。如果既不想复杂化生产者的编程逻辑,又不想消息丢失,那么可以使用备份交换器。顾名思义 备份交换器就是当第一个交换器未能有效匹配到队列时,路由到备份交换器,再由备份交换器区匹配队列模型图从模型图中可以看到...原创 2019-09-30 23:37:01 · 387 阅读 · 0 评论 -
RabbitMQ mandatory参数 路由器匹配不到队列返回响应
mandatory参数当交换器无法根据自身的类型和路由键找到一个符合条件的队列,那么 RabbitM 会调用Basic.Return命令将消息返回给生产者 。通过调用channel.addReturnListener 来添加ReturnListener 监听器实现。这里有一个坑:保证在在发送消息之前绑定监听器,在retrun message之前channel不关闭不然将无法收到返回消息实现效...原创 2019-09-30 23:15:25 · 458 阅读 · 0 评论 -
RasbbitMQ 路由器使用 绑定键 路由键 详解 路由器与队列绑定
交换器Exchange我们之前讲述的是将消息投递到队列中再有消费者区消费,实际上RabbitM的运作流程不是这样的。真实情况是,生产者将消息发送到 Exchange (交换器:“X”),由交换器将消息路由到一个或者多个队列中,消费者再去消费消息。如果路由不到,或许会返回给生产者,或许直接丢弃(这个看具体配置后面会讲到:)。首先明白两个概念:BindingKey:绑定键,交换机都是需要与队...原创 2019-09-30 22:32:38 · 5161 阅读 · 0 评论 -
RabbitMQ 公平分发 解决消费者宕机消息丢失问题
工作队列-公平分发3.1模型生产者将消息放入消息队列,有两个以上的消费者进行消费。和轮训分发一样的是依旧拥有两个或两个以上的消费者,但是会根据消费者的处理消息能力分发任务假设C1的处理能力强,那么C1将会处理更多的任务,而C2会处理更少的任务。第一步:消费者关闭自动应答channel.basicConsume(QUEUE_NAME,false ,consumer);第二部:改成手...原创 2019-09-29 22:20:17 · 2043 阅读 · 0 评论 -
RabbitMQ 工作队列
工作队列2.1模型生产者将消息放入消息队列,有两个以上的消费者进行消费。为什么会有工作队列上文介绍了simple队列,一一对应的;而且生产者发送消息很快,不费时间;消费者需要处理业务,花费时间较多;消息队列容易挤压大量消息;2.2增加消费者C1,C2public class RecvC1 { private final static String QUEUE_NAME = "...原创 2019-09-29 21:41:33 · 278 阅读 · 0 评论 -
RabbitMQ初步使用 简单队列的使用
简单队列1.1模型p:消息生产者红色:消息队列c:消费者3个对象;生产者,队列,消费者。生产者会生产消息,消息通过消息队列,消费者从消息队列获取消息。1.2获取mq连接导入maven包<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-clien...原创 2019-09-28 21:33:50 · 174 阅读 · 0 评论 -
RabbitMQ 的初步使用:用户管理
登录管理界面添加用户:1:用户名2,3:密码4:角色的分配:none不能访问 management pluginmanagement用户可以通过AMQP做的任何事外加:列出自己可以通过AMQP登入的virtual hosts查看自己的virtual hosts中的queues, exchanges 和 bindings查看和关闭自己的channels 和 connecti...原创 2019-09-28 19:49:45 · 330 阅读 · 1 评论 -
linux 下安装RabbitMQ centos6.8
关于如何安装erlang已经在上文:https://blog.youkuaiyun.com/wsdfym/article/details/101619146叙述了安装RabbitMQ从下载地址:https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-generic-unix-3.6.15.tar.xz下载Rabbi...原创 2019-09-28 16:53:28 · 207 阅读 · 0 评论 -
linux 下安装RabbitMQ centos6.8 安装Erlang
花费了一两个小时在linux下安装了rabbitmq这里做下记录RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发。安装erlang从http://erlang.org/download/otp_src_20.3.tar.gz下载压缩包利用xftp将压缩包上传到opt目...原创 2019-09-28 16:08:46 · 510 阅读 · 0 评论