Slickflow.NET 开源工作流引擎基础介绍(十)--邮件轮询异步发送模块集成

前言:在任务数据生成时,为了让办理任务的用户及时获取到待办任务的主题和内容,需要发送通知类的消息,而电子邮件和手机端的短信通知则是比较普通的消息发送。本文是针对电子邮件异步发送模块的实现来做实例说明。

1. 邮件发送通知的位置

通常任务数据生成时,就需要发送一封邮件通知,邮件内容包括正文和页面地址信息;任务办理人员在接收到邮件后,会及时登录系统进行任务处理,发送邮件通知的好处就在于方便和及时。

但是邮件发送并不是所有的业务客户都需要的一个功能,它不便于紧耦合地在引擎流转环节,即跟任务数据的生成绑定。所以在系统构建时候选择了模块集成方式,跟引擎完全脱离而成为一个独立的模块实现。为了让用户熟悉这一开发方法的好处,特意将复杂系统的模块化构建示意如下:

2. 轮询邮件发送的处理

邮件通知的数据来源就是任务表(WfTasks),通过轮询来处理及时生成的待办任务数据,然后每条待办任务发送相应的邮件通知就可以。这样处理的好处是避免了跟引擎内部功能的紧耦合,让引擎更加专注于流转解析和功能扩展。

        /// <summary>
        /// 待办任务发送邮件通知
        /// </summary>
        public void SendTaskEMail(IList<ProcessEntity> processList,
            IList<UserEMailEntity> userList)
        {
            var wfService = new WorkflowService();
            var taskList = wfService.GetTaskListEMailUnSent();
            if (taskList != null && taskList.Count() > 0)
            {
                foreach (var task in taskList)
                {
                    Func<TaskViewEntity, IList<ProcessEntity>, IList<UserEMailEntity>, Task> func = SendEMailAsync;
                    BackgroundTaskRunner.FireAndForgetTaskAsync(func, task, processList, userList);
                }
            }
        }

  

3. 异步邮件发送方法 

邮件发送时,需要连接smtp服务器端口,并进行邮件用户的身份验证,所以是一个耗时耗资源的一个任务序列,在具体实现中利用异步方式,可以避免对主过程程序处理的性能影响,异步方法接口如下:

            //邮件信息
            MailMessage mail = new MailMessage();
            mail.Subject = Title;
            mail.Body = body;
            mail.From = new MailAddress(SendEMailAccount);      //发件人地址
            mail.SubjectEncoding = UTF8Encoding.UTF8;
            mail.BodyEncoding = UTF8Encoding.UTF8;
            mail.Priority = MailPriority.Normal;
            mail.IsBodyHtml = true;
            mail.To.Add(receiveEmail);
            smtp.SendCompleted += SendCompletedCallback;
            await smtp.SendMailAsync(mail);//发送邮件

  

4. HangFire 定时任务

邮件轮询发送时间间隔是每分钟进行,考虑到平台的开放性和兼容性,并没有利用WindowsSerivce来实现,而是采用HangFire自动作业框架来集成,其好处是跨平台的应用直接使用就可以。在.NET CORE的产品中做到代码完全一致。

        /// <summary>
        /// 邮件轮询发送
        /// </summary>
        private void AddJobOfTaskEMailSending()
        {
            var wfService = new WorkflowService();
            var processList = wfService.GetProcessListSimple();
            var msgService = new MessageService();
            var userList = msgService.GetUserList();

            RecurringJob.AddOrUpdate<MessageService>(s => s.SendTaskEMail(processList, userList),
                Cron.Minutely);
        }

  

5. 总结

邮件发送独立模块的集成是作为企业客户的一个功能需求来实现,从技术框架来看,采用轮询模式独立功能封装,更加适合从外部对引擎组件扩展,其好处是保证了引擎的稳定性,同时也作为一个可选项来让用户自由选择。

原文地址:https://www.cnblogs.com/slickflow/p/9157350.html

时间: 2024-12-14 09:17:29

Slickflow.NET 开源工作流引擎基础介绍(十)--邮件轮询异步发送模块集成的相关文章

Slickflow.NET 开源工作流引擎基础介绍(二)

集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造业务代码,适应业务过程的变化,这将会面临不断改写代码的需求:还有一种方式是使用流程引擎控制业务过程的变化,将改写业务代码的操作交由流程引擎,通过流程引擎解析业务规则,驱动业务过程流转,从而将改写业务代码的可能性降到最低. 显而易见,流程引擎带来的好处是为了更好解决业务过程变化后带来的重构风险,信息系

Slickflow.NET 开源工作流引擎基础介绍(三)

