1.首先需要配置交换机
* @Author Mr.Wu
* @Date 2019/7/31 15:13
* @Version 1.0
**/
@Configuration
public class RabbitmqConfig {
//交换机的名称
public static final String EX_ROUTING_CMS_POSTPAGE="ex_routing_cms_postpage";
/**
* 交换机配置使用direct类型,Fanout:广播.Direct:定向 Topic:通配符。
* @return the exchange
*/
@Bean(EX_ROUTING_CMS_POSTPAGE)
public Exchange EXCHANGE_TOPICS_INFORM(){
return ExchangeBuilder.directExchange(EX_ROUTING_CMS_POSTPAGE).durable(true).build();
}
}
2.总的方法如下:
public ResponseResult post(String pageId){
//先实现页面静态化
String pageHtml = this.getPageHtml(pageId);
//将页面静态化文件存储到GridFs中
CmsPage cmsPage = this.saveHtml(pageId, pageHtml);
//向mq 发送消息
this.sendPostPage(pageId);
return new ResponseResult(CommonCode.SUCCESS);
}
2.1先实现页面静态化,将页面静态化文件存储到GridFs中
//将html页面保存到GridFSB上去
private CmsPage saveHtml(String pageId,String htmlContent){
CmsPage cmsPage= this.getCmsById(pageId);
if(cmsPage==null){
ExceptionCast.cast(CommonCode.INVALID_PARAM);
}
InputStream inputStream=null;
ObjectId objectId =null;
try {
//将htmlContent内容转成输入流
inputStream = IOUtils.toInputStream(htmlContent, "utf-8");
//将html文件内容保存到GridFS
objectId = this.gridFsTemplate.store(inputStream, cmsPage.getPageName());
} catch (IOException e) {
e.printStackTrace();
}
//toHexString:将整数转换成16进制的字符串
cmsPage.setHtmlFileId(objectId.toHexString());
//将html文件id更新到cmsPage中
this.cmsPageRepository.save(cmsPage);
return cmsPage;
}
2.2向Mq发送消息
//向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);
}