.NET 云原生架构师训练营(模块二 基础巩固 消息队列 介绍与基础)--学习笔记
2.6.1 消息队列 -- 介绍
主要使用场景
队列的三种形式
消息队列的优点
主要使用场景
典型的异步处理
流量削锋
应用解耦
队列的三种形式
点对点
工作队列
发布与订阅
消息队列的优点
1、屏蔽异构平台的细节:发送方、接收方系统之间不需要了解双方,只需认识消息。
2、异步:消息堆积能力;发送方接收方不需同时在线,发送方接收方不需同时扩容(削峰)。
3、解耦:防止引入过多的API给系统的稳定性带来风险;调用方使用不当会给被调用方系统造成压力,被调用方处理不当会降低调用方系统的响应能力。
4、复用:一次发送多次消费。
5、可靠:一次保证消息的传递。如果发送消息时接收者不可用,消息队列会保留消息,直到成功地传递它。
6、提供路由:发送者无需与接收者建立连接,双方通过消息队列保证消息能够从发送者路由到接收者,甚至对于本来网络不易互通的两个服务,也可以提供消息路由。
2.6.2 RabbitMQ -- 基础
主要场景
AMQP
主要场景
软件系统中使用消息队列的主要场景:
秒杀活动、抢购、消息通讯、邮件发送、电话短信等都是典型的采用消息中间件的业务场景。
AMQP
AMQP 0-9-1 Model Explained:https://www.rabbitmq.com/tutorials/amqp-concepts.html
交换机
队列
绑定
信道(Channel)
消息
交换机
交换机的四种类型
Direct 直连
Fanout 发布订阅-广播
Topic 发布订阅-路由
Headers
Direct 直连
Fanout 发布订阅-广播
Topic 发布订阅-路由
Topics:https://www.rabbitmq.com/tutorials/tutorial-five-python.html
Headers
特性中可以做路由的匹配
队列
它们存储由应用程序使用的消息。
队列与交换共享一些属性,但也具有一些其他属性:
名称
持久(队列将在代理重新启动后幸存)
独占(仅由一个连接使用,并且该连接关闭时队列将被删除)
自动删除(至少有一个使用方的队列在最后一个使用方退订时被删除)
参数(可选;由插件和特定于代理的功能使用,例如消息TTL,队列长度限制等)
必须先声明队列,然后才能使用队列。声明队列将导致它创建(如果尚不存在)。如果队列已经存在并且其属性与声明中的相同,则该声明无效。
如果有至少一个消费者订阅了队列,当消息到达队列时,消息会发送给订阅者。如果一个订阅者都没有,消息会在队列中等待,直到出现第一个订阅者
绑定
绑定是交换使用(其中包括)将消息路由到队列的规则。
为了指示交换机E将消息路由到队列Q,必须将Q绑定到E。绑定可能具有某些交换机类型使用的可选 路由键属性。
路由密钥的目的是选择发布到交换机的某些消息以路由到绑定队列。换句话说,路由键就像一个过滤器。
信道(Channel)
AMQP 引进的一个特殊的概念,建立在 tcp 之上的一个引用层协议
一个客户端与一个服务器建立一个连接,可以用于多个消费者
一个 tcp 连接里面可以产生多个信道
消息
消息确认
拒绝消息
预读消息 prefetching
消息格式
消息确认
什么时候从队列中移除
默认模式(不需要 ack,发送到消费者之后即从队列中移除)
ack 模式(需要消息者回复)
消息格式
Content type
Content encoding
Routing key
Delivery mode (persistent or not)
Message priority
Message publishing timestamp
Expiration period
Publisher application id