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


    页面发布流程图如下:

    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查询静态文件内容,将静态文件内容保存到页面物理路径下。

    页面的物理路径的字段

    新建工程


    选择parent

    输入工程名称






    pom.xml内加入依赖

    <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>

    从cms项目里面复制过来

    复制配置文件

    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项目的启动类复制 包扫描都加上

    api去掉。最后一个改成cms_client

    配置mq的配置信息

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

    创建config的包,下面创建RabbitmqConfig的类

    它相当于配置,这里用Spring的注解@Configuration

    代码不再 敲了 直接复制过来。和之前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();
    	}
    }


    一但程序启动没有交换机 就创建交换机。没有对列 就创建对列
    对列的名称是在配置文件内配置的


  • 相关阅读:
    简例 一次执行多条mysql insert语句
    javax/javaee-api/ Maven依赖
    关闭页面前提示或保存数据
    SpringMVC的controller方法上若需要参数 如User
    方正飞越 A600硬改BIOS激活win7的工具与方法。
    Win7下IE11点击无反应的解决方法
    WinXP局域网共享设置
    使用VHD,让Win XP和 Win2003 运行在内存中
    dd if=/dev/zero of=的含义是什么?Linux 下的dd命令使用详解
    win8.1点击“更改电脑设置”无反应(闪退)
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/11623791.html
Copyright © 2020-2023  润新知