05-页面发布-生产方cms-发送页面发布消息

本文介绍了如何配置RabbitMQ,包括在`application.yml`中设置连接参数,在`pom.xml`添加依赖,以及在`RabbitMQConfig`中配置交换机。通过`PageService`使用`RabbitTemplate`发送消息到MQ,实现页面发布功能。在`CmsPageController`中实现了API接口,接收到页面发布请求后调用服务完成页面发布流程。
摘要由CSDN通过智能技术生成

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);
    }

1.4 页面发布前端

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值