A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】学成在线 第6天 讲义-页面发布 课程管理一

1 页面发布
1.1 技术方案
本项目使用MQ实现页面发布的技术方案如下:

技术方案说明:
1、平台包括多个站点,页面归属不同的站点。
2、发布个页面应将该页面发布到所属站点的服务器上。
3、每个站点服务部署cms client程序,并与交换机绑定,绑定时指定站点IdroutingKey
指定站点idroutingKey就可以实现cms client只能接收到所属站点的页面发布消息。
4、页面发布程序向MQ发布消息时指定页面所属站点IdroutingKey,将该页面发布到它所在服务器上的cmsclient
路由模式分析如下:
发布个页面,需发布到该页面所属的每个站点服务器,其它站点服务器不发布。
比如:发布个门户的页面,需要发布到每个门户服务器上,而用户中心服务器则不需要发布。
所以本项目采用routing模式,用站点id作为routingKey,这样就可以匹配页面只发布到所属的站点服务器上。

页面发布流程图如下:


1、前端请求cms执行页面发布。
2cms执行静态化程序生成html文件。
3cmshtml文件存储到GridFS中。
4cmsMQ发送页面发布消息
5MQ将页面发布消息通知给Cms Client
6Cms ClientGridFS中下载html文件
7Cms Clienthtml保存到所在服务器指定目录
1.2 页面发布消费方
1.2.1需求分析
功能分析:
创建Cms Client工程作为页面发布消费方,将Cms Client部署在多个服务器上,它负责接收到页面发布 的消息后从GridFS中下载文件在本地保存。
需求如下:
1、将cms Client部署在服务器,配置队列名称和站点ID
2cms Client连接RabbitMQ并监听各自的页面发布队列
3cms Client接收页面发布队列的消息
4、根据消息中的页面idmongodb数据库下载页面到

调用dao查询页面信息,获取到页面的物理路径,调用dao查询站点信息,得到站点的物理路径页面物理路径=站点物理路径+页面物理路径+页面名称。
GridFS查询静态文件内容,将静态文件内容保存到页面物理路径下。
1.2.2创建Cms Client工程
1、创建maven工程
[AppleScript] 纯文本查看 复制代码
pom.xml 
<?xml version=
"
1.0
"
encoding
=
"
UTF
‐
8
"
?>
<project xmlns
=
"
[url]http://maven.apache.org/POM/4.0.0[/url]
"
xmlns:xsi=
"
[url]http://www.w3.org/2001/XMLSchema[/url]
‐
instance
"
xsi:schemaLocation=
"
[url]http://maven.apache.org/POM/4.0.0[/url]
[url]http://maven.apache.org/xsd/maven[/url]
‐
4.0.0.xsd
"
>
<parent>
<artifactId>xc
‐
framework
‐
parent</artifactId>
<groupId>com.xuecheng</groupId>
<version>1.0
‐
SNAPSHOT</version>
<relativePath>../xc
‐
framework
‐
parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>xc
‐
service
‐
manage
‐
cms
‐
client</artifactId>
<dependencies>
<dependency>
<groupId>com.xuecheng</groupId>
<artifactId>xc
‐
framework
‐
model</artifactId>
<version>1.0
‐
SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org
.springframework.boot</groupId>
<artifactId>spring
‐
boot
‐
starter
‐
test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org
.springframework.boot</groupId>
<artifactId>spring
‐
boot
‐
starter
‐
amqp</artifactId>
</dependency>
<dependency>
<groupId>org
.springframework.boot</groupId>
<artifactId>spring
‐
boot
‐
starter
‐
data
‐
mongodb</artifactId>
</dependency>
<dependency>
<groupId>org
.apache.commons</groupId>
<artifactId>commons
‐
io</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
</dependencies>
</project> 


2、配置文件
resources下配置application.ymllogback-spring.xmlapplication.yml的内容如下:

[AppleScript] 纯文本查看 复制代码
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 

说明:在配置文件中配置队列的名称,每个 cms client在部署时注意队列名称不要重复
3、启动类
[AppleScript] 纯文本查看 复制代码
 @SpringBootApplication
@EntityScan(
"
com.xuecheng
.framework.domain.cms
"
)//扫描实体类
@ComponentScan(basePackages
=
{
"
com.xuecheng
.framework
"
})//扫描common下的所有类
@ComponentScan(basePackages
=
{
"
com.xuecheng
.manage_cms_client
"
})
public class ManageCmsClientApplication {
public static void main(String[] args) {
SpringApplication.run(ManageCmsClientApplication.class, args);
}
}



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马