浅聊MQ之Kafka与RabbitMQ简用

打印 上一主题 下一主题

主题 1017|帖子 1017|积分 3051

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
(前记:内容有点多,先看目录再挑着看。)
Kafka与RabbitMQ的利用举例

Kafka的利用举例


  • 安装与启动

    • 从Apache Kafka官网下载Kafka中心件的运行脚本。
    • 解压后,通过命令行启动Zookeeper(Kafka的运行依赖于Zookeeper)。
    • 启动Kafka的服务器进程。

  • 根本功能实现

    • 生产者:启动生产者进程,向指定的主题(Topic)发送消息。
    • 消费者:启动消费者进程,从指定的主题中接收并处理消息。

  • 高级功能

    • 分区与复制:Kafka通过分区实现数据的并行处理,通过复制实现数据的高可用性。
    • 日志压缩:Kafka支持日志压缩功能,以减少存储空间的占用。

  • 应用场景

    • 日志网络与处理:Kafka可以高效地网络和处理来自不同源头的日志数据。
    • 实时数据流处理:Kafka支持实时数据流的处理和分析,适用于金融、物联网等范畴。

RabbitMQ的利用举例


  • 安装与配置

    • 安装Erlang语言支持(由于RabbitMQ需要Erlang的支持)。
    • 从RabbitMQ官网下载并安装RabbitMQ服务器。
    • 启动RabbitMQ服务,并配置用户、权限和插件等。

  • 消息传递过程

    • 生产者:将消息发送到RabbitMQ的交换机(Exchange),交换机根据路由键(Routing Key)将消息路由到指定的队列(Queue)中。
    • 消费者:从队列中获取消息并进行处理。

  • 高级功能

    • 消息长期化:RabbitMQ支持消息的长期化存储,以防止消息丢失。
    • 消息确认机制:消费者在处理完消息后,需要向RabbitMQ发送确认消息,以确保消息被精确处理。

  • 应用场景

    • 异步处理:通过RabbitMQ实现应用程序的异步处理,进步体系的并发性能和可靠性。
    • 应用解耦:不同的应用程序之间可以通过RabbitMQ进行通讯,实现应用程序之间的解耦。

在ERP项目中利用消息队列中心件

在ERP项目中,消息队列中心件(如Kafka或RabbitMQ)可以发挥重要作用,特别是在订单模块中。以下以RabbitMQ为例,阐明其在ERP项目中的利用:

  • 订单体系与其他体系的解耦

    • 当订单体系接收到用户提交的订单后,可以将订单信息发送到RabbitMQ的消息队列中。
    • 库存体系、付出体系、物流体系等订阅相应的消息队列,即可实现订单信息的同步处理。
    • 这种解耦方式使得各个体系可以独立开发和部署,进步了体系的可维护性和可扩展性。

  • 异步通讯与性能提升

    • 订单体系不再需要期待其他体系处理完成后再进行下一步操作,而是可以将订单信息发送到RabbitMQ后立即返回相应给用户。
    • 其他体系可以在背景异步处理订单消息,减少了用户期待时间,提升了用户体验。

  • 流量削峰与稳固性保障

    • 在高并发场景下,如秒杀、抢购等活动期间,RabbitMQ可以作为一个缓冲层,将大量的订单请求临时存储在消息队列中。
    • 然后按照一定的速率将这些请求分发给后端体系进行处理,有效避免了后端体系因刹时流量过大而瓦解的问题。

  • 消息确认与最终一致性

    • RabbitMQ提供了消息确认机制,可以确保消息被精确处理和消费。
    • 即使在出现故障的环境下,也可以通过重试、死信队列等方式来包管消息不会丢失或重复消费,从而实现了最终一致性。

综上所述,Kafka和RabbitMQ等消息队列中心件在ERP项目中具有广泛的应用前景,特别是在订单模块中,它们可以实现服务间的解耦、异步通讯、流量削峰以及进步体系的可伸缩性和最终一致性等功能。

