在第一節中,我介紹了如何在自己的工程中引入ja-micro。接下來介紹一下ja-micro啟動的關鍵點吧。
類中,程式啟動時,還需要向main方法傳遞一些執行時需要的引數,分別是:-serviceaddress、-serviceport、-loglevel、-registryserver、-registry這些引數的作用分別如下:
-serviceaddress:程式啟動時,向微服務管理註冊的自己的服務位址,通常是127.0.0.1;
-serviceport:是程式執行時占用的埠號;
-loglevel:是程式執行時的日誌記錄的等級,這個很好理解,開發階段通常用debug,上線後通常設定為info;
-registryserver:是微服務管理平台的位址,如果程式向本的consul註冊自己,則該值通常為:127.0.0.1:8500,當然你也可以向任意乙個可以訪問到的微服務管理平台註冊,只要程式所在的機器能夠訪問到行。
-registry:微服務管理平台名稱,我用的是consul,所以在我的程式中,這個引數的值固定為consul。
僅向jettyservicebase.main傳遞上述引數,是不足以保證自己的微服務程式順利啟動的。為什麼呢?很簡單,還沒有寫一行自己的**,都沒有自己的微服務程式,肯定無法啟動了。
在微服務中,必須有自己的服務名稱、還需要有自己的handler,否則怎麼讓別人來使用你提供的服務。在ja-micro框架中,如何編寫自己的服務名和handler呢?
jettyservicebase中的**不長,很快就能看完。它做的主要工作是先掃瞄要載入的資訊,比如符合要求的service、handler類,然後初始化配置資訊,最後啟動乙個jetty容器。
要讓自己的程式run起來,最重要的是寫好service類和至少乙個handler類。首先,得在自己的工程中編寫乙個自己的service類,其要求如下:
1、該service類,必須繼承abstractservice
這個虛擬類;
2、在該service類中,必須將類註解為orangemicroservice;
3、不准寫多於乙個繼承abstractservice的類。
例如:
@orangemicroservice
public class serviceentrypoint extends abstractservice
@override
public void displayhelp(printstream arg0)
@override
public void bootstrapcomplete() throws interruptedexception
很奇怪吧?為什麼繼承abstractservice的類只能有乙個,不允許有多個?因為,這是自己微服務的入口,只允許定義乙個。當jettyservicebase在掃瞄時發現abstractservice的子類超過乙個,程式就拋異常退出。
在自己定義的abstractservice子類中,只需要實現它的所有方法即可,除了在bootstrapcomplete方法中必須呼叫一下super.bootstrapcomplete();其它你什麼都不必做,就算完成了自己子類的編寫。
事實上,當你完成了
abstractservice子類的開發後,微服務程式已經可以run起來了。這是個服務裡面是沒有提供可以訪問的方法而已。
自己做的微服務,總得有東西給別用才行。那麼,就開始寫自己的handler吧。
對於handler類也是有要求的:
1、必須繼承servicemethodhandler介面;
2、選項是在handler類上面加上註解rpchandler,為什麼說是選項呢,因為註解不是必須的,但如何不用註解,就必須在abstractservice類,手工呼叫registermethodhandlerfor方法對handler進行註冊,毫無疑問,在handler類中增加乙個註解是非常省心的事。
@rpchandler("monitor.sshgetlinuxmeminfo")
public class sshgetlinuxmeminfo implements servicemethodhandler
message是谷歌probobuf中定義的介面,它的繼承圖如下示:
事實上,在我的handler中,servicemethodhandler中的兩個泛型都是generatedmessagev3的子類,它們是我的handler的出參和入參。這兩個泛型類是如何定義出來的,這就不得不提到谷歌的protobuf了。在下一節中,我再介紹。
在實戰專案中,我們應該如何使用Position定位
有很多時候,我們不太情願去用position定位,雖然它能達到我們期望的效果,可它的缺點也很明顯。我最不喜歡的就是它的脫離文件流,可這也正是它的有點所在。下面我們簡單的描述一下在開發中哪些情形我們會使用到position定位吧!情景一 在移動端開發時,我們常常用彈性布局或者line height來使...
在專案中使用ExtJS
今天extjs官網發布了extjs最新正式版4.2.1。extjs為開發者在開發富客戶的b s應用中提供豐富的ui元件,具有統一的主題,便於快速開發,提高效率。但顯然它並不適合互聯 的開發。builds 壓縮後的extjs 體積更小,更快 docs 開發文件 examples 官方演示示例 loca...
在專案中使用springmvc
springmvc是spring框架的乙個模組,springmvc和spring無需通過中間整個層進行整合,它是乙個基於mvc的web框架。springmvc是基於方法開發的,struts2是基於類開發的。springmvc將url和controller方法對映,對映成功後springmvc生成乙個...