前言
如上图所示,消费者订阅到消费消息后,通过工厂类创建出对应的短信运营商类,通过调用Send方法进行对短信运营商服务请求,得到响应结果后对持久化数据的状态进行更新。假如中途遇到异常则回滚数据状态,等待下一次调度任务进行调度。
下面是MainService的代码示例:
public class MainService : IMicroService { private readonly IBus _bus; private readonly SmsService _smsService; public MainService(IBus bus, SmsService smsService) { _bus = bus; _smsService = smsService; } public void Start() { Console.WriteLine("I started"); _bus.Subscribe<SmsQueueModel>("", msg => { try { _smsService.Send(msg.MapTo<SmsQueueModel, SmsModel>()); } catch (Exception e) { _smsService.RollBack(); e.WriteToFile(); } }); } public void Stop() { ConfigServer.Container?.Dispose(); Console.WriteLine("I stopped"); } }
下面是SmsService的代码示例:
public void Send(SmsModel item) { Sms = item; var isSuccess = _smsFactory.Create(item.Type).SendSMS(item.Mobiles, item.Content, _configuration["Sms:SignName"]); if (isSuccess) Success(item.Id); else Fail(item.Id); } public void RollBack() { RollBack(Sms.Id); } public void RollBack(string id) { _mongoProxy.Update<SmsModel>(a => a.Id == id, a => new SmsModel { Status = SmsEnums.SmsStatus.待处理 }); } private void Success(string id) { _mongoProxy.Update<SmsModel>(a => a.Id == id, a => new SmsModel { Status = SmsEnums.SmsStatus.成功 }); } private void Fail(string id) { _mongoProxy.Update<SmsModel>(a => a.Id == id, a => new SmsModel { Status =