-----分界限--------------------------------------------------------------------------------------------------
关于RabbitMQ在异步处理和应用解耦方面的具体应用场景示例:

一、异步处理


  • 用户注册后的邮件和短信关照

    • 场景描述:用户在网站上注册账号后,体系需要发送注册成功邮件和短信。如果在用户提交注册请求时同步完成这些操作,大概会由于邮件或短敬佩务的耽误导致用户期待时间过长,影响体验。
    • 办理方案:在用户注册成功后,将发送邮件和短信的任务消息发送到RabbitMQ队列中,由背景服务异步处理这些任务。这样,用户注册流程可以快速完成,而邮件和短信的发送则在背景逐步处理。
    • 优势:提升用户相应速率,优化用户体验,同时将非关键流程异步化,避免因慢服务拖累主流程。

  • 订单处理中的异步任务

    • 场景描述:在电商平台中,用户下单后需要进行库存管理、付出确认等多个步调。如果这些步调全部同步实行,大概会导致体系相应缓慢,尤其是在高并发场景下。
    • 办理方案:将订单信息发送到RabbitMQ队列中,由不同的服务(如库存服务、付出服务)分别从队列中获取消息并处理。例如,订单服务生成订单后,将消息发送到队列,库存服务和付出服务分别监听队列并实行相应任务。
    • 优势:进步体系的并发性能,确保处理流程的连续性和效率。

  • 文件处理任务的异步实行

    • 场景描述:用户上传大文件后,需要对文件进行处理(如格式转换、压缩等)。如果同步实行这些任务,前端页面大概会一直加载,导致用户体验差。
    • 办理方案:用户上传文件后,将处理任务消息发送到RabbitMQ队列中,由背景服务异步处理文件,处理完成后关照用户或更新状态。
    • 优势:提升用户体验,主线程迅速返回,减少用户期待时间。

二、应用解耦


  • 微服务架构中的服务通讯

    • 场景描述:在微服务架构中,各个服务之间需要进行通讯。如果直接调用对方的API,服务之间的耦合度会很高,一个服务的故障大概会导致整个体系瘫痪。
    • 办理方案:通过RabbitMQ实现服务之间的消息传递。例如,订单服务生成订单后,将消息发送到队列,库存服务和付出服务分别从队列中获取消息并处理。这种方式减少了服务之间的直接依赖。
    • 优势:低落服务之间的耦合度,便于独立扩展和维护。

  • 多体系之间的数据同步

    • 场景描述:在一个分布式体系中,多个服务依赖同一份数据源。例如,电商平台的订单状态更新后,需要同步到缓存体系和推荐体系。如果让每个服务直接从数据库拉取数据,会增加数据库压力,还大概出现耽误或不一致的问题。
    • 办理方案:利用RabbitMQ进行数据同步。订单服务更新订单状态后,将更新信息发送到队列,缓存服务和推荐服务从队列中消费消息并同步数据。
    • 优势:减轻数据库压力,实现最终一致性,即使某个服务处理耽误,RabbitMQ也能保障消息不丢失。

  • 广播关照

    • 场景描述:当某个事件发生时,需要关照多个服务。例如,商品代价调整后,库存体系、搜索体系和推荐体系都需要同步更新。
    • 办理方案:利用RabbitMQ的广播模式(Fanout),将消息发送到交换机,多个消费者(如库存服务、搜索服务)订阅该交换机,实现消息的“一发多收”。
    • 优势:扩展性强,多个服务都能接收到同一条消息。


-----分界限--------------------------------------------------------------------------------------------------
留意MQ的 Kafka、ActiveMQ、RabbitMQ、RocketMQ区别;
        URL: 浅识MQ的 Kafka、ActiveMQ、RabbitMQ、RocketMQ区别-CSDN博客
留意:长期化策略
        URL:浅聊MQ之Kafka、RabbitMQ、ActiveMQ、RocketMQ长期化策略-CSDN博客

(抱歉,最近在口试,粗糙了些。)
(望各位潘安、各位子健/各位彦祖、于晏不吝见教!多多指正!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表