学成在线项目总结 - Day5 RabbitMQ消息队列
CMS页面发布过程中,将静态页面储存到GridFS后,还需要通知服务器获取界面。
由于服务器不止一个,如果在页面发布时同步进行消息发送,直接与服务器交互,通知获取页面,会增加程序间的耦合性。
通过一个消息队列,将发布信息传递给消息队列,再由消息队列把无需同步处理且耗时长的操作异步通知各服务器进行处理,将提高应用程序响应时间,降低程序耦合性。
本项目使用RabbitMQ进行开发。
具体到本项目的页面发布方案,如下图:
- 站点服务部署 CMS Client 和交换机绑定,指定站点id为routingKey。
- 我们需要指定routingKey给将发布的页面,如果该routingKey和某个门户站点id相同,那么消息队列将把发布消息传递到该站点的 CMS Client 上。
整个页面发布的流程如下:
我们将根据这个流程实现页面发布功能。
之前创建的CMS-Manage工程本身就是生产方,而我们需要新建一个页面发布的消费方,从消息队列中接收页面发布的消息。
页面发布消费方
我们需要创建一个 CMS-Client 工程。
这个工程是作为页面发布的消费方。
回顾一下消费方创建的流程:
- 配置文件中除了配置mongodb数据库,还要配置rabbitmq连接和mq名称及routingKey
- 正如上面内容说到的,不同的routingKey就是不同的站点id,对应不同的消息接收方。
- 新建Rabbitmq配置类,作为消费方,要创建队列和交换机,并将两者绑定。
- 将静态页面保存到页面储存路径
- 我们需要通过页面信息,及站点信息的查询,拼接成一个页面路径
- 页面储存路径 = 站点物理路径 + 页面物理路径 + 页面名称
- 创建发布页面的消费客户端,监听发布队列的消息
- 收到消息后,从MongoDB下载文件,保存至本地
页面发布生产方
我们在前一天已经完成了静态页面的创建,所以现在需要做的就是创建一个Rabbitmq的页面生产方,负责将页面发布的消息消息队列。
- 配置文件中配置Rabbitmq连接
- 新建Rabbitmq配置类,创建交换机
- 在api工程中定义页面发布接口
- 在业务层定义静态页面发布方法
- 执行静态化
- 保存静态化文件到GridFS
- 发送页面发布消息
- 在Controller中执行业务层方法
前端实现
- 在 cms.js 中定义接口,和后端建立连接
- 在page_list中新增发布按钮,并将页面id传递进“发布”中
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: