Java的新项目学成在线笔记-day6(四)

1.3 页面发布生产方 
1.3.1 需求分析 
管理员通过 cms系统发布“页面发布”的消费,cms系统作为页面发布的生产方。
需求如下:
1、管理员进入管理界面点击“页面发布”,前端请求cms页面发布接口。 2、cms页面发布接口执行页面静态化,并将静态化页面存储至GridFS中。
3、静态化成功后,向消息队列发送页面发布的消息。 1) 获取页面的信息及页面所属站点ID。 2) 设置消息内容为页面ID。(采用json格式,方便日后扩展)
3) 发送消息给ex_cms_postpage交换机,并将站点ID作为routingKey。 1.3.2 RabbitMQ配置 
1、配置Rabbitmq的连接参数
在application.yml添加如下配置:

[mw_shl_code=applescript,true]spring: 
rabbitmq:    
host: 127.0.0.1    
port: 5672   
username: guest     
password: guest     
virtualHost: /
[/mw_shl_code]

2、在pom.xml添加依赖

[mw_shl_code=applescript,true]<dependency>
    <groupId>org.springframework.boot</groupId>  
  <artifactId>spring‐boot‐starter‐amqp</artifactId>
</dependency>
[/mw_shl_code]

3、RabbitMQConfig配置
由于cms作为页面发布方要面对很多不同站点的服务器,面对很多页面发布队列,所以这里不再配置队列,只需要 配置交换机即可。
在cms工程只配置交换机名称即可。

[mw_shl_code=applescript,true]package com.xuecheng.manage_cms.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;
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 { 
   //交换机的名称 
   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(); 
    } }
[/mw_shl_code]

1.3.3 Api接口 
在api工程定义页面发布接口:


[mw_shl_code=applescript,true]@ApiOperation("发布页面")
public ResponseResult post(String pageId);
[/mw_shl_code]

1.3.4 PageService 
在PageService中定义页面发布方法,代码如下:


[mw_shl_code=applescript,true]//页面发布
public ResponseResult postPage(String pageId){  
  //执行静态化 
    String pageHtml = this.getPageHtml(pageId);  
   if(StringUtils.isEmpty(pageHtml)){
        ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_HTMLISNULL);  
   }   
//保存静态化文件   
  CmsPage cmsPage = saveHtml(pageId, pageHtml);   
  //发送消息   
  sendPostPage(pageId);  
   return new ResponseResult(CommonCode.SUCCESS);
} //发送页面发布消息 private void sendPostPage(String pageId){
CmsPage cmsPage = this.getById(pageId);  
   if(cmsPage == null){     
  ExceptionCast.cast(CmsCode.CMS_PAGE_NOTEXISTS); 
   } 
   Map<String,String> msgMap = new HashMap<>();  
   msgMap.put("pageId",pageId);
     //消息内容     String msg = JSON.toJSONString(msgMap);  
   //获取站点id作为routingKey  
   String siteId = cmsPage.getSiteId();  
   //发布消息  
   this.rabbitTemplate.convertAndSend(RabbitmqConfig.EX_ROUTING_CMS_POSTPAGE,siteId, msg); } //保存静态页面内容 private CmsPage saveHtml(String pageId,String content){ 
   //查询页面    
Optional<CmsPage> optional = cmsPageRepository.findById(pageId);   
  if(!optional.isPresent()){  
     ExceptionCast.cast(CmsCode.CMS_PAGE_NOTEXISTS); 
    }  
CmsPage cmsPage = optional.get();   
  //存储之前先删除  
  String htmlFileId = cmsPage.getHtmlFileId();  
   if(StringUtils.isNotEmpty(htmlFileId)){   
     gridFsTemplate.delete(Query.query(Criteria.where("_id").is(htmlFileId)));   
  }   
//保存html文件到GridFS  
   InputStream inputStream = IOUtils.toInputStream(content); 
   ObjectId objectId = gridFsTemplate.store(inputStream, cmsPage.getPageName());   
  //文件id     String fileId = objectId.toString();   
  //将文件id存储到cmspage中   
  cmsPage.setHtmlFileId(fileId);   
  cmsPageRepository.save(cmsPage);  
   return cmsPage;   }
[/mw_shl_code]

1.3.5 CmsPageController 
编写Controller实现api接口,接收页面请求,调用service执行页面发布。


[mw_shl_code=applescript,true]@Override
@PostMapping("/postPage/{pageId}") public ResponseResult post(@PathVariable("pageId") String pageId)
{ 
   return pageService.postPage(pageId); }
[/mw_shl_code]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值