.net core實踐系列之簡訊服務-Sikiro.SMS.Bus服務的實現

來源:互聯網
上載者:User
前言

前兩篇《.net core實踐系列之簡訊服務-Sikiro.SMS.Api服務的實現》、《.net core實踐系列之簡訊服務-Api的SDK的實現與測試》分別講解了API提供服務與SDK調用API實現。

本篇會繼續講解Sikiro.SMS.Bus的服務實現,此實現是基於開篇的架構設計的擁有調度任務服務,在最後一篇會給架構最佳化的,拋棄了調度任務服務使用MQ代替。

源碼地址:github.com/SkyChenSky/Sikiro.SMS

功能流程描述

如所示,消費者訂閱到消費訊息後,通過工廠類建立出對應的簡訊電訊廠商類,通過調用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 = SmsEnums.SmsStatus.失敗 });        }

 

組件選擇宿主架構

對於有在.Net Framework上開發Windows服務的朋友對TopShelf應該會很熟悉。

優勢主要體現下面三點:

  • 基於控制台應用
  • 調試方便
  • 易於安裝部署

不少人認為,Core的出現,跨平台加命令列的優勢,可以輕易的在Linux部署守護進程。難道還需要宿主架構?

然而並不是所有公司選用了Linux系統的伺服器,就像我們公司。既然使用了Windows伺服器應該將他部署為Windows服務使其可視化方便管理,另外沒有等待到TopShelf的Core版本,因此我選擇了另一款宿主架構:PeterKottas.DotNetCore.WindowsService

PeterKottas.DotNetCore.WindowsService

源碼地址:github.com/PeterKottas/DotNetCore.WindowsService

雖然比不起TopShelf的功能強大,但是對於一般的需求使用基本滿足,而且使用方式也與TopShelf相似。下面是使用樣本:

class Program    {        static void Main(string[] args)        {            ServiceRunner<MainService>.Run(config =>            {                config.SetServiceInfo();                config.Service(serviceConfig =>                {                    serviceConfig.UseAutofac();                    serviceConfig.UseServiceFactory();                    serviceConfig.OnStart((service, extraParams) =>                    {                        service.Start();                    });                                            serviceConfig.OnStop(service =>                    {                        service.Stop();                    });                    serviceConfig.OnError(Console.WriteLine);                });            });        }    }

下面是安裝卸載的命令樣本:“

dotnet Sikiro.SMS.BUS.dll action:installdotnet Sikiro.SMS.BUS.dll action:uninstall
結尾

這裡就是本篇的內容,相比於前面幾篇的內容相對少點,如果有中途來看的朋友可以把《.net core實踐系列之簡訊服務-架構設計》看看作個補充,如果有任何建議,可以在下方評論反饋給我。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.