zoukankan      html  css  js  c++  java
  • 消息队列概述

    用途

    大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力

    消息服务中两个重要概念:

    消息代理(message broker)

    目的地(destination)

    当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。

    消息队列主要有两种形式的目的地
    • 队列(queue):点对点消息通信(point-to-point)
      • 点对点指的是消息发送者发送消息,消息代理将其放入到一个队列中,消息接收者从队列中获取消息内容,消息被读出后移出队列
      • 消息只有唯一的发送者和接受者,但并不是说只能有一个接收者
    • 主题(topic):发布(publish)/订阅(subscribe)消息通信
      • 发送者(发布者)发送消息到主题,多个接收者(订阅者)监听(订阅)这个主题,那么就会在消息到达的同时收到消息。

    场景

    异步处理

    当用户注册,将注册信息写入到数据库后,写入到消息队列,异步的执行发送注册邮件和注册短信,而此时直接返回注册成功。

    应用解耦

    订单系统和库存系统直接使用消息队列以解耦,改变直接调用

    流量削峰

    将秒杀的用户请求写入消息队列,谁先到达谁秒杀,防止阻塞

    规范与实现

    JMS

    • Java Message Service:Java 消息服务
    • 基于 JVM 消息代理的规范
    • ActiveMQ 是它的实现

    AMQP

    • Advanced Message Queuing Protocol:高级消息队列,兼容 JMS
    • RabbitMQ 是 AMQP 的实现
    • 跨语言,跨平台

    Spring 支持

    • spring-jms 提供了对 JMS 的支持
    • spring-rabbit 提供了 对AMQP 的支持
    • 需要 ConnectionFactory 的实现来连接消息代理
    • 提供 JmsTemplate、RabbitTemplate 来发送消息
    • @JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上监听消息代理发布的消息
    • @EnableJms、@EnableRabbit 开启支持

    没有修不好的电脑
  • 相关阅读:
    Codeforces 1485C Floor and Mod (枚举)
    CodeForces 1195D Submarine in the Rybinsk Sea (算贡献)
    CodeForces 1195C Basketball Exercise (线性DP)
    2021年初寒假训练第24场 B. 庆功会(搜索)
    任务分配(dp)
    开发工具的异常现象
    Telink MESH SDK 如何使用PWM
    Telink BLE MESH PWM波的小结
    [LeetCode] 1586. Binary Search Tree Iterator II
    [LeetCode] 1288. Remove Covered Intervals
  • 原文地址:https://www.cnblogs.com/duniqb/p/12702448.html
Copyright © 2011-2022 走看看