Lagom參考指南(三)

開發環境下運行Lagom
1.開發環境web

Lagom的sbt或者maven項目是能夠基於開發的環境容許使用單個命令來運行任意數量的服務。
當代碼更改時,一樣的命令也會從新加載服務,這樣你就不用手動重啓了,您能夠繼續關注您的工做,並讓Lagom進行編譯和從新加載。
(1)運行Maven中的全部服務
命令很簡單,就是 lagom:runAll
若是您有不少服務,或者第一次檢索依賴關係,這可能須要一段時間,
(2)熱加載
一旦「Services started」消息出現,若是您對源代碼進行更改,您將在控制檯看到這樣的輸出:
[info] Compiling 1 Java source to /<project-path>/target/scala-2.11/classes...
--- (RELOAD) ---
(3)咱們所看到的背後
當咱們運行了runAll命令以後,在背後到底都發生了什麼呢??
    >啓動了一個嵌入式服務定位器(特別相似於zk或者eureka)
    >啓動了一個Cassandra服務器
    >開始了kafka服務器(這個比較熱了,mq系列)
    >你的服務開始
        >並向服務定位器註冊
這一切都是在沒有特殊代碼或附加配置的狀況下自動發生的。
您能夠經過在web瀏覽器中查看http://localhost:8000 / services來驗證您的服務正在運行(或者使用像curl這樣的命令行工具),服務定位器,在端口8000上運行,江湖返回相似於以下這樣的信息:
    [{"name":"hello-stream","url":"http://0.0.0.0:26230"},
     {"name":"cas_native","url":"tcp://127.0.0.1:4000/cas_native"},
     {"name":"hello","url":"http://0.0.0.0:24266"}]
cas_native是Cassandra服務器,正如您將在編寫持久和集羣服務的文檔中學習的,Cassandra是Lagom的默認數據庫,它是開發環境的一個組成部分。
服務爲定位器,Cassandra和kafka在接下來的章節中詳細討論。

2.運行服務算法

就像在上節講的那樣,在構建中定義的全部Lagom服務均可以用單個任務來運行:runAll。執行此任務時,將啓動嵌入式服務定位器,一個內嵌的 Cassandra服務器也會隨之啓動,而後你的全部的服務都會並行的被啓動起來。並且,全部啓動的服務都將以熱重載模式運行。熱從新加載意味着服務會自動地從新加載您所作的每個更改,這樣您就沒必要手動從新啓動它們。大多數時候,runAll任務將爲您提供良好的服務。然而,有時您可能想手動啓動一些服務,這是當run 任務將派上用場的時候。run任務對每一個Lagom服務實現項目均可用。
在Maven中,您可使用Maven項目列表標記來執行特定服務的run任務:
    $ mvn -pl <your-project-name> lagom:run
您應該記住的一點是,run只啓動特定的服務,它既不啓動服務定位器,也不啓動Cassandra服務器。所以,在手動啓動服務以前,您可能須要手動啓動服務定位器和Cassandra服務器。

3.端口是如何分配給服務的數據庫

在檢查運行服務列表時,您可能想知道端口是如何分配的。您應該注意到的一點是,端口的分配是一致的,這意味着每一個服務將獲得分配的相同端口,這是真正有用的,它容許咱們來編寫測試服務功能的測試腳本,甚至能夠與與團隊的其餘成員共享建立的腳本。即便在不一樣的機器上,一樣的端口也會被肯定地選擇!注意,這裏提醒一下,不是說全部服務使用一個端口,而是lagom使用算法,期間用到了項目名,也就是說,同一個項目。無論啥時候,它端口都是惟一的,算法致使的。
爲每一個服務分配一個端口的算法以下:
    >這個項目的名稱是散列的。
    >哈希絕對值被投影到端口範圍(默認的端口範圍是[49152,65535])
    >若是沒有其餘項目聲明相同的端口,則指定的端口分配給項目。若是兩個或多個項目被投影到同一個端口上,相互衝突的項目是按字母順序排列的,首先出現的項目將獲得分配給它的預期端口。然而,餘下的項目將獲得最接近的(嚴格的)可用的臨近的端口。
    總之,你不須要去擔憂這個,與大多數狀況同樣,端口範圍寬到足以使衝突不可能發生。然而,有時您可能仍然傾向於將特定的端口分配給服務(例如,若是自動分配的端口已經在您的系統中使用)您能夠手動爲項目的服務端口設置提供端口號。
    在Maven中,您能夠經過修改服務實現pom配置來實現這一點:
        <plugin>
            <groupId>com.lightbend.lagom</groupId>
            <artifactId>lagom-maven-plugin</artifactId>
            <configuration>
                <servicePort>11000</servicePort>
            </configuration>
        </plugin>
    上文中的算法的描述,在默認端口中,默認端口是[49152,65535]。這也稱爲短暫的端口範圍,IANA爲動態端口選擇使用了一系列的端口號。若是默認範圍不適合您,您能夠經過在構建中添加如下內容來更改它。
    pom文件中加入:
        <plugin>
            <groupId>com.lightbend.lagom</groupId>
            <artifactId>lagom-maven-plugin</artifactId>
            <version>${lagom.version}</version>
            <configuration>
                <servicePortRange>
                    <min>40000</min>
                    <max>45000</max>
                </servicePortRange>
            </configuration>
        </plugin>
    在此更改以後,您的服務項目將被分配到一個範圍[40000,45000],可是須要注意的是,咱們的端口範圍的小,帶來的是兩個服務碰巧是分配同一個端口的可能性就大了。這自己並非問題(只要全部項目都有足夠的端口),可是,在您的構建中添加一個新的服務項目可能會致使對已分配到現有服務項目的端口的更改,若是這兩個項目都發生相同的端口。若是您不但願這種狀況發生,請確保提供的端口範圍足夠寬。或者,手動爲服務項目分配端口,由於這是有意義的。

4.服務定位器(就相似於zk和eureka)瀏覽器

服務定位器嵌入在Lagom的開發環境中,容許服務發現並相互通訊。有一些設置和任務能夠爲您喜歡的嵌入式服務定位器調整,讓咱們來探索它們:
(1)默認的端口號
在Lagon中,服務發現的端口號默認的是8000,可是這個端口是很是容易被其餘的應用所佔用的。或者,您能夠經過在構建中添加如下內容來告訴服務定位器在10000端口上運行。
在總項目下的pom文件裏配置:
    <plugin>
        <groupId>com.lightbend.lagom</groupId>
        <artifactId>lagom-maven-plugin</artifactId>
        <version>${lagom.version}</version>
        <configuration>
            <serviceLocatorPort>10000</serviceLocatorPort>
        </configuration>
    </plugin>
(2)與外部的服務進交互
能夠在您的構建中定義的Lagom服務和無限數量的外部服務(能夠在本地運行或在另外一臺機器上運行)之間進行通訊。您要作的第一件事是在服務定位器中註冊每一個外部服務。假設咱們想要註冊一個名爲weather的外部服務,它運行在http://localhost:3333中,下面是咱們要添加到構建的內容。
在總項目下的pom文件裏配置:
    <plugin>
        <groupId>com.lightbend.lagom</groupId>
        <artifactId>lagom-maven-plugin</artifactId>
        <version>${lagom.version}</version>
        <configuration>
            <unmanagedServices>
                <weather>http://localhost:3333</weather>
            </unmanagedServices>
        </configuration>
    </plugin>
相關文章
相關標籤/搜索