阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程

页面发布流程图如下:
阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第1张图片
1、前端请求cms执行页面发布。
2、cms执行静态化程序生成html文件。
3、cms将html文件存储到GridFS中。
4、cms向MQ发送页面发布消息
5、MQ将页面发布消息通知给Cms Client
6、Cms Client从GridFS中下载html文件
7、Cms Client将html保存到所在服务器指定目录

1.2.1需求分析
功能分析:
创建Cms Client工程作为页面发布消费方,将Cms Client部署在多个服务器上,它负责接收到页面发布 的消息后从
GridFS中下载文件在本地保存。
需求如下:
1、将cms Client部署在服务器,配置队列名称和站点ID。
2、cms Client连接RabbitMQ并监听各自的“页面发布队列”
3、cms Client接收页面发布队列的消息
4、根据消息中的页面id从mongodb数据库下载页面到本地
调用dao查询页面信息,获取到页面的物理路径,调用dao查询站点信息,得到站点的物理路径
页面物理路径=站点物理路径+页面物理路径+页面名称。
从GridFS查询静态文件内容,将静态文件内容保存到页面物理路径下。
阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第2张图片
页面的物理路径的字段
阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第3张图片

新建工程

阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第4张图片
选择parent
阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第5张图片
输入工程名称
阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第6张图片

阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第7张图片


阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第8张图片
pom.xml内加入依赖


	com.xuecheng
	xc‐framework‐model
	1.0‐SNAPSHOT


	org.springframework.boot
	spring‐boot‐starter‐test
	test


	org.springframework.boot
	spring‐boot‐starter‐amqp


	org.springframework.boot
	spring‐boot‐starter‐data‐mongodb


	org.apache.commons
	commons‐io


	com.alibaba
	fastjson

从cms项目里面复制过来
阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第9张图片
复制配置文件
阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第10张图片

server:
	port: 31000
spring:
	application:
		name: xc‐service‐manage‐cms‐client
	data:
		mongodb:
			uri: mongodb://root:123@localhost:27017
			database: xc_cms
	rabbitmq:
		host: 127.0.0.1
		port: 5672
		username: guest
		password: guest
		virtualHost: /
	xuecheng:
		mq:
		#cms客户端监控的队列名称(不同的客户端监控的队列不能重复)
			queue: queue_cms_postpage_01
			routingKey: 5a751fab6abb5044e0d19ea1 #此routingKey为门户站点ID

创建包

阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第11张图片

创建启动类

阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第12张图片

从cms项目的启动类复制 包扫描都加上
阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第13张图片
api去掉。最后一个改成cms_client
阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第14张图片

配置mq的配置信息

消息队列设置如下:
1、创建“ex_cms_postpage”交换机
2、每个Cms Client创建一个队列与交换机绑定
3、每个Cms Client程序配置队列名称和routingKey,将站点ID作为routingKey

创建config的包,下面创建RabbitmqConfig的类
阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第15张图片
它相当于配置,这里用Spring的注解@Configuration
阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第16张图片
代码不再 敲了 直接复制过来。和之前mq的练习的例子相同

package com.xuecheng.manage_cms_client.config;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author Administrator
* @version 1.0
**/
@Configuration
public class RabbitmqConfig {
	//队列bean的名称
	public static final String QUEUE_CMS_POSTPAGE = "queue_cms_postpage";
	//交换机的名称
	public static final String EX_ROUTING_CMS_POSTPAGE="ex_routing_cms_postpage";
	//队列的名称
	@Value("${xuecheng.mq.queue}")
	public String queue_cms_postpage_name;
	//routingKey 即站点Id
	@Value("${xuecheng.mq.routingKey}")
	public String routingKey;
	/**
	* 交换机配置使用direct类型
	* @return the exchange
	*/
	@Bean(EX_ROUTING_CMS_POSTPAGE)
	public Exchange EXCHANGE_TOPICS_INFORM() {
		return ExchangeBuilder.directExchange(EX_ROUTING_CMS_POSTPAGE).durable(true).build();
	}
	//声明队列
	@Bean(QUEUE_CMS_POSTPAGE)
	public Queue QUEUE_CMS_POSTPAGE() {
		Queue queue = new Queue(queue_cms_postpage_name);
		return queue;
	}
	/**
	* 绑定队列到交换机
	*
	* @param queue the queue
	* @param exchange the exchange
	* @return the binding
	*/
	@Bean
	public Binding BINDING_QUEUE_INFORM_SMS(@Qualifier(QUEUE_CMS_POSTPAGE) Queue queue,
	@Qualifier(EX_ROUTING_CMS_POSTPAGE) Exchange exchange) {
		return BindingBuilder.bind(queue).to(exchange).with(routingKey).noargs();
	}
}


一但程序启动没有交换机 就创建交换机。没有对列 就创建对列
对列的名称是在配置文件内配置的
阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程_第17张图片

你可能感兴趣的:(阶段5 3.微服务项目【学成在线】_day06 页面发布 课程管理_02-页面发布-消费方Cms Client-搭建工程)