zoukankan      html  css  js  c++  java
  • .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

    知识共享许可协议

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

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

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

  • 相关阅读:
    Python PyInstaller安装和使用教程(搬来的,嘻嘻)
    python 注册码永久性方法
    网上搬来的常用工具
    Pycharm控制台窗口怎样可以显示不同程序的运行结果
    php时间:获取上一个月,本月天数,下一个月
    thinkphp5 --接口实例
    浅谈 PHP 与手机 APP 开发
    php 对象的调用和引入
    php 超全局变量(整理)
    php 全局变量和超全局变量
  • 原文地址:https://www.cnblogs.com/MingsonZheng/p/14253604.html
Copyright © 2011-2022 走看看