RabbitMQ 介绍

本文探讨了商品搜索系统中数据库与索引库同步的问题,介绍了消息队列(MQ)作为解决方案的应用,对比了AMQP和JMS两种主流MQ实现方式,并列举了几种常见的MQ产品。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.搜索与商品服务的问题

目前我们已经完成了商品详情和搜索系统的开发。我们思考一下,是否存在问题?

  • 商品的原始数据保存在数据库中,增删改查都在数据库中完成。
  • 搜索服务数据来源是索引库,如果数据库商品发生变化,索引库数据不能及时更新。
    如果我们在后台修改了商品的价格,搜索页面依然是旧的价格,这样显然不对。该如何解决?
    这里有两种解决方案:
  • 方案1:每当后台对商品做增删改操作,同时要修改索引库数据
  • 方案2:搜索服务对外提供操作接口,后台在商品增删改后,调用接口以上两种方式都有同一个严重问题:就是代码耦合,后台服务中需要嵌入搜索和商品页面服务,违背了微服务的独立原则。
    所以,我们会通过另外一种方式来解决这个问题:消息队列

消息队列

2.什么是消息队列

消息队列,即MQ,Message Queue。
在这里插入图片描述
消息队列是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心满息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。
结合前面所说的问题:

  • 商品服务对商品增删改以后,无需去操作索引库,只是发送一条消息,也不关心消息被谁接收。
  • 搜索服务服接收消息,去处理索引库。
    如果以后有其它系统也依赖商品服务的数据,同样监听消息即可,商品服务无需任何代码修改。

3.AMQP和JMS

MQ是消息通信的模型,并不是具体实现。现在实现MQ的有两种主流方式:AMQP、JMS。
在这里插入图片描述
在这里插入图片描述
两者间的区别和联系:

  • JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式
  • JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。
  • JMS规定了两种消息模型;而AMQP的消息模型更加丰富

4.常见MQ产品

在这里插入图片描述

  • ActiveMQ:基于JMS
  • RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好
  • RocketMQ:基于MS,阿里巴巴产品,目前交由Apache基金会
  • Kafka:分布式消息系统,高吞吐量

5.RabbitMQ

RabbitMQ是基于AMQP的一款消息管理系统
官网:https://www.rabbitmq.com/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MW0309

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值