1>.
页面发布分析和流程如下
- ①. 本项目使用MQ实现页面发布的技术方案如下:
- ②. 页面发布流程图如下:
2>.
页面发布生产方
1.需求如下:
-
①. 管理员进入管理界面点击“页面发布”,前端请求cms页面发布接口
-
②. cms页面发布接口执行页面静态化,并将静态化页面存储至GridFS中
-
③. 静态化成功后,向消息队列发送页面发布的消息
(1).获取页面的信息及页面所属站点ID
(2).设置消息内容为页面ID。(采用json格式,方便日后扩展)
(3).发送消息给ex_cms_postpage交换机,并将站点ID作为routingKey。 -
④.环境准备
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
virtualHost: /
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐amqp</artifactId>
</dependency>
RabbitMQConfig配置
@Configuration
public class RabbitmqConfig {
//交换机的名称
public static final String EX_ROUTING_CMS_POSTPAGE="ex_routing_cms_postpage";
/**
* 交换机配置使用direct类型
* @return the exchange
*/
@Bean(EX_ROUTING_CMS_POSTPAGE)
public Exchange EXCHANGE_TOPICS_INFORM() {
return ExchangeBuilder.directExchange(EX_ROUTING_CMS_POSTPAGE).durable(true).build();
}
}
@Configuration
public class MongoConfig {
@Value("${spring.data.mongodb.database}")
private String db;
@Bean
public GridFSBucket getGridFSBucket(MongoClient mongoClient){
MongoDatabase database = mongoClient.getDatabase(db);
return GridFSBuckets.create(database);
}
}
2.
页面静态化
//页面静态化方法
/**
* 静态化程序获取页面的DataUrl
* 静态化程序远程请求DataUrl获取数据模型。
* 静态化程序获取页面的模板信息
* 执行页面静态化
*/
public String getPageHtml(String pageId){
//获取数据模型
Map model = getModelByPageId(pageId);
if(model == null){
//数据模型获取不到
ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_DATAISNULL);
}
//获取页面的模板信息
String template = getTemplateByPageId(pageId);
if(StringUtils.isEmpty(template)){
ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_TEMPLATEISNULL);
}
//执行静态化
String html = generateHtml(template, model);
return html;
}
//执行静态化
private String generateHtml(String templateContent,Map model ){
//创建配置对象
Configuration configuration = new Configuration(<