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

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。

.NET 云原生架构师训练营(模块二 基础巩固 消息队列 介绍与基础)--学习笔记的更多相关文章

  1. .NET 云原生架构师训练营(ASP .NET Core 整体概念推演)--学习笔记

    演化与完善整体概念 ASP .NET Core 整体概念推演 整体概念推演到具体的形式 ASP .NET Core 整体概念推演 ASP .NET Core 其实就是通过 web framework ...

  2. .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记

    目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...

  3. .NET 云原生架构师训练营(建立系统观)--学习笔记

    目录 目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业 目标 通过整体定义去认识系统 通过分解去简化对系统的认识 ASP .NET Core ASP .NE ...

  4. .NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记

    目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity ...

  5. .NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记

    2.7.1 敏捷开发 敏捷介绍 敏捷的起源 敏捷软件开发宣言 敏捷开发十二原则 生命周期对比 敏捷开发的特点 敏捷的发展 敏捷的核心 敏捷的起源 2001年,17个老头子在一起一边滑雪,一边讨论工作, ...

  6. .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记

    2.5.1 MongoDB -- 介绍 mysql vs mongo 快速开始 mysql vs mongo 对比 mysql mongo 数据存储 table 二维表结构,需要预先定义结构 json ...

  7. .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 问答系统)--学习笔记

    2.5.6 MongoDB -- 问答系统 MongoDB 数据库设计 API 实现概述 MongoDB 数据库设计 设计优化 内嵌(mongo)还是引用(mysql) 数据一致性 范式:将数据分散到 ...

  8. .NET 云原生架构师训练营(模块二 基础巩固 Scrum 团队)--学习笔记

    2.7.3 Scrum 团队 理想的环境 团队章程 如何组建 Scrum 团队 产品待办事项列表 用户故事 敏捷开发流程 理想的环境 5-9人 100% 跨职能 在一起 自组织 自组织 目标 授权 沟 ...

  9. .NET 云原生架构师训练营(模块二 基础巩固 EF Core 更新和迁移)--学习笔记

    2.4.6 EF Core -- 更新 状态 自动变更检测 不查询删除和更新 并发 状态 Entity State Property State Entity State Added 添加 Uncha ...

  10. .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 写入和查询)--学习笔记

    2.5.3 MongoDB -- 写入和查询 写入 查询 查找操作符 逻辑操作符 其他 嵌套对象 数组 游标方法 写入 https://docs.mongodb.com/manual/tutorial ...

随机推荐

  1. PyQt(Python+Qt)学习随笔:实现toolButton与Action的关联

    在Qt Designer中,如果创建的窗口为主窗口QMainWindow类型,可以通过<PyQt(Python+Qt)学习随笔:Qt Designer中怎么给toolBar添加按钮 >介绍 ...

  2. PHP 的$server变量

    PHP中$_SERVER["QUERY_STRING"]函数   详解PHP中$_SERVER函数的QUERY_STRING和 $_SERVER存储当前服务器信息,其中有几个值 如 ...

  3. DVWA SQL Injection LOW

    最近在学习SQL注入,初出茅庐,就从dvwa开始吧 sql注入可以通过sqlmap工具实现,为了更好地了解原理,这里主要是手工注入 注入的一般流程为: 1,找到注入点,此步骤可通过工具 2,判断注入类 ...

  4. pytorch 实践中遇到的问题

    1. SGD训练时,初始化学习率为0.05时,loss出现了 nan (百度: pytorch loss nan, 但是目前暂未看懂解释,大概是loss出现了inf,学习率偏大?)

  5. 团队作业4-Day7

    团队作业4-Day7 项目git地址 1. 站立式会议 2. 项目燃尽图 3. 适当的项目截图 4. 代码/文档签入记录(部分) 5. 每人每日总结 吴梓华:今日补充界面小漏洞,修复部分bug 白军强 ...

  6. 团队作业4-Day3

    团队作业4-Day3 项目git地址 1. 站立式会议 2. 项目燃尽图 3. 适当的项目截图 今日暂无较大代码更新 4. 代码/文档签入记录(部分) 5. 每人每日总结 吴梓华:今天未进行开发,学习 ...

  7. 剑指offer二刷——数组专题——数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  8. js中单引号和双引号区别

    总结: 1.无论单引号还是双引号都是成双成对出现的,否则报错!浏览器在读到第一个双引号开始,第二个双引号结束,同样浏览器读取单引号也是第一个开始,第二个单引号结束,在使用的时候必须遵循规则那就是一对双 ...

  9. 验证pdf文件的电子章签名

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  10. 一个最简单的typescript工程

    初级: 1.新建一个文件夹~/a/ 2.cd ~/a/ 3.npm init -y          生成package.json 4.新建index.ts,内容:console.log(" ...