定时任务基础:
MQ:Message Queue
消息队列服务器:MSMQ、ActiveMQ、Redis等
项目任务:确定邮件的发送,重置密码的发送(发送可能会很慢,而且有可能还需要重试),用消息队列把注册过程和邮件发送过程分开
示例:
//testMessageQueue.csProj
namespace testMessageQueue { class Program { static void Main(string[] args) { /* while(true) { string email=Console.ReadLine(); using(IRedisClient client=RedisManager.ClientManager.GetClient()) { client.EnqueueItemOnList("TestEmail", email); } } */ using(IRedisClient client=RedisManager.ClientManager.GetClient()) { while(true) { string email = client.DequeueItemFromList("TestEmail"); if(email==null) { Console.WriteLine("等待输入"); Thread.Sleep(100); continue; } Console.WriteLine("发送邮箱:eamil=" + email); } } Console.ReadKey(); } } public class RedisManager { public static PooledRedisClientManager ClientManager { get; private set; } //内部可写,外部只能读 static RedisManager() { RedisClientManagerConfig redisConfig = new RedisClientManagerConfig(); redisConfig.MaxWritePoolSize = 128; redisConfig.MaxReadPoolSize = 128; ClientManager = new PooledRedisClientManager(new string[] { "127.0.0.1" }, new string[] { "127.0.0.1" }, redisConfig); //在哪几个ip上进行集群的读写分离操作 } } }
定时任务框架:
//testQuartz.csProj
namespace testQuartz { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 定时任务 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnQuartz_Click(object sender, EventArgs e) { //每隔一段时间执行一个任务 ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler sched = sf.GetScheduler(); //获得一个计划任务 JobDetail job = new JobDetail("job1", "group1", typeof(MyJog)); ////MyJog为实现了IJob接口的类 DateTime dt = TriggerUtils.GetNextGivenSecondDate(null, 2); //5秒后开始第一次运行 TimeSpan interval = TimeSpan.FromSeconds(5); //时间段--每隔5s执行一次 //每若干小时运行一次,小时间隔由appsettings中的IndexIntervalHour参数指定 Trigger trigger = new SimpleTrigger("trigger1", "group1", "job1", "group1", dt, null, SimpleTrigger.RepeatIndefinitely, interval); sched.AddJob(job, true); sched.ScheduleJob(trigger); sched.Start(); } } class MyJog : IJob { public void Execute(JobExecutionContext context) { MessageBox.Show("我执行了l"); } } }
实例:
原文:http://www.cnblogs.com/adolphyang/p/4944273.html