三、开发
模块依赖图
3.1 Portal 实现用户登录功能
3.2 Portal接入邮件服务
在配置发布时候,我们希望发布信息邮件通知到相关的负责人。现支持发送邮件的动作有:普通发布、灰度发布、全量发布、回滚,通知对象包括:具有namespace编辑和发布权限的人员以及App负责人。 和SSO类似,每个公司也有自己的邮件服务实现,所以我们相应的定义了EmailService接口,现有两个实现类:
- CtripEmailService:携程实现的EmailService
- DefaultEmailService:空实现
3.2.1 接入步骤
- 提供自己公司的EmailService实现,并在EmailConfiguration中注册。
- 构建邮件内容需要在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 相关代码
- ConfigPublishListener监听发布事件,调用emailbuilder构建邮件内容,然后调用EmailService发送邮件
- emailbuilder包是构建邮件内容的实现
- EmailService 邮件发送服务
- EmailConfiguration 邮件服务注册类