页面发布流程如下:
1、CMS Client微服务属于为CMS微服务提供辅助服务的,而只有CMS微服务才是为前端提供接口的。
2、既然CMS Client微服务是提供辅助的,并且将页面下载到CMS Client微服务,但是为前端提供接口的是CMS微服务,那么这个微服务之间是怎么连接这个页面的?答:cms client 是部署在对应站点服务器的,就可以实现静态页面的发布
CMS 微服务 :
1). 调用静态化程序, 执行页面静态化操作, 并且将静态化的文件存储在gridFS 中 ;
2). 往MQ中发送消息 ;
CmsClient :
1). 接收MQ中消息 ;
2). 从gridFS中下载页面到本地服务器 ;
部署结构图如下:
一、消费者 xc-service-manage-cms-client
监听rabbitmq,接收到消息后,实现从GridFS中下载页面到本地服务器 ;
1、Dao的逻辑
CmsPageRepository
package com.xuecheng.manage_cms_client.dao;
import com.xuecheng.framework.domain.cms.CmsPage;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface CmsPageRepository extends MongoRepository<CmsPage,String> {
}
CmsSiteRepository
package com.xuecheng.manage_cms_client.dao;
import com.xuecheng.framework.domain.cms.CmsSite;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface CmsSiteRepository extends MongoRepository<CmsSite,String> {
}
2、config中的逻辑
RabbitmqConfig
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;
@Configuration
public class RabbitmqConfig {
//队列Bean的名称 queue_cms_postpage
public static final String QUEUE_CMS_POSTPAGE = "queue_cms_postpage";
//交换机 ex_routing_cms_postpage
public static final String EX_ROUTING_CMS_POSTPAGE="ex_routing_cms_postage";
//队列的名称
@Value("${xuecheng.mq.queue}")
public String queue_cms_postpage_name;
//交换机的名称
@Value("${xuecheng.mq.routingKey}")
public String routingKey;
/**
*
* 交换机配置
* ExchangeBuilder提供了fanout、direct、topic、header交换机类型的配置
* @return the exchange
*/
@Bean(EX_ROUTING_CMS_POSTPAGE)
public Exchange EXCHANGE_TOPICS_INFORM() {
//durable(true) 持久化,mq重启之后交换机还在
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;
}
//绑定交换机和队列
@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();
}
}
MongoConfig中逻辑,目的是为了解决GridFSBucket 不能注入的问题
package com.xuecheng.manage_cms_client.config;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.