Email多线程异步发送设计文档
来源:互联网 发布:eslyric源码 编辑:程序博客网 时间:2024/05/17 17:16
Email多线程异步发送设计文档
1 概述
系统中经常需要发送邮件通知用户,比较常见的是同步发送邮件,即在执行用户业务逻辑的线程中执行发送邮件动作;这样会造成发送邮件动作堵塞正常的业务逻辑执行,影响系统的整体性能,通过异步发送邮件,可以有效的提升用户使用满意度;通过将发送线程进行池化,可以避免线程创建并且有效的进行复用,节省资源。
2 需求及约束
2.1 需求
发送的邮件内容可以编辑并且不修改程序
每个发送模块可以配置不同邮件服务器、发送邮箱
发送邮件动作是异步
2.2 约束
发送邮件不需要百分之百成功
如果邮件内容来自于模板文件,设置的Freemaker的编码需要与模板文件的编码保持一致
3 详细设计
3.1 类图
- Runnable:该接口是java.lang.Runnable。
- EmailSender:该类实现Runnable,实现线程执行方法run,实现发送邮件动作sendEmail。其中run方法循环监控BlockedQueue队列,当队列有发送邮件请求时,就从队列中获取到EmailBody,然后调用sendEmail方法发送邮件。
- ExecutorService:该接口为java.util.concurrent.ExecutorService。
- SendEmailThreadPool:该类负责创建发送邮件的线程池(ExecutorService)。Init的方法逻辑:
- 根据配置信息中连接池的大小,使用Executors:newFixedThreadPool初始化连接池。
- 初始化BlockedQueue,假如配置信息的队列长度为0,那么就创建最大整数长度的对了(new LinkedTransferQueue),否则以长度为参数创建对了(new BoundedLinkedTransferQueue)。
- 启动发送邮件线程
5. SendEmailPools,持有线程池,构成key-value的对象,map的key值为发送邮件类型,value为对应的邮件线程池。
6. SendEmailConfigReader借助Digester进行线程池配置文件的解析
7. SendEmailThreadPoolFactory:初始化所有邮件线程池,对外暴露发送入口
- 读取配置文件,获取发送邮件恶需 要的信息,同时也读取队列的长度和连接池的大小配置信息,最后封装为一个SendEmailPools
- SendEmailThreadPool同时引用EmailConfig对象,即该连接池对应的邮件模板信息
- 使用变量EmailConfig对象,创建发送邮件的主体信息,并通过EmailSender发送。
3.2 时序图
初始化
发送邮件
附送源码:
emailpools源码
- Email多线程异步发送设计文档
- .net 多线程发送Email
- Gearman 使用案例(PHP--配合Yii2异步发送Email)
- 发送Email
- EMail发送
- 发送email
- 发送email
- 发送Email
- 发送email
- 发送Email
- email 发送
- 利用XMLHttpRequest对象异步发送XML文档
- 发送email 打开email
- MOSS中实现通过发送Email将文档存入文档库
- 异步调用和多线程的架构设计
- JSP发送EMAIL
- JSP发送EMAIL
- oracle内发送email
- SIP: From ,Contact, Via 和 Record-Route/Route head
- 杭州最新公交线路一览(150-)
- WPS2012专业版序列号
- 这是一个模拟书籍翻页效果的示例,主要是图像计算
- 数据表的各种操作
- Email多线程异步发送设计文档
- 关于SIP防火墙穿越的汇总
- 线程下DataGridView循环绑定时的滚动条问题
- javascript 触发事件列表
- “火柴棍式”程序员面试题
- QT学习7:1个事物领导另一个
- Eclipse 神技
- 鸟哥私房菜
- 底层数据库