1. Slickflow Designer 技术优势 1) 基于HTML5技术,兼容常见浏览器; 2) 纯Javascript / JsPlumb 脚本实现SVG图形化显示; JsPlumb允许您使用SVG.Canvas 或者 VML链接屏幕上的元素,这些取决于您使用的浏览器的能力; 3) 图形元素参考BPMN定义,XML存储,更加适合商务人员理解业务过程定义; 4) 富客户端开发技术,使用JQuery/SlickGrid等组件,用户体验良好; 4) 前端架构开放,可允许程序开发人员扩展新的节点

Slickflow.NET 开源工作流引擎高级开发(一)--流程实现外部事件调用和变量存储

前言:流程实现基本流转功能外,通常也需要调用外部事件,用于和业务系统的交互,同时存储一些流程变量,用于追踪和记录业务数据变化对流程流转的影响. 1. 流程事件 流程执行过程中,伴随各种事件的发生,而且是存在于整个流程的生命周期,即从流程启动一直到流程结束的整个过程都有事件发生.这些事件的发生,业务系统通常也需要知道一些流程过程的关键节点,或里程碑状态.我们统称为流程事件. 1.1  流程事件触发类型 流程事件类型的定义是按照事件发生的位置来确定划分,跟流程直接有关的比如有:启动.运行.撤销.退回

.net开源工作流引擎ccflow

关于济南驰骋信息技术有限公司的.net开源工作流引擎 驰骋工作流引擎,工作流程管理系统:简称ccflow,驰骋一体化解决方案简称ccport. ccflow是济南驰骋信息技术有限公司向社会提供的一款100%开源软件,我们向社会承诺,核心代码100%的开源,多年以来我们践行自己的诺言,努力提高产品质量,奉献社会,成为了国内知名的老牌工作流引擎. ccflow1.0 发展于2003年,xxx省税收业务管理信息系统. ccflow5.0 诞生于2013年北京亿阳信通股份有限公司,应用于xx省电信,xx

几种开源工作流引擎的简单比较(转)

摘要:目前开源工作流引擎用的最多的是jbpm , 各种特性都不错, 文档也比较多, 下面只简单列举一下 目前开源工作流引擎用的最多的是jbpm , 各种特性都不错, 文档也比较多, 下面只简单列举一下 其他几种工作流引擎的特性.   Apache ODE Enhydra Shark Bonita Open Business Engine Eclipse JWT  支持的流程建模标准  WS-BPEL 2.0,流程定义必须使用该标准编写才能执行 WfMC和OMG标准 符合WfMC规范 遵循WfMC

Java三大主流开源工作流引擎技术分析

Java三大主流开源工作流引擎技术分析 首先,这个评论是我从网上,书中,搜索和整理出来的,也许有技术点上的错误点,也许理解没那么深入.但是我是秉着学习的态度加以评论,学习,希望对大家有用,进入正题! 三大主流工作流引擎:Shark,osworkflow,jbpm! Shark的靠山是Enhydra.Enhydra做过什么呢?多了!从j2ee应用服务器,到o/r mapping工具,到这个工作流引擎等等.为什么Shark的持久层采用DODS来实现?就是因为他们是一家人. Jbpm的靠山是jboss

开源工作流引擎内核主要关心的是什么?

JBPM是开源工作流引擎中最突出的一种,这种引擎模式现在使用的范围是比较广的.目前,开源工作流引擎有很多,不同的开源工作流引擎不管是设计还是实现方式都是不同的,其选型.算法.机制等各不相同.说起开源工作流引擎内核,我相信大家最关心的莫过于其引擎内核问题了.开源工作流的引擎内核最关注的是什么呢?下面我们一起来看看: 其实,引擎内核所关注的,只是一个抽象层面的问题,它的职责是很精简的,主要是为了确保流程从一个节点运行到另一个节点上,保证能够执行当前的节点.概括地来说,开源工作流引擎内核所关注的问题有

java开源工作流引擎osworkflow

目前实际用到的三个方法 初始化:initialize(String workflowName, int initialAction, Map inputs) 查询:query(WorkflowExpressionQuery query) 操作:doAction(long id, int actionId, Map inputs) ---- 最重要的两步是初始化和操作,查询可以自己定义查询,因为在初始化和操作的时候会操作表中数据,查询不会修改数据. 目前就本工作流理解的是根据配置文件记录流程的操作

开源工作流引擎 Workflow Core 的研究和使用教程

目录 开源工作流引擎 Workflow Core 的研究和使用教程 一,工作流对象和使用前说明 二,IStepBuilder 节点 三,工作流节点的逻辑和操作 容器操作 普通节点 事件 条件体和循环体 节点的异步或多线程 用于事务的操作 四,条件或开关 迭代 条件判断 节点并发 五,其它 开源工作流引擎 Workflow Core 的研究和使用教程 一,工作流对象和使用前说明 为了避免歧义,事先约定. 工作流有很多节点组成,一个节点成为步骤点(Step). 1,IWorkflow / IWork