首页 > 其他 > 详细

MQ详解分析

时间:2019-11-14 19:22:49      阅读:100      评论:0      收藏:0      [点我收藏+]

 

MQ

当修改商品时,需要同时更新solor索引库和静态页面,最后响应页面,如果这些操作都同步执行,那么会导致响应给用户时间较久,用户体验感较差,所以使用MQ消息队列,它是一款软件,可以降低模块与模块之间的耦合性,可以异步执行消息,流量削峰.当修改商品时使用MQ消息队列的方式来同步solor索引库,和静态页面.

 

JMS提供了一个类库,可以操作MQ这个软件,JMS中有两个消息模型

点对点模式:一个消息只能由一个消费者消费

获得一个连接工厂,连接的是MQ这个软件,然后从工厂中拿到连接,启动连接,创建队列,获得session,用来创建生产者,消费者,和消息.

发布订阅模式:一个消息可以由多个消费者消费

 

SpringMQ整合,ConnectionFactory交给spring容器管理,生产使用spring提供的jmsTmeplate来操作MQ,配置目的地的队列.消费者类需要继承监听类,不需要jmsTemplate,但是需要配置一个监听类,里面要配置三个属性,连接工厂,队列目的地,自己的监听类.我们需要使监听处于存活状态,这样才能监听生产者生产的消息,所以只要容器出去存活状态,那么监听就处于存活状态.

 

使用MQ同步上下架商品:上架以后要同步solor索引库和同步静态页面,当我们上架完成后,把需要同步的信息先放到MQ里面,然后写1个消费者来同步solor索引库,1个消费者来同步静态页面.

分析:我们需要放入MQ中一个消息来使消费者拿到这个消息来同步solor索引库和静态页面,他们都需要传入goodsId,因为拿到goodsId可以根据一个goodsId找到对应的多个sku数据,这样把sku数据同步到索引库中和同步生成静态页面,我们应该使用发布订阅模式,我们只需要向MQ中存一个消息,可以供多个消费者来使用.

技术分享图片 

服务与服务之间数据交互不需要通过web层,只需要通过MQ即可.

分析步骤:借助Jmstemplate生产消息,消息也就是goodsId使用发布订阅模式放到MQ中.需要把JmsTemplate,Destinasion交给spring容器管理.

然后创建一个消费者,需要实现一个MessageListener监听器

技术分享图片 

得到消息,根据消息,查询所有的sku数据,保存到solor索引库中,使用solorTemplate把查询到的sku数据保存到solor索引库中.

同步静态页面:由于上架时已经把上架商品的id以发布订阅模式的方式放到了MQ中的上架队列中,所以只需要在生成静态页面服务中,创建一个消费者实现监听器,把ConnectionFactory以及监听类交给spring容器管理,在消费者类中拿到MQ上架队列中存放的商品id,使用freemarker根据商品id生成对应的sku静态页面数据.

 

商品下架同步更新索引库和静态页面:

在商品服务层,当商品下下架时,把下架商品的id放到一个消息队列中,在搜索服务和静态页面服务中拿到这个id,同步删除索引库的数据以及对应的静态页面数据.

 

 

技术分享图片 

是什么?

消息中间件。可以在分布式系统的不同服务之间进行消息的发送接收

它的出现解决什么问题?

可以让系统解耦

比如,使用消息中间件,某一个服务,可能依赖了其他好几个服务。比如课程里面的运营商后台依赖了4个服务,那不用mq就和4个服务耦合,用了mq,就只和1个mq耦合。参考下图:

技术分享图片 

同类型技术有哪些,如何选择?

RabbitMQ,Kafka ,ZeroMQ,MetaMQ,RocketMQ

1. 对比

关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ

MQ选型对比RabbitMQ RocketMQ ActiveMQ Kafka

Kafka、RabbitMQ、RocketMQ消息中间件的对比—— 消息发送性能-转自阿里中间件

开源软件成熟度评测报告-分布式消息中间件

2. 结论

除了知道ActiveMQ,有必要知道Kafka的使用。需要Kafka资料的同学单独联系我。

大概介绍?

1. 1个标准

Jms标准,JMS(JavaMessaging Service)是Java官方定义的技术规范。

JMS 定义了五种不同的消息:

消息类型

消息描述

备注

TextMessage

字符串

常用

MapMessage

值对

 

ObjectMessage

序列化的 Java 对象

 

BytesMessage

字节的数据流

 

StreamMessage

原始值的数据流

 

2. 两个角色

Producer(生产者):发消息

Consumer(消费者):收消息

3. 两种消息模式

一对一消息(私聊),Queue消息,同时一个收。

技术分享图片 

一对多消息(群发),Topic消息,同时可以多个收。

技术分享图片 

实际项目应用场景?

最重要,告知面试官实际使用情况

删除商品-》发送消息-》接收消息-》删除索引。

商品状态更新-》发送消息-》接收消息-》导入索引库。

拓展说说?

消息会不会丢?

消息丢了怎么办?

消息队列的其他特性:异步处理、数据同步、流量削峰、缓冲、限流等。

MQ详解分析

原文:https://www.cnblogs.com/Jnlpy/p/11859063.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!