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

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

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

    zxbyhcsdn

     

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

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

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

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

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

        public partial class Form1 : Form
        {
            //定義一個(gè)線程對(duì)象的變量,全局的
            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)
            {
               
            }

            //在這個(gè)按鈕按下的時(shí)候,就啟動(dòng)線程,每10秒執(zhí)行方法getRet
            private void start_Click(object sender, EventArgs e)
            {
                this.label1.Text = "啟動(dòng)時(shí)間:" + DateTime.Now.Hour + "時(shí)" + 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
                    {
                        //模擬一個(gè)http請(qǐng)求
                        WebRequest myRequest = null;
                        WebResponse myResponse = null;
                        //Stream resStream = null;
                        //StreamReader sr = null;
                        myRequest = WebRequest.Create("這兒是訂單模塊的接口,這兒就不便公開(kāi)了!呵呵.如果要使用這個(gè)代碼,請(qǐng)改成你的URL地址");
                        myResponse = myRequest.GetResponse();
                      
                    }
                    catch (Exception ex)
                    {
                        //發(fā)一個(gè)短信,發(fā)短信的功能,封裝在這個(gè)方法里面,在方法里面決定接受者的電話號(hào)碼和短信內(nèi)容.
                        this.sendMsg("杯具啊!!又掛了!!趕快重啟...");
                    }
                    finally
                    {
                        Thread.Sleep(interval * 1000);
                    }
                }
            }


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

    private sendMsg(string msgContent)
    {
        //1.調(diào)用能力管控認(rèn)證鑒權(quán)接口,獲取Token,這個(gè)是一個(gè)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,以及用戶(hù)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這個(gè)東東是用doNET將授權(quán)接口的webservice生成的本地代理
            string authResult = AMCPForAP.Auth(AuthInterfaceURL, APID, FuncID, APUserID, APKey);//AMCPForAP這兒是我通過(guò)doNET自動(dòng)生成的webservice代理
            string[] authResults = authResult.Split('$');

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

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

      //發(fā)送短信.這兒的短信發(fā)送接口是一個(gè)REST接口,需要模擬一個(gè)http請(qǐng)求來(lái)發(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) 評(píng)論(7)  編輯  收藏

    評(píng)論

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

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

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

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

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

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

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

    原來(lái)是注冊(cè)后的體驗(yàn)價(jià),謝了  回復(fù)  更多評(píng)論   

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

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

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

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

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

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

    樓主說(shuō)的是,由于別人留下的代碼一時(shí)半回沒(méi)法搞清楚,要解決這個(gè)問(wèn)題還需要時(shí)間,
    所以暫時(shí)用這個(gè)辦法來(lái)頂一哈!  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


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

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(1)

    隨筆分類(lèi)

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 中文字幕视频免费| 国产精品亚洲高清一区二区| 亚洲人成网站色7799| 日韩视频免费一区二区三区| 人妻仑乱A级毛片免费看| 亚洲成av人在线视| 亚洲精品免费网站| 暖暖免费中文在线日本| 亚洲av无码一区二区三区网站| 美女视频黄免费亚洲| 一级一级一级毛片免费毛片| 亚洲视频在线免费播放| 尤物永久免费AV无码网站| 久久国产乱子伦精品免费强| 亚洲日韩AV一区二区三区中文 | 国产亚洲精品影视在线产品| 久久久久成人精品免费播放动漫| 伊人久久五月丁香综合中文亚洲 | 午夜不卡久久精品无码免费 | 三级毛片在线免费观看| youjizz亚洲| 亚洲精品无码久久久影院相关影片 | caoporn成人免费公开| 亚洲电影在线免费观看| 亚洲Av无码乱码在线观看性色| 中文字幕天天躁日日躁狠狠躁免费| 亚洲AV无码男人的天堂| 久久亚洲精品中文字幕无码| 小小影视日本动漫观看免费| 最近免费mv在线电影| 久久www免费人成精品香蕉| 亚洲免费福利在线视频| 亚洲AV人无码激艳猛片| 亚洲成a人一区二区三区| 女性无套免费网站在线看| 一区二区免费视频| 男女拍拍拍免费视频网站| 美女免费视频一区二区三区| 中文文字幕文字幕亚洲色| 97se亚洲综合在线| 国产亚洲av片在线观看16女人|