1. 文章发布模块

image.png

  • 文章审核通过之后发布APP文章实质:把wm_news 数据保存到article数据库(ap_article,ap_article_config,ap_article_content)的三张表中。再将wm_news中的文章状态改为9
  • 实现思路:

    1. 1. 查询并校验文章
    2. 1. 使用feign查询自媒体文章
    3. 1. 校验文章是否存在
    4. 1. 校验文章状态 是否为 4 8(人工审核通过,自动审核通过)
    5. 2. wmNews封装成apArticle
    6. 1. 创建article对象,将wmNews中的属性拷贝到article
    7. 1. 补全未拷贝属性 (articleId flag layout)
    8. 1. 补全作者信息 远程查询自媒体服务 得到与文章相关的作者信息
    9. 1. 频道信息 远程查询管理者服务 得到与文章相关的频道信息
    10. 3. 保存或修改aparticle
    11. 1. 根据id是否存在来决定是保存还是修改
    12. 1. id为空 则保存文章信息, id不为空 则修改文章信息
    13. 1. 修改文章后删除与该文章关联的配置信息,删除与该文章关联的内容信息
    14. 4. 保存 关联配置信息 文章内容
    15. 1. 保存配置信息
    16. 1. 保存内容信息
    17. 5. _TODO 页面静态化(详见Day7)_
    18. 5. 更新wmNews的状态为9
    19. 5. _TODO 通知es索引库添加文章索引_

    2.实现延时发布文章

  • 安装mq的延时插件,设置延时交换机,延时队列

  • 计算延时时间,设置参数,完成消息发送
  • 生产者: 自媒体服务的自动审核方法和管理者微服务的人工审核方法
  • 消费者: 文章微服务的发布文章方法

    1. //TODO 5.根据文章的发布时间 延时发布文章
    2. //5.1 获取发布时间
    3. long publishTime = wmNews.getPublishTime().getTime();
    4. //5.2 获取当前时间
    5. long nowTime = System.currentTimeMillis();
    6. //5.3 计算延时时间
    7. long delayTime = publishTime - nowTime; //距离发布文章还有多长时间
    8. //5.4 发送消息给mq
    9. rabbitTemplate.convertAndSend(PublishArticleConstants.DELAY_DIRECT_EXCHANGE
    10. , PublishArticleConstants.PUBLISH_ARTICLE_ROUTE_KEY
    11. , wmNews.getId(), new MessagePostProcessor() {
    12. @Override
    13. public Message postProcessMessage(Message message) throws AmqpException {
    14. message.getMessageProperties().setHeader("x-delay",delayTime<=0 ? 0 : delayTime);
    15. return message;
    16. }
    17. }
    18. );

    3.完善自媒体文章上下架

  • 使用mq发送与消费消息

  • 交换机: 选择主题交换机,可以处理复杂路由,和多种队列
  • 生产者: 自媒体微服务的上下架方法
  • 消费者: 文章微服务的上下架方法