雖然Service Fabric的Java支持版本尚未正式發佈,可是Service Fabric自己的服務管理、部署、升級等功能是很是好用的,那麼Java的開發者能夠如何利用上Service Fabric的這個功能呢?答案很簡單,其實只要利用Service Fabric的Deploy Guest Executable就行了,也就是說Service Fabric是容許部署一個或者多個獨立運行的exe,而且運行在Service Fabric的節點中的。詳細的信息能夠參看官方的這個文檔:html
https://azure.microsoft.com/zh-cn/documentation/articles/service-fabric-deploy-existing-app/java
下面我就拿部署Java的Jetty作個樣例:web
首先咱們用Visual Studio建立一個Service Fabric的Application瀏覽器
在嚮導的界面上選擇咱們先將主要參數留空,將Working Folder的選項從默認的Work改爲CodeBasetomcat
建立好工程後,咱們在jettyonjavaPkg的目錄下建立一個名字爲Code的目錄,而且將事先下載好的Java的SDK和Jetty拷入Code目錄下app
文件拷貝完成後,就能夠編輯ServiceManifest.xml了。主要是要修改EntryPoint這一節負載均衡
<EntryPoint> <ExeHost> <Program>java\bin\java.exe</Program> <Arguments>-Djetty.port=8080 -Djetty.base=..\..\jetty -jar ..\..\jetty\start.jar</Arguments> <WorkingFolder>CodeBase</WorkingFolder> <!-- Uncomment to log console output (both stdout and stderr) to one of the service's working directories. --> <!-- <ConsoleRedirection FileRetentionCount="5" FileMaxSizeInKb="2048"/> --> </ExeHost> </EntryPoint>
其中Program裏面咱們會調用Java.exe文件,而後在Arguments裏面填入Jetty的相關參數,這裏要注意的是Program裏面不能使用批處理文件,由於Service Fabric的服務監控須要跟蹤Exe的進程ID,以便當進程出問題時可以及時切換到其餘節點裏去。若是你的Program裏面指定的是批處理文件.bat的話,雖然這個批處理會執行,可是因爲拿不到進程ID,因此Service Fabric會不斷的去Call這個批處理的,這也是爲何我選擇Jetty而不是常見的Tomcat容器的緣由。webapp
編輯好了EntryPoint了,由於jetty是要提供Web服務的,咱們須要告訴Service Fabric,這個Application提供的是什麼端口服務,因此咱們還須要編輯Resources節jsp
<Resources> <Endpoints> <!-- This endpoint is used by the communication listener to obtain the port on which to listen. Please note that if your service is partitioned, this port is shared with replicas of different partitions that are placed in your code. --> <Endpoint Name="tomcatTypeEndpoint" Protocol="http" Port="8080" Type="Input" /> </Endpoints> </Resources>
在Endpoint的設置裏面能夠看到發佈的8080 http端口跟前面一節的參數裏面啓動Jetty的參數8080是一致的。測試
作完這些設置,咱們再在jetty的webapps的Root裏面放入一個index.jsp,以便驗證下咱們的jetty是否是發佈在Service Fabric上的
這個jsp的代碼比較簡單,就是用來顯示下Java版本啥的
<!DOCTYPE html> <html> <head> <title>Microsoft Service Fabric on Java - Welcome</title> </head> <body bgcolor="#00abec" > <div id="feature"> <div id="content"> <h2>Service Fabric on Java,Node Address is:<%out.print(request.getLocalAddr());%></h2> <br/> <table width="750" frame="below"> <tr bgcolor="rgb(13,188,242)"> <th align="left" width="200"> Java Property </th> <th align="left" width="500"> Value </th> </tr> <%@ page import="java.util.*" %> <% ArrayList<String> mainPageProps = new ArrayList<String>(); mainPageProps.add("java.version"); mainPageProps.add("java.vendor"); mainPageProps.add("os.arch"); mainPageProps.add("catalina.base"); mainPageProps.add("jetty.base"); mainPageProps.add("user.timezone"); for(String name : mainPageProps) { String value = System.getProperty(name); if(value != null) { out.print("<tr><td>" + name); out.print("</td><td>" + value ); out.print("</td></tr>"); } } %> </table> </font> </div> </div> </body> </html>
準備好了,咱們就能夠在VS上面按F5,將程序部署到本地的集羣裏面進行測試了。
這時候打開瀏覽器訪問http://localhost:8080/index.jsp 這樣咱們就能夠看到咱們剛纔準備好的jsp文件了
從上面的截圖,能夠看出來Jetty是運行在Node_4上的,咱們試試從Service Fabric Explorer裏把節點4重啓一下,
用瀏覽器訪問http://localhost:19080
這時候,咱們會發現Service Fabric的羣集很快幫咱們吧應用遷移到了Node_0
這樣咱們很容易就體驗到了Service Fabric幫咱們管理服務的健康,實現應用快速遷移的功能。固然Service Fabric還支持服務自己的負載均衡的,可是因爲本機無法兩個應用同時發佈8080端口,咱們只能等Java版本的Service Fabric Service SDK發佈或者將應用部署到雲上面才能體驗了。