<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zxbyhcsdn

     

    一個監(jiān)控程序,調(diào)用短信接口的實(shí)現(xiàn).

    一個監(jiān)控程序,調(diào)用短信接口的實(shí)現(xiàn).

        最近接受了一個燙手的山芋頭.是公司的給一個客戶做的CRM系統(tǒng)中的一個訂單處理模塊,這個模塊當(dāng)時考慮并發(fā)和訪問量比較大所以套用SOA的思想,把訂單處理模塊單獨(dú)成一個服務(wù).
    部署在專門的機(jī)器上并做了負(fù)載均衡,提供接口給其他模塊調(diào)用. 由于本人專注數(shù)據(jù)庫方面和計(jì)費(fèi)結(jié)算等架構(gòu)方面.所以那個訂單處理模塊的設(shè)計(jì)開發(fā)我沒有參加. 系統(tǒng)測試和試運(yùn)行的時候都一切正常.
    但是上線不久,就出問題了. 那個訂單處理模塊老是掛掉.經(jīng)檢查發(fā)現(xiàn)那個服務(wù)運(yùn)行一段時間(半天或者一天總之說不清楚)就使得那個服務(wù)器的cpu占用100%.直接over, 然后重新殺掉那個模塊的jboss服務(wù),啟動一下jboss,又可以堅(jiān)持一天半天.
    檢查數(shù)據(jù)庫一切正常,估計(jì)是在程序里面有邏輯出現(xiàn)bug,時間長了吧cpu的資源耗盡了. 更讓人要跳樓的是做那個模塊的幾個哥們兒 跳槽了. 悲劇啊!!!!(人生就好比一個大茶幾,上面擺滿了杯具!!).
        咋辦捏,系統(tǒng)在運(yùn)行已經(jīng)有不少的用戶和數(shù)據(jù),不可能系統(tǒng)停止讓我們檢查原因,然后再上線,估計(jì)這樣說,Boss要吧我殺了...,看來在這個bug解決之前. 唯一的辦法就是,監(jiān)控這個程序,如果掛掉,馬上重啟服務(wù).但不可能幾頁子一天到黑守到起
    想到了一個可能的辦法,就是寫一個監(jiān)控程序,如果發(fā)現(xiàn)那個服務(wù)掛掉,馬上重啟服務(wù).但是試驗(yàn)只有,發(fā)現(xiàn)也走不通,服務(wù)掛的時候,是cpu100%沒法相應(yīng)了,這時候那個監(jiān)控程序一并搞死在那兒...
    然后又想到吧那個監(jiān)控程序部署到另一個服務(wù)器上,但是在另一個服務(wù)器上沒法去重啟訂單處理模塊的服務(wù).最后想如果發(fā)現(xiàn)服務(wù)掛了能通過短信通知維護(hù)人員也可以.維護(hù)人員可以通過手機(jī)上網(wǎng)遠(yuǎn)程桌面進(jìn)入那服務(wù)器,去重啟jboss.這樣就不用大家都守到哪兒了.
        于是馬上到網(wǎng)上搜如何通過程序給手機(jī)發(fā)短信的東東.
        首先搜到短信modem. 看到一哥們兒的blog里面寫的文章http://hi.baidu.com/surelybox/blog/item/0404371bf8066afdae513360.html,說要去買一個短信modem的設(shè)備,然后再根據(jù)它提供的sdk包進(jìn)行開發(fā).
    我暈死,這么個事情還要買個modem,而且那哥們兒說的用起來中間還有很多問題.不好解決,具體的情況 如果大家有興趣可以看看他的blog.
        我在想.那些電信運(yùn)營商其實(shí)提供一個webserive或者h(yuǎn)ttp的接口出來,然后我調(diào)用一下這個接口不是就可以吧短信發(fā)出去了么.咋個搞的這么麻煩捏.真是奇怪,于是放棄該死的短信modem的想法,又繼續(xù)在網(wǎng)上搜短線接口.
    搜出來,出現(xiàn)很多 xxx科技提供短信接口.看了幾個差不多都是短信群發(fā)的東東,提供一個群發(fā)的系統(tǒng),然后讓用戶可以去是設(shè)置號碼和短信內(nèi)容,再給用戶發(fā)送.但是我需要的是短信的api接口,這些又不太適合我.
    繼續(xù)搜索,看有沒有.
        正在折騰中,同事喊吃飯了,想到先把飯吃完多,再說.畢竟身體是革命的本錢! 吃飯回來,有點(diǎn)犯困,順便到cnbeta上去逛逛. 看到了一篇文章:中國電信將推出“能力開放平臺”http://www.cnbeta.com/articles/99098.htm
    奇怪能力開放是個什玩意兒,于是繼續(xù)看,開始寫了什么"國家重大專項(xiàng)課題,該項(xiàng)目由王曉初掛帥".哇,投入還大喲. 再往下看,有如下一句話:
     "通俗的講,就是電信將一些核心的 資源如短信、IVR、語音通話、位置服務(wù)等功能通過該平臺向普通的開發(fā)者開放,開發(fā)者可以根據(jù)自己的產(chǎn)品需求快捷申請和調(diào)用這些功能."
    喲呵,這個短信不是我真需要的么,而且是想普通開發(fā)者開放,我的監(jiān)控程序正好需要這個東東啊!!先進(jìn)去看看,http://open.ctfactory.com.然后里面發(fā)現(xiàn)了一個短信的鏈接.
    http://open.ctfactory.com/Portal/Supermarket/FuncDetail.aspx?funcID=10000033然后再點(diǎn)進(jìn)去.前面的注冊賬號這些都不看了,里面關(guān)鍵的兩個步驟:
    第四步: 調(diào)用能力開放平臺認(rèn)證鑒權(quán)接口,獲得認(rèn)證碼;
    第五步: 獲得認(rèn)證碼以后,調(diào)用短信發(fā)送接口。

    基本明白了,其實(shí)就是首先用賬號去申請一個驗(yàn)證碼,然后根據(jù)驗(yàn)證碼調(diào)用短信接口. 哇咔咔,方便.
    馬上注冊了一個賬號,然后注冊成功后提示 "一元訂購能力",進(jìn)入界面看到其中短信是一元錢訂購100次. my god 一分錢一次,電信這回真是大方了一回了.然后通過銀聯(lián)支付一塊錢,訂購了100次的短信.

        哈哈,短信的問題搞定了,接下來進(jìn)行監(jiān)控程序的編寫,其實(shí)就是用doNET寫了一個客戶端程序(這個部署在另外一個windows的機(jī)器上).代碼很簡單,啟一個線程,定時訪問接口,如果訪問不到了,就調(diào)用發(fā)短信的接口
    一下就是全部的代碼,通過注釋就可以看明白了. 為了趕時間,代碼寫的很不規(guī)范,望大家不要見笑喲

        public partial class Form1 : Form
        {
            //定義一個線程對象的變量,全局的
            Thread t;
            int interval=10;//間隔10秒

            delegate void delegate_getRet(string error);
            bool flag = true;
           
            //這些事doNET生成,不管他.
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
               
            }

            //在這個按鈕按下的時候,就啟動線程,每10秒執(zhí)行方法getRet
            private void start_Click(object sender, EventArgs e)
            {
                this.label1.Text = "啟動時間:" + DateTime.Now.Hour + "時" + DateTime.Now.Minute + "分";
                start.Enabled = false;
                flag = true;

                //執(zhí)行方法getRet
                t = new Thread(getRet);
                t.Start();
                
            }

            //關(guān)閉按鈕,就是停止線程的
            private void stop_Click(object sender, EventArgs e)
            {
                try
                {
                    flag = false;
                    t.Join();
                    t.Abort();
                }
                catch
                {
                }
                start.Enabled = true;
            }

            void getRet()
            {
                while (true)
                {
                    if (!flag) return;
                    try
                    {
                        //模擬一個http請求
                        WebRequest myRequest = null;
                        WebResponse myResponse = null;
                        //Stream resStream = null;
                        //StreamReader sr = null;
                        myRequest = WebRequest.Create("這兒是訂單模塊的接口,這兒就不便公開了!呵呵.如果要使用這個代碼,請改成你的URL地址");
                        myResponse = myRequest.GetResponse();
                      
                    }
                    catch (Exception ex)
                    {
                        //發(fā)一個短信,發(fā)短信的功能,封裝在這個方法里面,在方法里面決定接受者的電話號碼和短信內(nèi)容.
                        this.sendMsg("杯具啊!!又掛了!!趕快重啟...");
                    }
                    finally
                    {
                        Thread.Sleep(interval * 1000);
                    }
                }
            }


    以上是程序的主體結(jié)構(gòu),下面是發(fā)送短信的方法的代碼. 可能中途有寫問題,但是邏輯都是一樣的,代碼在我的本本上,現(xiàn)在我寫這個文章的時候又是在家里的臺式機(jī)上寫的
    如果有什么問題,可以看open.ctfactory.com 里面有詳細(xì)的開發(fā)文檔和客服服務(wù).

    private sendMsg(string msgContent)
    {
        //1.調(diào)用能力管控認(rèn)證鑒權(quán)接口,獲取Token,這個是一個webservice接口,
          // Authenticator = Base64(SHA1 (TimeStamp + “$” + APID+ “$” + APUserAccount + “$” + FunID + “$” + APKEY))
          // 以下介紹在http://open.ctfactory.com/Portal/Supermarket/FuncDetail.aspx?funcID=10000033#KSSS 都能看到

        //下面的設(shè)置分別是授權(quán)接口的URL和能力調(diào)用接口的URL,以及用戶ID和能力ID以及Key.
        string AuthInterfaceURL = ConfigurationManager.AppSettings["AuthInterfaceURL"];
        string FuncInterfaceURL = ConfigurationManager.AppSettings["FuncInterfaceURL"];
        string APID = ConfigurationManager.AppSettings["APID"];
        string APKey = ConfigurationManager.AppSettings["APKey"];
        string FuncID = ConfigurationManager.AppSettings["FuncID"];
        string APUserID = ConfigurationManager.AppSettings["APUserID"];     

           // AMCPForAP這個東東是用doNET將授權(quán)接口的webservice生成的本地代理
            string authResult = AMCPForAP.Auth(AuthInterfaceURL, APID, FuncID, APUserID, APKey);//AMCPForAP這兒是我通過doNET自動生成的webservice代理
            string[] authResults = authResult.Split('$');

            int result = Int32.Parse(authResults[0]);

          2.獲取驗(yàn)證碼發(fā)送消息
           if (result == 0)
            {
      //生成請求字符串
      string sendMsgRequest = "http://118.123.249.4/ims/ghsendim.php?SendMsgRequest=" + token + "$" + 這兒是要發(fā)送短信的電話號碼 + "$" + PSOCryptography.ConvertStringToBase64String(msgContent).Replace("+", "%2B").Replace("&", "%26") + "$" + "";

      //發(fā)送短信.這兒的短信發(fā)送接口是一個REST接口,需要模擬一個http請求來發(fā)送
                    WebRequest myRequest = WebRequest.Create(sendMsgRequest);
                    WebResponse myResponse = myRequest.GetResponse();

      resStream = myResponse.GetResponseStream();
                    string content = new StreamReader(resStream, System.Text.Encoding.UTF8).ReadToEnd();

      if (content.IndexOf("200")>0)
      {
          //記錄日志,發(fā)送成功
          ............
      }
      else
      {
          //記錄日志,發(fā)送失敗.
          ............
      }
            }

    }

     

    posted on 2009-12-05 16:22 zxbyh 閱讀(3211) 評論(7)  編輯  收藏

    評論

    # re: 一個監(jiān)控程序,調(diào)用短信接口的實(shí)現(xiàn). 2009-12-05 21:04 codigg

    呵呵,好~~~~~~  回復(fù)  更多評論   

    # re: 一個監(jiān)控程序,調(diào)用短信接口的實(shí)現(xiàn). 2009-12-06 00:14 fcuandy

    先頂再看  回復(fù)  更多評論   

    # re: 一個監(jiān)控程序,調(diào)用短信接口的實(shí)現(xiàn). 2009-12-07 13:10 HiMagic!

    帥鍋,我看到的怎么是10元100次  回復(fù)  更多評論   

    # re: 一個監(jiān)控程序,調(diào)用短信接口的實(shí)現(xiàn). 2009-12-07 13:20 HiMagic!

    原來是注冊后的體驗(yàn)價,謝了  回復(fù)  更多評論   

    # re: 一個監(jiān)控程序,調(diào)用短信接口的實(shí)現(xiàn). 2009-12-07 20:16 zbh

    不得啦!!
    那個一元體驗(yàn),是1元可以用100次短信.

    其實(shí)這個還蠻有用的,記的剛畢業(yè)那會兒,給一個出租車公司做軟件.
    那個老板提出一個需求.就是他們有很多出租車司機(jī),有時候要給他們打電話通知事情的時候,麻煩得很.希望能不能在系統(tǒng)上點(diǎn)一哈,就自動撥通出租車司機(jī)的電話.
    當(dāng)時覺得沒法實(shí)現(xiàn).現(xiàn)在看了這個能力開放的東東. 發(fā)現(xiàn)實(shí)現(xiàn)這個需求還是很簡單的.但是那時候還沒有這個能力開放平臺.  回復(fù)  更多評論   

    # re: 一個監(jiān)控程序,調(diào)用短信接口的實(shí)現(xiàn). 2009-12-08 12:35 anlaneg@qq.com

    呵呵,我不知道以下方法能不能解決樓主的辦法,如果樓主要發(fā)信息的人員使用中國移動,可以使用飛信,現(xiàn)在網(wǎng)上飛信接口還不少,只要一天發(fā)送量不超過2000條(好像是這個數(shù)目)就沒問題.不地話說會來,樓主的方法真的是治標(biāo)不治本!  回復(fù)  更多評論   

    # re: 一個監(jiān)控程序,調(diào)用短信接口的實(shí)現(xiàn). 2009-12-09 23:29 ttee

    樓主說的是,由于別人留下的代碼一時半回沒法搞清楚,要解決這個問題還需要時間,
    所以暫時用這個辦法來頂一哈!  回復(fù)  更多評論   


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 精品国产香蕉伊思人在线在线亚洲一区二区 | 亚洲日韩精品无码一区二区三区| 亚洲av无码日韩av无码网站冲| 青娱乐免费在线视频| 亚洲综合一区二区精品久久| 人妻无码一区二区三区免费| 麻豆亚洲AV永久无码精品久久| 日韩精品免费视频| 亚洲一区二区三区首页| 亚欧人成精品免费观看| 色偷偷亚洲女人天堂观看欧| 国产精品久久久久久久久久免费 | 亚洲VA中文字幕无码毛片| 午夜精品射精入后重之免费观看| 亚洲国产日韩一区高清在线 | 亚洲国产精品一区二区三区在线观看| 黄网站色在线视频免费观看| 亚洲人成欧美中文字幕| 国产一级特黄高清免费大片| 成人免费观看男女羞羞视频| 国产亚洲成av人片在线观看| 最近中文字幕mv免费高清在线 | 亚洲精品天堂成人片?V在线播放| 久久久精品视频免费观看 | 亚洲va成无码人在线观看| 精品剧情v国产在免费线观看| 美女视频黄视大全视频免费的| 久久亚洲国产成人影院网站 | 国产精品亚洲专区一区| 亚洲中文字幕第一页在线| 777成影片免费观看| 亚洲精品无码专区在线播放| 国产L精品国产亚洲区久久| 91老湿机福利免费体验| 亚洲av中文无码乱人伦在线观看| 亚洲毛片不卡av在线播放一区| 一个人免费视频观看在线www| 亚洲中文字幕久久精品无码2021| 免费国产成人午夜私人影视| 欧洲人免费视频网站在线| 亚洲av无码成人影院一区|