zxbyhcsdn

           

          一個監控程序,調用短信接口的實現.

          一個監控程序,調用短信接口的實現.

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

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

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

              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秒執行方法getRet
                  private void start_Click(object sender, EventArgs e)
                  {
                      this.label1.Text = "啟動時間:" + DateTime.Now.Hour + "時" + DateTime.Now.Minute + "分";
                      start.Enabled = false;
                      flag = true;

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

                  //關閉按鈕,就是停止線程的
                  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)
                          {
                              //發一個短信,發短信的功能,封裝在這個方法里面,在方法里面決定接受者的電話號碼和短信內容.
                              this.sendMsg("杯具啊!!又掛了!!趕快重啟...");
                          }
                          finally
                          {
                              Thread.Sleep(interval * 1000);
                          }
                      }
                  }


          以上是程序的主體結構,下面是發送短信的方法的代碼. 可能中途有寫問題,但是邏輯都是一樣的,代碼在我的本本上,現在我寫這個文章的時候又是在家里的臺式機上寫的
          如果有什么問題,可以看open.ctfactory.com 里面有詳細的開發文檔和客服服務.

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

              //下面的設置分別是授權接口的URL和能力調用接口的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將授權接口的webservice生成的本地代理
                  string authResult = AMCPForAP.Auth(AuthInterfaceURL, APID, FuncID, APUserID, APKey);//AMCPForAP這兒是我通過doNET自動生成的webservice代理
                  string[] authResults = authResult.Split('$');

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

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

            //發送短信.這兒的短信發送接口是一個REST接口,需要模擬一個http請求來發送
                          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)
            {
                //記錄日志,發送成功
                ............
            }
            else
            {
                //記錄日志,發送失敗.
                ............
            }
                  }

          }

           

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

          評論

          # re: 一個監控程序,調用短信接口的實現. 2009-12-05 21:04 codigg

          呵呵,好~~~~~~  回復  更多評論   

          # re: 一個監控程序,調用短信接口的實現. 2009-12-06 00:14 fcuandy

          先頂再看  回復  更多評論   

          # re: 一個監控程序,調用短信接口的實現. 2009-12-07 13:10 HiMagic!

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

          # re: 一個監控程序,調用短信接口的實現. 2009-12-07 13:20 HiMagic!

          原來是注冊后的體驗價,謝了  回復  更多評論   

          # re: 一個監控程序,調用短信接口的實現. 2009-12-07 20:16 zbh

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

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

          # re: 一個監控程序,調用短信接口的實現. 2009-12-08 12:35 anlaneg@qq.com

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

          # re: 一個監控程序,調用短信接口的實現. 2009-12-09 23:29 ttee

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


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


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 沭阳县| 南木林县| 平舆县| 连南| 天全县| 乌海市| 任丘市| 莱州市| 钟山县| 隆德县| 五家渠市| 通化县| 沛县| 呼和浩特市| 乐安县| 扎赉特旗| 东港市| 甘德县| 富蕴县| 大方县| 吉安市| 冀州市| 丹凤县| 开封市| 金昌市| 章丘市| 贵阳市| 周宁县| 镇坪县| 长泰县| 祁连县| 扬州市| 威信县| 怀柔区| 安达市| 嘉定区| 射洪县| 金昌市| 安新县| 克拉玛依市| 西昌市|