首页 > 其他分享 >一个故事告诉你什么是消息队列

一个故事告诉你什么是消息队列

时间:2023-07-22 15:33:06浏览次数:45  
标签:小明 服务 故事 队列 发送 消息 邮件

有一天,产品跑来说:“我们要做一个用户注册功能,需要在用户注册成功后给用户发一封成功邮件。”

小明(攻城狮):“好,需求很明确了。” 不就提供一个注册接口,保存用户信息,同时发起邮件调用,待邮件发送成功后,返回用户操作成功。没一会功夫,代码就写完了。验证功能没问题后,就发布上线了。

线上正常运行了一段时间,产品匆匆地跑来说:“你做的功能不行啊,运营反馈注册操作响应太慢,已经有好多用户流失了。”

小明听得一身冷汗,赶紧回去改。他发现,原先的以单线程同步阻塞的方式进行邮件发送,确实存在问题。这次,他利用了 JAVA 多线程的特性,另起线程进行邮件发送,主线程直接返回保存结果。测试通过后,赶紧发布上线。小明心想,这下总没问题了吧。

没过多久,产品又跑来了,他说:“现在,注册操作响应是快多了。但是又有新的问题了,有用户反应,邮件收不到。能否在发送邮件时,保存一下发送的结果,对于发送失败的,进行补发。”

小明一听,哎,又得熬夜加班了。产品看他一脸苦逼的样子,忙说:“邮件服务这块,别的团队都已经做好了,你不用再自己搞了,直接用他们的服务。”

小明赶紧去和邮件团队沟通,谁知他们的服务根本就不对外开放。这下小明可开始犯愁了,明知道有这么一个服务,可是偏偏又调用不了。

邮件团队的人说,“看你愁的,我给你提供了一个类似邮局信箱的东西,你往这信箱里写上你要发送的消息,以及我们约定的地址。之后你就不用再操心了,我们自然能从约定的地址中取得消息,进行邮件的相应操作。”

后来,小明才知道,这就是外界广为流传的消息队列。你不用知道具体的服务在哪,如何调用。你要做的只是将该发送的消息,向你们约定好的地址进行发送,你的任务就完成了。对应的服务自然能监听到你发送的消息,进行后续的操作。这就是消息队列最大的特点,将同步操作转为异步处理,将多服务共同操作转为职责单一的单服务操作,做到了服务间的解耦。

哈哈,这下能高枕无忧了。太年轻,哪有万无一失的技术啊~

不久的一天,你会发现所有业务都替换了邮件发送的方式,统一使用了消息队列来进行发送。这下仅仅一个邮件服务模块,难以承受业务方源源不断的消息,大量的消息堆积在了队列中。这就需要更多的消费者(邮件服务)来共同处理队列中的消息,即所谓的分布式消息处理。

标签:小明,服务,故事,队列,发送,消息,邮件
From: https://www.cnblogs.com/Rover20230226/p/17573453.html

相关文章

  • php与 redis的队列 && 如何守护进程?
    在PHP中,使用队列可以解决以下情况下的一些常见问题:异步任务处理:当应用程序需要处理一些耗时的任务,如发送电子邮件、生成报表、处理文件上传等,可以将这些任务添加到队列中,并使用队列进行异步处理,从而不影响主要的用户请求处理。消息通信:在分布式系统或微服务......
  • leetcode 栈与队列 232 225
    目录基本介绍四个问题232225基本介绍栈,先进后出队列,先进先出四个问题C++中stack是容器么?我们使用的stack是属于哪个版本的STL?我们使用的STL中stack是如何实现的?stack提供迭代器来遍历stack空间么?首先大家要知道栈和队列是STL(C++标准库)里面的两个数据结构。C++标准......
  • (四) MdbCluster分布式内存数据库——业务消息处理
    (四)MdbCluster分布式内存数据库——业务消息处理 上篇:(三)MdbCluster分布式内存数据库——节点状态变化及分片调整 离上次更新文章已有快5个月,我还是有点懒。但我们系统的研发并没有因此停下来。下面先简单介绍下MdbCluster最近的一些进展。1.提供了java语......
  • 测试发送消息到Microsoft Teams
    创建测试频道:点击团队右侧“···”,点击添加频道: 然后完善频道信息: 创建好频道之后,点击频道右侧“···”管理频道: 可以进行频道人员的添加与删除管理: 点击频道右侧“···”连接器: 在搜索框中,搜索webhook进行搜索: 将IncomingWebhook 添加到频道中: 可......
  • MQTT 与 Kafka|物联网消息与流数据集成实践
    MQTT如何与Kafka一起使用?MQTT(MessageQueuingTelemetryTransport)是一种轻量级的消息传输协议,专为受限网络环境下的设备通信而设计。ApacheKafka是一个分布式流处理平台,旨在处理大规模的实时数据流。Kafka和MQTT是实现物联网数据端到端集成的互补技术。通过结合使用......
  • java 后台 向 个人 微信推送消息和图片
    使用Java后台向个人微信推送消息和图片在开发Java后台应用程序时,有时候我们需要向用户的个人微信账号推送消息和图片。本文将介绍如何使用Java代码实现这一功能。准备工作要使用Java代码向个人微信账号推送消息和图片,我们需要先获取微信的API密钥和用户的OpenID。获取API密钥......
  • 云原生基础设施实践:NebulaGraph 的 KubeBlocks 集成故事
    像是NebulaGraph这类基础设施上云,通用的方法一般是将线下物理机替换成云端的虚拟资源,依托各大云服务厂商实现“服务上云”。但还有一种选择,就是依托云数据基础设施,将数据库产品变成为云生态的一环,不只是提供自身的数据云服务,还能同其他的数据库一起分析挖掘业务数据价值。在本......
  • 【我和openGauss的故事】openGauss逻辑备份恢复
    【我和openGauss的故事】openGauss逻辑备份恢复zhouwhui2023-07-1418:50发表于openGauss公众号逻辑备份恢复一、小数据集导入导出1.copy或\copy可以将文本数据作为数据源导入到数据表中,也可以将数据表或查询结果导出到指定的文件中。2.copy与\copy的区别(1)copy属于SQL命......
  • 【我和openGauss的故事】openGauss特性:CM支持两节点部署特性
    【我和openGauss的故事】openGauss特性:CM支持两节点部署特性杨凯同学2023-07-1418:50发表于openGauss公众号1.什么是CMCM(ClusterManager)是一款数据库管理模块。支持自定义资源监控,提供了数据库主备的状态监控、网络通信故障监控、文件系统故障监控、故障自动主备切换等能力。......
  • 【我和openGauss的故事】浅尝 openGauss v5.0.0 的 MySQL 语法兼容性
    【我和openGauss的故事】浅尝openGaussv5.0.0的MySQL语法兼容性严少安2023-07-1418:50发表于openGauss公众号在openGauss中,以下简称og5,提供了一个名为Dolphin的插件,并以此来提供MySQL的兼容性。本文将以openGaussv5.0.0版本为基础,对照PostgreSQLv15.2和Mar......