三、开发

模块依赖图

模块依赖图

3.1 Portal 实现用户登录功能

请参考Portal 实现用户登录功能

3.2 Portal接入邮件服务

在配置发布时候,我们希望发布信息邮件通知到相关的负责人。现支持发送邮件的动作有:普通发布、灰度发布、全量发布、回滚,通知对象包括:具有namespace编辑和发布权限的人员以及App负责人。 和SSO类似,每个公司也有自己的邮件服务实现,所以我们相应的定义了EmailService接口,现有两个实现类:

  1. CtripEmailService:携程实现的EmailService
  2. DefaultEmailService:空实现

3.2.1 接入步骤

  1. 提供自己公司的EmailService实现,并在EmailConfiguration中注册。
  2. 构建邮件内容需要在PortalDB,serverconfig表内配置一些参数,如下:
  • apollo.portal.address Apollo Portal的地址。方便用户从邮件点击跳转到Apollo Portal查看详细的发布信息。
  • email.supported.envs 支持发送邮件的环境列表,英文逗号隔开。我们不希望发布邮件变成用户的垃圾邮件,只有某些环境下的发布动作才会发送邮件。
  • email.sender 邮件的发送人。
  • email.template.framework 邮件内容模板框架。将邮件内容模板化、可配置化,方便管理和变更邮件内容。
  • email.template.release.module.diff 发布邮件的diff模块。
  • email.template.rollback.module.diff 回滚邮件的diff模块。
  • email.template.release.module.rules 灰度发布的灰度规则模块。 我们提供了以上邮件模板样例,方便大家使用。

注:运行时使用不同的实现是通过Profiles实现的,比如你自己的Email实现是在custom profile中的话,在打包脚本中可以指定-Dapollo_profile=github,custom。其中github是Apollo必须的一个profile,用于数据库的配置,custom是你自己实现的profile。同时需要注意在EmailConfiguration中修改默认实现的条件@Profile({"!custom"})

3.2.2 相关代码

  1. ConfigPublishListener监听发布事件,调用emailbuilder构建邮件内容,然后调用EmailService发送邮件
  2. emailbuilder包是构建邮件内容的实现
  3. EmailService 邮件发送服务
  4. EmailConfiguration 邮件服务注册类