当修改商品时,需要同时更新solor索引库和静态页面,最后响应页面,如果这些操作都同步执行,那么会导致响应给用户时间较久,用户体验感较差,所以使用MQ消息队列,它是一款软件,可以降低模块与模块之间的耦合性,可以异步执行消息,流量削峰.当修改商品时使用MQ消息队列的方式来同步solor索引库,和静态页面.
JMS提供了一个类库,可以操作MQ这个软件,在JMS中有两个消息模型
点对点模式:一个消息只能由一个消费者消费
获得一个连接工厂,连接的是MQ这个软件,然后从工厂中拿到连接,启动连接,创建队列,获得session,用来创建生产者,消费者,和消息.
发布订阅模式:一个消息可以由多个消费者消费
Spring与MQ整合,把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消息,同时可以多个收。
最重要,告知面试官实际使用情况
删除商品-》发送消息-》接收消息-》删除索引。
商品状态更新-》发送消息-》接收消息-》导入索引库。
消息会不会丢?
消息丢了怎么办?
消息队列的其他特性:异步处理、数据同步、流量削峰、缓冲、限流等。
原文:https://www.cnblogs.com/Jnlpy/p/11859063.html