RabbmitMQ
文章平均质量分 79
MyySophia
工作只是你的权利,而只有你的行为才能为你赢得尊重
展开
-
HA RabbitMQ on K8s helm部署实战
将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现 RabbitMQ 的 HA 高可用性。该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。MQ 中的消息消费的时候是会先加载到内存中的,接受消息的时候同样也会。镜像节点在集群中的其他节点拥有从队列拷贝,一旦主节点不可用,最老的从队列将被选举为新的主队列。1.manual手动.新的队列镜像将不会收到现有的消息,它只会接收新的消息。原创 2022-11-26 20:00:00 · 1365 阅读 · 0 评论 -
RabbitMQ设计原理解析
背景RabbitMQ现在用的也比较多,但是没有过去那么多啦。现在很多的流行或者常用技术或者思路都是从过去的思路中演变而来的。了解一些过去的技术,对有些人来说可能会产生众里寻他千百度的顿悟,加深对技术的理解,更好的应用于工作中去。本篇整体采用从浅到深的逻辑结构来描述。入门部分什么是MQMQ全称是Message Queue,消息的队列。因为是队列,所以遵循FIFO先进先出原则。因为存放的是消息,所以是一种跨进程的通信机制。为什么使用MQ流量削峰这个跟很火的小吃店门口的排队..原创 2021-10-12 11:32:01 · 182 阅读 · 0 评论 -
从一次数据库异看系统设计存在的问题
目录一、背景二、什么问题?三、如何解决一、背景数据库发生异常,集群的一个节点发生异常。和数据库相关的系统均发生了不同程度的异常,从这次异常发生发现了一些系统设计存在的问题二、什么问题?系统架构大致如此数据透过FL解析将消息发送到MQ中,一些去重逻辑放在redis中。另一只程序HMS 从Queue中消费消息到数据库中。写代码的人在HMS这支程序中使用了线程池,如果某个线程执行超过了10mins,则直接结束掉这个线程。 executor.execute(.原创 2021-09-16 16:32:04 · 265 阅读 · 0 评论 -
对RabbitMQ Topics 通配符模式的深刻理解
Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列。只不过 Topic 类型Exchange 可以让队列在绑定 Routing key 的时候使用通配符!Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert通配符规则:# 匹配一个或多个词,* 匹配不多不少恰好1个词,例如:item.# 能够匹配 item.insert.abc 或者 item.insert,item.* 只能匹配 item.inse原创 2021-08-07 11:13:15 · 330 阅读 · 0 评论 -
51 精益求精:深入研究一下Broker是如何持久化存储消息的?
目录1、为什么Broker数据存储是最重要的一个环节?2、CommitLog消息顺序写入机制3、MessageQueue在数据存储中是体现在哪里呢?4、如何让消息写入CommitLog文件近乎内存写性能的?5、同步刷盘与异步刷盘6、对今天内容的一点小小总结1、为什么Broker数据存储是最重要的一个环节?上次给大家分享完Producer的工作原理之后,团队整体都对RocketMQ的数据分片机制以及发送消息的时候如何写入各个Broker机器有了一定的了解。接着小猛就开.原创 2020-12-31 16:51:48 · 490 阅读 · 0 评论 -
RabbmitMQ 网络分区
原创 2020-10-22 13:23:34 · 192 阅读 · 0 评论 -
RabbmitMQ学习笔记-RabbitMQ集群架构模式
一、主备模式haproxy 是tcp级别的代理二、远程模式(Shovel)跨地域集群互联多数据中心三、镜像模式(Mirror)<重点>四、多活模式(Federation)异地多集群。...原创 2020-09-20 22:21:18 · 331 阅读 · 1 评论 -
RabbmitMQ 集群安装
[root@MiWiFi-R3L-srv ~]# cd /home/ninesun/Documents/[root@MiWiFi-R3L-srv Documents]# lltotal 26340-rwxrw-rw-. 1 ninesun ninesun 18345424 Mar 5 2020 erlang-18.3-1.el7.centos.x86_64.rpm-rwxrw-rw-. 1 ninesun ninesun 1563272 Mar 5 2020 haproxy-1.6.5..原创 2020-09-20 20:45:15 · 406 阅读 · 1 评论 -
RabbmitMQ学习笔记-RabbitMQ与SpringBoot2.0整合实战
一、SpringBoot 整合配置详解1.1 生产端的几个关键参数spring.rabbitmq.publisher-confirms=true spring.rabbitmq.publisher-returns=true spring.rabbitmq.template.mandatory=true1.2 生产端消息的确认和返回模式public class RabbitSender { //自动注入RabbitTemplate模板类 @Autowired private..原创 2020-09-17 22:39:19 · 278 阅读 · 0 评论 -
RabbitMQ之mandatory和immediate
mandatory和immediate是AMQP协议中basic.publish方法中的两个标识位,它们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能。对于刚开始接触RabbitMQ的朋友特别容易被这两个参数搞混,这里博主整理了写资料,简单讲解下这两个标识位。mandatory当mandatory标志位设置为true时,如果exchange根据自身类型和消息routeKey无法找到一个符合条件的queue,那么会调用basic.return方法将消息返回给生产者(Basic.Return原创 2020-09-15 22:31:35 · 535 阅读 · 1 评论 -
RabbmitMQ学习笔记-Spring AMQP实战
一、RabbmitAdmin二、实战2.1 spring 和mq整合代码依赖 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>3.6.5</version> </dependency> <dependency&...原创 2020-09-14 21:55:44 · 225 阅读 · 0 评论 -
RabbmitMQ学习笔记-死信队列
目录一、什么是死信队列?二、死信队列的分类三、死信队列的设置四、代码示例4.1 消费端代码4.2 生产端代码4.3 myconsumer一、什么是死信队列?消息没有消费者可以消费的时候。二、死信队列的分类三、死信队列的设置四、代码示例4.1 消费端代码import java.util.HashMap;import java.util.Map;import com.rabbitmq.client.C...原创 2020-09-07 22:20:35 · 311 阅读 · 0 评论 -
RabbmitMQ学习笔记-TTL消息详解
目录一、TTL消息队列二、实践2.1 新建一个有TTL 的队列2.2 建立exchanger并绑定路由key2.3 确认队列的binging2.4 通过exchanger 发送消息一、TTL消息队列二、实践2.1 新建一个有TTL 的队列TTL : How long a message published to a queue can live before it is discarded (milliseconds).(Sets the "x-...原创 2020-09-07 22:00:37 · 298 阅读 · 0 评论 -
RabbmitMQ学习笔记-消费端ACK与重回队列机制
一、消费端ack二、重回队列三、代码测试3.1 producer 端代码import java.util.HashMap;import java.util.Map;import com.rabbitmq.client.AMQP;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;..原创 2020-09-07 21:32:30 · 314 阅读 · 0 评论 -
RabbmitMQ学习笔记-消费者端限流
一、消费端限流二、rabbmitmq的限流什么是非自动确认消息呢?autoAck = false事实上autoack一般都是false。channe.basicQos(int prefetchSize, int prefetchCount, boolean global) public void basicQos(int prefetchSize, int prefetchCount, boolean global) throws IOException { .原创 2020-09-05 22:50:51 · 219 阅读 · 0 评论 -
RabbmitMQ学习笔记-自定义消费者
一、自定义消费的使用String basicConsume(String var1, boolean var2, Consumer var3) throws IOException; public String basicConsume(String queue, boolean autoAck, Consumer callback) throws IOException { return this.basicConsume(queue, autoAck, "", callback...原创 2020-09-05 22:42:46 · 230 阅读 · 0 评论 -
RabbmitMQ学习笔记-producer的return Listern机制
retuen 主要处理message 不可达的问题,生产中也遇到过,例如exchanger 未建立、或者queue 和exchanger未绑定关系。这些消息应该让生产者知晓并做相应处理。一、return Listern机制概述二、最重要的参数三、代码3.1 prducer 代码import java.io.IOException;import com.rabbitmq.client.AMQP;import com.rabbitmq.client.Channel;i..原创 2020-09-05 22:26:57 · 196 阅读 · 0 评论 -
RabbmitMQ学习笔记-producer的Confirm确认机制
confrim机制可以尽量的保证生产端消息可靠投递。producer端代码import java.io.IOException;import com.rabbitmq.client.Channel;import com.rabbitmq.client.ConfirmListener;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;publi...原创 2020-09-05 22:20:45 · 232 阅读 · 0 评论 -
Rabbmit 重复消费的问题
一、问题概述最近遇到一个奇怪的问题,消费者在批量消费消息时,遇到该批次中出现部分重复消费导致业务异常。这些异常集中在某一时刻附近。类似于下面这种就是消费了两次,log显示两次消费时间相差不到1mins,显然这是在同一批次消费时发生的问题疑问:1、消费者确认消息后,MQ 会回复ack的情况吗?二、消息确认机制概述确保可靠消费需求可以根据场景选择,大多数都是使用At most once At most once: 至多一次。消息在传递时,最多会被送达一次。换一个说法就是,没什么原创 2020-09-03 17:37:52 · 516 阅读 · 0 评论 -
Java 批量创建MQ
public void createMQ(String queueName) { try (Connection connection = connectionFactory.newConnection()) { //获取一个链接 //从连接中获取一个通道 Channel channel = connection.createChannel(); channel.exchangeDecl...原创 2020-07-15 09:36:43 · 362 阅读 · 0 评论 -
RabbitMQ队列中unacked消息持续时间很久
今天在使用RTM系统debug测试时,发现程序起来之后unacked就会一直持续。经过查阅资料如果队列中ready状态的消息数比较多,可以认为是消费者的处理能力不足 如若处理过程中出现异常,而没有回复ack 应答。通过后台就会看到有 unacked 的数据。 程序断开于rabbitmq的链接后 unacked的消息状态会重新变为ready 等待消费。事实上,RTM是一个多线程嵌套多线程的程序,其逻辑大致是这样展开,峰值估计每次都能提交上千个task。通过top -Hp PID查看开了多原创 2020-07-14 19:38:28 · 7804 阅读 · 0 评论 -
Rabbmit channel.QueueDeclare参数初识
接触MQ易经有一段时间了,对QueueDeclare一直没有一个全面的认识。channel.QueueDeclare(name, durable, autoDelete, exclusive, args)在debug程序时可以看到这几个参数?分别代表什么意思呢?ame:队列名字 durable:是否持久化, 队列的声明默认是存放到内存中的,如果rabbitmq重启会丢失,如果想重启之后还存在就要使队列持久化,保存到Erlang自带的Mnesia数据库中,当rabbitmq重..原创 2020-07-14 11:12:11 · 372 阅读 · 0 评论 -
Rabbmit MQ 错误 connection error
java.io.IOException: null at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:105) at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:101) at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:353) at com.rabbitmq.client..原创 2020-05-18 09:47:45 · 412 阅读 · 0 评论 -
Rabbmit MQ connection 解决方法
一、AP rabbmit 连接报错二、rabbmit log报错三、解决TODO原创 2020-05-07 17:35:40 · 426 阅读 · 0 评论 -
Rabbmit MQ 消费模式
Act ModeNack message requeue true获取消息,但是不做ack应答确认,消息重新入队Ack message requeue false获取消息,应答确认,消息不重新入队,将会从队列中删除reject requeue true拒绝获取消息,消息重新入队reject requeue false拒绝获取消息,消息不重新入队,将会被删除...原创 2020-04-30 15:14:49 · 448 阅读 · 0 评论 -
RabbitMQ和Kafka特性比较分析
一、消息存储Kafka:内存、磁盘、数据库。支持大量堆积。kafka的最小存储单元是分区,一个topic包含多个分区,kafka创建主题时,这些分区会被分配在多个服务器上,通常一个broker一台服务器。分区首领会均匀地分布在不同的服务器上,分区副本也会均匀的分布在不同的服务器上,确保负载均衡和高可用性,当新的broker加入集群的时候,部分副本会被移动到新的broker上。根据配置文件中...原创 2020-02-20 13:43:04 · 429 阅读 · 0 评论 -
Keepalived 简介
Keepalived 采用 VRRP CVirtual Router Redundancy Protocol , 虚拟路由冗余协议) ,以 软件的形式实现服务的热备功能 。 通常情况下是将两台 Linux 服务器组成一个热备组 (Master 和Backup ) ,同 一时间内热备组只有 一 台主服务器 Master 提供服务,同时 Master 会虚拟出一个公用的虚拟 E ...原创 2019-11-18 15:28:59 · 604 阅读 · 0 评论 -
Rabbmit MQ 清空所有Queue及其message
一、需求测试环境服务器资源吃紧,MQ 非常容易爆掉。监控界面都进不去的时候,该如何处理?二、在监控界面把MQ的 meta data数据export,然后删除MQ,然后再import meta data那么当MQ都爆掉了,我们怎么进入这个监控界面呢?重启MQ,监控界面就可以进入了。...原创 2019-11-14 14:03:35 · 3092 阅读 · 1 评论 -
Rabbitmq基本原理
MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表,producer往消息队列中不断写入消息,而另一端consumer则可以读取或者订阅队列中的消息。RabbitMQ是MQ产品的典型代表,是一款基于AMQP协议可复用的企业消息系统。业务上,可以实现服务提供者和消费者之间的数据解耦,提供高可用性的消息传输机制,在实际生产中应用相当广泛。本文...原创 2019-05-10 18:48:24 · 321 阅读 · 0 评论 -
为什么要使用RabbmintMQ?
第一,你的业务需要用到消息队列 第二,消息需要持久化,重启服务能继续执行未完成的任务 第三,可能有大量的消息需要处理, rabbitmq 的性能能够满足 因为消息服务的的通信协议和规则很随意而且是异步的,所以其实可以做很多很多事。 例如: 注册用户时候,发送激活邮件。 监控应用中抛出的异常,邮件通知管理员。也就是增加监控功能,且一个消息服务可以监控无数个应用。 异构型架构系统间的各服务通信,因为消...原创 2018-03-04 20:23:56 · 369 阅读 · 0 评论 -
何为消息持久化?
持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。 http://baike.baidu.com/view/1101383.htm关键就是内存的数据会丢失,所以我们要把它保存在存储设备中,以便下次需要的时候可以再把数据取出来Q:比如Sessio...原创 2018-03-04 20:05:53 · 3276 阅读 · 0 评论