RabbitMQ配置
1、配置Rabbitmq的连接参数 在application.yml添加如下配置:
2、在pom.xml添加依赖
3、RabbitMQConfig配置
由于cms作为页面发布方要面对很多不同站点的服务器,面对很多页面发布队列,所以这里不再配置队列,只需要 配置交换机即可。 在cms工程只配置交换机名称即可。
所以需要删除队列的代码
Api接口
在api工程定义页面发布接口:
//页面发布
@ApiOperation("页面发布")
public ResponseResult post(String pageId);
1.3.4 PageService
在PageService中定义页面发布方法,代码如下:
@Autowired
RabbitTemplate rabbitTemplate;
//页面发布
public ResponseResult post(String pageId){
//执行页面静态化
String pageHtml = this.getPageHtml(pageId);
//将页面静态化文件存储到GridFs中
CmsPage cmsPage = saveHtml(pageId, pageHtml);
//向MQ发消息
sendPostPage(pageId);
return new ResponseResult(CommonCode.SUCCESS);
}
//向mq 发送消息
private void sendPostPage(String pageId){
//得到页面信息
CmsPage cmsPage = this.getById(pageId);
if(cmsPage == null){
ExceptionCast.cast(CommonCode.INVALID_PARAM);
}
//创建消息对象
Map<String,String> msg = new HashMap<>();
msg.put("pageId",pageId);
//转成json串
String jsonString = JSON.toJSONString(msg);
//发送给mq
//站点id
String siteId = cmsPage.getSiteId();
rabbitTemplate.convertAndSend(RabbitmqConfig.EX_ROUTING_CMS_POSTPAGE,siteId,jsonString);
}
//保存html到GridFS
private CmsPage saveHtml(String pageId,String htmlContent){
//先得到页面信息
CmsPage cmsPage = this.getById(pageId);
if(cmsPage == null){
ExceptionCast.cast(CommonCode.INVALID_PARAM);
}
ObjectId objectId = null;
try {
//将htmlContent内容转成输入流
InputStream inputStream = IOUtils.toInputStream(htmlContent, "utf-8");
//将html文件内容保存到GridFS
objectId = gridFsTemplate.store(inputStream, cmsPage.getPageName());
} catch (IOException e) {
e.printStackTrace();
}
//将html文件id更新到cmsPage中
cmsPage.setHtmlFileId(objectId.toHexString());
cmsPageRepository.save(cmsPage);
return cmsPage;
}
1.3.5 CmsPageController
编写Controller实现api接口,接收页面请求,调用service执行页面发布。
@Override
@PostMapping("/postPage/{pageId}")
public ResponseResult post(@PathVariable("pageId") String pageId) {
return pageService.post(pageId);
}