RabbitMQ-08-消息的可靠性如何保证
消息的可靠性如何保证发送端
需要RabbitMQ发送端确认机制,确认消息成功发送到RabbitMQ并被处理。 (如果没有正确发送,要返回报错信息,提醒业务方处理)
需要RabbitMQ消息返回机制,如果没有路由到对应的队列,中间件会通知发送端。(也应该要返回报错信息,提醒业务方处理)
消费端
需要RabbitMQ确认机制,确认消息没有发生处理异常。(消费方消费的消息,才应该删除这条消息,否则应该留在RabbitMQ里,等待异常的处理)
需要RabbitMQ消费端限流,限制消息推送速度,保障消费端服务稳定。(不能推的很快)
RabbitMQ
防止消息大量积压,配合RabbitMQ消息过期时间,避免对RabbitMQ自身产生压力过大。
如果当消息过期后,过期丢弃机制,对数据安全产生影响。采用死信队列,收集过期消息,对接报警系统。
总结
发送端确认机制(exchange确认和queue确认,没收到,那么应该异常处理)
消费端确认机制(ack)
消费端限流机制
消息过期机制
死信队列(消息过期删掉,这样做不好,消息就是数据,对于数据删除操作,一定要非常慎重。RabbitMQ解决方案:死信 ...
RabbitMQ-07-RabbitMQ重点
RabbitMQ重点
AMQP协议规范了RabbitMQ的内部结构和外部行为,我们使用RabbitMQ其实就是使用AMQP的协议
消息发送全流程。回顾上图,消息生产者不能直接发送给最终队列,先要发送到交换机(Exchange),解耦了后续流程和消费者。
消息会根据规则,由交换机转发给队列的。
消费者从消息队列中拿到消息。
在微服务中,配置都放到配置中心里,统一管理,避免交换机(Exchange)和队列管理混乱。对于Go语言的配置中心,在《从0到Go语言微服务架构师-训练营》中有详细介绍。
RabbitMQ该如何学习计算机学科是一个要求动手能力很强的学科,通过实战,用实际项目,把知识牢牢掌握住。
添加微信
公众号更多内容
RabbitMQ-06-RabbitMQ可视化管理
RabbitMQ可视化管理启动RabbitMQ
1docker-compose up -d
打开网页控制台
1http://127.0.0.1:15672
输入用户名和密码 root/123456
Overview概览
Connections 连接(之前在架构图里已经看到的Producer和Broker之间的)
Channels 通道 在Connection之上的逻辑概念,共用一个connection。
Exchange 交换机
Queue 队列
Admin 管理
下面这个3个监控Connections Channel Queue,如果创建和销毁都很多的话,就要检查一下代码逻辑了。
RabbitMQ该如何学习计算机学科是一个要求动手能力很强的学科,通过实战,用实际项目,把知识牢牢掌握住。
添加微信
公众号更多内容
RabbitMQ-05-RabbitMQ安装
RabbitMQ安装第一种方式:官网 https://www.rabbitmq.com/
第二种方式: Docker
1docker run ...
第三种方式: Docker-compose(这里把命令贴出来,在《从0到Go语言微服务架构师-训练营》中,已经详细介绍了docker相关和K8S在项目中的使用)
12345678910111213141516version: '3'services: rabbitmq3: container_name: "rabbitmq" image: rabbitmq:3.8-management environment: - RABBITMQ_DEFAULT_USER=root - RABBITMQ_DEFAULT_PASS=123456 ports: # AMQP protocol port - '5672:5672' # HTTP management UI - '15672:15672& ...
RabbitMQ-04-交换机详解
Exchange(交换机)详解AMQP(Advanced Message Queuing Protocol)提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
Exchange是AMQP和RabbitMQ的核心组件。
职责:根据绑定关系和路由键给消息提供路由,把消息转发到相应的队列上。
Exchange就是为消息提供和队列提供绑定关系,最终路由到正确的队列。
Exchange分4种:
Direct(直接发送):Routing Key和Binding Key完全匹配。
Topic(可以根据规则发送到目标队列,Binding Key中,#可以匹配任意多个词,*可以匹配1个词),看下面的例子,比如:
粤菜.清淡->烧鹅
川菜.微.辣, 川菜.变态.辣 ->麻婆豆腐
鲁菜.重油.重盐 -> 葱爆海参
Fanout(扇形发送): Routing Key不再重要,当一个消息发送过来,会给每个队列都发送,类似广播的方式。
Headers-很少用
RabbitMQ该如何学习计算机学科是一个要求动手能力很强的学科, ...
RabbitMQ-03-RabbitMQ底层运行机制
RabbitMQ底层运行机制AMQP是RbbitMQ的核心,也是规范,它定义了对外暴露的接口,
Producer:消息的发布者
Connection:producer/comsumer和Message Broker之间的TCP连接
Channel:它是connection内部建立的逻辑连接,大体基于每个线程创建单独的channel
Publish(也可以叫Message) 发布的消息(要有Routing Key)
Exchange 交换机
队列
Routes
Consumer 消息的消费者
最外面的虚线部分,也可以叫 Message Broker
虚线里面的一层叫 Virtual Host
在Publish和Consume中是有一个Connection(物理上的连接)的内部有很多Channel,Channel是逻辑连接,这样也就复用了TCP网络资源。
RabbitMQ该如何学习计算机学科是一个要求动手能力很强的学科,通过实战,用实际项目,把知识牢牢掌握住。
添加微信
公众号更多内容
RabbitMQ-02-为什么RabbitMQ性能高
为什么RabbitMQ性能高底层语言是Erlang(Ericsson Language), 是一门为交换机软件开发的编程语言。
Erlang优势:
高并发的编程语言,适合分布式系统。
跨平台,虚拟机解释运行。
进程间上下文切换性能高。(cpu在并行时候,是假并行,其实是串行的,进程间要切换的运行,所以进程间切换的效率,就决定了这个语言多线程并行的能力)
和Socket一样的速度。(也就是应用靠的是TCP这一层连接,TCP就决定了消息中间件的性能)
MQ = Message QueueActiveMQ
上世纪90年代的产品,比较老,Apache出品,Java开发。对Java用户友好,并且方便java二开。优点:
跨平台(java)。
用jdbc连接多种数据库。
完善监控和安全机制。(有界面)
自动重连和错误重试
缺点:
目前不活跃
不适合队列规模较大的应用场景(比如上千个队列)
RabbitMQ
这个是2007年左右开始做的,而且应用也很广泛,高可靠,高可用,支持发送确认,支持投递确认,支持镜像队列(一份数据存储在多个节点,保证数据可靠性)优点:
支持高并发。
...
RabbitMQ-01-为什么要学习RabbitMQ
为什么要学习RabbitMQRabbitMQ在企业中应用已经非常广泛了。在中工作处理复杂的业务中。
如何解决复杂问题?解耦
异步
削峰
RabbitMQ该如何学习计算机学科是一个要求动手能力很强的学科,通过实战,用实际项目,把知识牢牢掌握住。
添加微信
公众号更多内容
1024节日快乐
面向加薪学习从2014年起,中国的互联网圈就把这一天定为程序员节,到2022年已经是第9个(0110)程序员节了。
让你有本事了不起的职场渡劫程序语言-GO语言适合想找到工作、想一路开挂并加薪的人
助力每一个追求职场梦的人让你从穷忙、内耗到吸金、晋职
其他资源
添加微信
公众号更多内容
redis-16-集群与分片
集群分片
每个节点都可以保存数据,数据是保存在主节点的,每个从节点只是主节点的一个复制,容灾和复制的作用。
为了集群的高可用,所以在每一个主节点后都配置了一个从节点,这样就当某个主节点挂了,从节点可用顶替主节点,继续提供服务,不至于整个集群挂了。
M1,M2,M3 — 主节点 1,主节点 2,主节点 3
S1,S2,S3 — 从节点 1,从节点 2,从节点 3
集群要是多个节点,官方建议,至少 3 主 3 从,主节点会被分配插槽来存储数据,每个 key 都会进行 hash 计算,找到一个插槽的索引进行存储,一共是 16384 个插槽。
Redis-cluster 集群通过 Gossip 协议进行信息广播。
优点
1. 可扩展性(数据按插槽分配在多个节点上的)
2. 高可用性(部分节点不可用,可用通过Gossip协议,然后投票,让从节点变成主节点顶上去,保证集群的可用性)
3. 自动故障转义
4. 去中性化
缺点
1. 异步复制数据,无法保证数据实时强一致性(保证数据最终一致性)
2. 集群搭建有成本。
数据如何分区redis-cluster 集群采用分布式存储。
好处:
可用性高 ...