成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Lagom參考指南(二)

import. / 3149人閱讀

摘要:允許將反序列化為沒有附加注釋元數(shù)據(jù)不可變的類。包的庫(kù)經(jīng)常會(huì)想支持多個(gè)版本的這樣做需要構(gòu)建一個(gè)為每個(gè)版本的支持工件它介紹了如何區(qū)分這些工件的問題看到像不支持添加額外的元數(shù)據(jù)依賴關(guān)系的想法來指定他們需要什么版本的。

1.Defining a Lagom build(定義一個(gè)Lagom構(gòu)建)

正如在Lagom構(gòu)建哲學(xué)中已經(jīng)討論過的那樣,使用Lagom,您可以自由地將所有服務(wù)組合在一個(gè)多帶帶的構(gòu)建中,或者多帶帶構(gòu)建它們。
下面,我們將描述如何構(gòu)建包含所有服務(wù)的單一構(gòu)建。hello示例遵循這個(gè)結(jié)構(gòu)。
然后,在下一節(jié)中,我們將描述一個(gè)服務(wù)構(gòu)建的替代方法。
(1)理解你的項(xiàng)目結(jié)構(gòu)
    每個(gè)服務(wù)至少包含兩個(gè)部分:一個(gè)API項(xiàng)目和一個(gè)實(shí)現(xiàn)項(xiàng)目。(這些是同一構(gòu)建中的子項(xiàng)目。)
    API項(xiàng)目包含服務(wù)接口,也稱為描述符,以及接口使用的所有數(shù)據(jù)模型,例如請(qǐng)求和響應(yīng)消息。API項(xiàng)目可以依賴于其他服務(wù)的使用和使用。
    實(shí)現(xiàn)項(xiàng)目自然也依賴于API項(xiàng)目,以實(shí)現(xiàn)它。
    考慮下面的示例系統(tǒng):
    ![圖片描述][1]
    這個(gè)系統(tǒng)有兩個(gè)服務(wù),一個(gè)服務(wù)叫hello,另一個(gè)服務(wù)叫hello-stream。每個(gè)服務(wù)有兩個(gè)定義的sbt項(xiàng)目,一個(gè)api項(xiàng)目:hello-api和hello-stream-api,和一個(gè)實(shí)現(xiàn)項(xiàng)目:hello-impl和hellp-stream-impl.此外,hello-stream-impl依賴于hello-api,調(diào)用hello-stream來使用它。
    
    下面我們將怎么創(chuàng)建一個(gè)Lagom服務(wù):
    ①配置項(xiàng)目根(Configuring the root project)
    在Lagom,使用多模塊構(gòu)建是典型的??梢栽诟?xiàng)目中配置Lagom maven插件,我們需要把它加到pom文件里的plugins標(biāo)簽里:
        
            com.lightbend.lagom
            lagom-maven-plugin
            ${lagom.version}
        
    這樣做將允許您使用像lagom:runAll這樣的命令來運(yùn)行系統(tǒng)中的每一個(gè)服務(wù),并定義系統(tǒng)范圍的配置。Maven插件從父poms繼承它們的配置,因此在父pom中定義的任何東西都將用于所有服務(wù)。
    因?yàn)閘agom是需要jdk1.8以上的,所以您需要將Java編譯的源和目標(biāo)版本設(shè)置為1.8。此外,Lagom自帶jackson參數(shù)拆箱。允許jackson將json反序列化為沒有附加注釋元數(shù)據(jù)不可變的類。利用這個(gè)特性,Java編譯器必須啟用參數(shù)名稱。源、目標(biāo)和參數(shù)名配置最好在根項(xiàng)目中配置,因?yàn)榕渲脤⒂伤凶幽K繼承:
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.5.1
            
                1.8
                1.8
                
                    -parameters
                
            
        
    我們還建議在您的根項(xiàng)目pom中使用Maven依賴管理來控制整個(gè)系統(tǒng)中的依賴版本,例如下面:
        
            
                
                    com.lightbend.lagom
                    lagom-javadsl-server_2.11
                    1.3.4
                
                
                    com.typesafe.play
                    play-netty-server_2.11
                    2.6.0-M5
                
                
                    com.lightbend.lagom
                    lagom-javadsl-api_2.11
                    1.3.4
                
            
        
    關(guān)于Scala版本的注釋:
        在向Lagom庫(kù)中添加依賴關(guān)系時(shí),您需要確保在工件ID中包含Scala主版本,for example:lagom-javadsl-api_2.11.Lagom本身是大多在Scala實(shí)現(xiàn),與Java不同,Java維護(hù)者控制虛擬機(jī),當(dāng)添加新特性時(shí),可以在虛擬機(jī)上構(gòu)建向后兼容性,當(dāng)在Scala中添加新特性時(shí),向后兼容性是非常困難的如果不是不可能維持,因此,必須根據(jù)Scala的某個(gè)主要版本來編譯庫(kù)。
        jar包的庫(kù)經(jīng)常會(huì)想支持多個(gè)版本的Scala,這樣做需要構(gòu)建一個(gè)為每個(gè)版本的Scala支持工件,它介紹了如何區(qū)分這些工件的問題,看到像maven不支持添加額外的元數(shù)據(jù)依賴關(guān)系的想法來指定他們需要什么版本的Scala。為了解決這個(gè)問題,我們使用了將Scala版本附加到工件的約定。
        
    定義一個(gè)服務(wù):
    服務(wù)的API模塊是一個(gè)簡(jiǎn)單的maven項(xiàng)目。它不需要配置Lagom插件,通常它只需要依賴于Lagom API庫(kù)。例如:
        
            4.0.0
            
                com.example
                my-first-system
                1.0-SNAPSHOT
            
        
            hello-api
        
            jar
        
            
                
                    com.lightbend.lagom
                    lagom-javadsl-api_2.11
                
            
        
    服務(wù)的實(shí)現(xiàn)模塊也是一個(gè)簡(jiǎn)單的maven項(xiàng)目,但是會(huì)有更多的依賴關(guān)系,并且需要配置 lagom-maven-plugin;來讓它成為一個(gè)服務(wù)項(xiàng)目,所以這個(gè)插件知道在使用runAll時(shí)包含進(jìn)它:
        
            4.0.0
            
                com.example
                my-first-system
                1.0-SNAPSHOT
            
        
            hello-impl
        
            jar
        
            
                
                    ${project.groupId}
                    hello-api
                    ${project.version}
                
                
                    com.lightbend.lagom
                    lagom-javadsl-server_2.11
                
                
                    com.lightbend.lagom
                    lagom-javadsl-persistence_2.11
                
                
                    com.lightbend.lagom
                    lagom-logback_2.11
                
                
                    com.typesafe.play
                    play-netty-server_2.11
                
                
                    com.lightbend.lagom
                    lagom-javadsl-testkit_2.11
                
            
        
            
                
                    
                        com.lightbend.lagom
                        lagom-maven-plugin
                        
                            true
                        
                    
                
            
        
    
    這里有幾點(diǎn)需要注意:
        >實(shí)現(xiàn)依賴于它的API項(xiàng)目,因此它可以實(shí)現(xiàn)這個(gè)API。
        >它也需要依賴于lagom-javadsl-server,這為項(xiàng)目提供了所有服務(wù)器端代碼。
        >這個(gè)特別的服務(wù)使用Lagom的持久化API來對(duì)數(shù)據(jù)進(jìn)行持久化,所以它還需要你依賴于lagom-javadsl-persistence.
        >日志,默認(rèn)的是使用lagom-logback做維護(hù)日志的實(shí)現(xiàn)
        >play框架的 HTTP服務(wù)器的實(shí)現(xiàn)需要配置- Play提供兩個(gè)服務(wù)器實(shí)現(xiàn),一個(gè)在Netty,一個(gè)在Akka HTTP。在這種情況下,Netty已經(jīng)被選中。
        >lagon-maven-plugin已經(jīng)配置好了取讓lagonService是true,這告訴Lagom,這是一個(gè)在運(yùn)行l(wèi)agon:run時(shí)應(yīng)該運(yùn)行的Lagom服務(wù)
        

2.將一個(gè)系統(tǒng)分解為多個(gè)構(gòu)建

在設(shè)計(jì)一個(gè)Lagom系統(tǒng)時(shí),您可以靈活地組織您的服務(wù),以構(gòu)建滿足您需求的構(gòu)建單元。對(duì)于一個(gè)由單個(gè)團(tuán)隊(duì)維護(hù)的小系統(tǒng)來說,在一個(gè)構(gòu)建中擁有所有服務(wù)是很好的,這樣做使得使用runAll來運(yùn)行所有的服務(wù)變得非常容易,我們稍后將在本手冊(cè)的運(yùn)行服務(wù)部分中看到:
如果您有多個(gè)團(tuán)隊(duì),那么正如在Lagom構(gòu)建概念中所描述的那樣,我們建議將您的系統(tǒng)劃分為多個(gè)構(gòu)建。
如果您不關(guān)心擴(kuò)展到多個(gè)團(tuán)隊(duì),現(xiàn)在可以跳過這一部分。
(1)發(fā)布服務(wù)
即使有多個(gè)版本,您仍然經(jīng)常希望在開發(fā)中一起運(yùn)行您的服務(wù)。Lagom允許你從一個(gè)否到另外一個(gè)構(gòu)建的導(dǎo)入已經(jīng)發(fā)布的服務(wù)。
假設(shè)您有一個(gè)hello服務(wù),您想要發(fā)布和導(dǎo)入另一個(gè)構(gòu)建。如果使用Maven,可以通過運(yùn)行mvn安裝,將其發(fā)布到本地存儲(chǔ)庫(kù),這是發(fā)布服務(wù)的最簡(jiǎn)單方法。然而,這意味著每個(gè)想要運(yùn)行構(gòu)建版本的開發(fā)人員都需要將其發(fā)布到自己的存儲(chǔ)庫(kù)中,他們需要為他們想要導(dǎo)入的每個(gè)版本做到這一點(diǎn)。
絕大多數(shù)情況下,一些開發(fā)人員會(huì)分享一個(gè)單一供發(fā)布于或者拉去項(xiàng)目用的的maven倉(cāng)庫(kù),如果您樂于使用托管存儲(chǔ)庫(kù),那么有一些方法可以做到這一點(diǎn),如果您想運(yùn)行存儲(chǔ)庫(kù)位置, Artifactory 或Nexus是常見的解決方案
(2)導(dǎo)入服務(wù)
使用maven:
    Lagom-maven-plugin提供了一個(gè)配置項(xiàng),叫做externalProjects,這個(gè)額配置項(xiàng)是可以在根項(xiàng)目上配置,將外部項(xiàng)目導(dǎo)入Maven構(gòu)建,例如:
        
            com.lightbend.lagom
            lagom-maven-plugin
            ${lagom.version}
            
                
                    
                        
                            com.example
                            hello-impl
                            1.2.3
                        
                    
                
            
        
    那么現(xiàn)在,當(dāng)你運(yùn)行l(wèi)agom:runAll的時(shí)候,hello-impl服務(wù)也會(huì)被啟動(dòng)起來,這里還有一些externalProjects選項(xiàng)的其他配置項(xiàng)
        >playService 表明這是一個(gè)play,而不是一個(gè)Lagom服務(wù),默認(rèn)值是false
        >servicePort 該服務(wù)所運(yùn)行的端口號(hào),默認(rèn)的是通過Llagom來自動(dòng)的選擇。
        >cassandraEnabled 配置該服務(wù)是否需要Cassandra,默認(rèn)是true            

3.將項(xiàng)目導(dǎo)入到IDE中,這個(gè)不翻譯了,太基礎(chǔ)了
4.使用maven和eclipse,創(chuàng)建一個(gè)Lagom的服務(wù)

maven 3.3以上
java 1.8
step1:File->new->Project
step2:other選項(xiàng),找maven,創(chuàng)建maven project
step3:maven就用默認(rèn)的選項(xiàng)就行了,也就是quick-start
step4:groupId啥的,不多說了
step5:run Project
      ①右鍵單擊父項(xiàng)目文件夾
      Eclipse將所有Maven項(xiàng)目文件夾放在相同的級(jí)別,所以一定要選一個(gè)正確的。例如:如果你要使用my-first-system作為maven的 artifact ID,右鍵my-first-system
      ②run as..-> Maven Build
      ③Goal里寫 lagom:runAll
      ④選擇jre
      ⑤run
  控制臺(tái)應(yīng)該報(bào)告服務(wù)啟動(dòng)。通過從任何HTTP客戶端調(diào)用hello服務(wù)端點(diǎn)(例如瀏覽器)來驗(yàn)證服務(wù)是否確實(shí)啟動(dòng)并運(yùn)行。
  http://localhost:9000/api/hello/World
  請(qǐng)求返回消息:Hello, World!

5.在IDE中設(shè)置Immutable

Immutables是一個(gè)我們建議來創(chuàng)建不可變對(duì)象的庫(kù),并將樣板代碼減少到最小值。我們相信您會(huì)找到這個(gè)庫(kù),但是因?yàn)閕mmutables從注釋中生成源,所以需要啟用Java編譯器注釋處理器。
Eclipse:
    要在Eclipse中設(shè)置Immutables注釋處理器,您需要為每個(gè)使用Immutables工具來生成不可變對(duì)象的項(xiàng)目配置以下內(nèi)容。
    如果下面的選項(xiàng)你木有,就安裝。地址是http://download.eclipse.org/releases/juno,位置是在Programming Language里的Eclipse java Development Toolss一般情況下,eclipse默認(rèn)都木有。
    Open project Properties > Java Compiler > Annotation Processing、
    本章建議自己看官網(wǎng)吧,這邊等我的STS可以的時(shí)候再補(bǔ)上。
    

6.增加sbt和Maven的內(nèi)存

在dev模式中的Lagom啟動(dòng)所有的服務(wù),并在一個(gè)JVM中啟動(dòng)一些內(nèi)部的Lagom服務(wù)。這樣基于你的JVM的設(shè)置可能會(huì)產(chǎn)生OutOfMemoryError。可以通過增加內(nèi)存來啟動(dòng)Maven和sbt。
我們建議您增加 Metaspace,最大大小和線程堆棧大小。,你可以使用-Xss2M -XX:MaxMetaspaceSize=1024M這個(gè)配置來體改你的你內(nèi)存大小。確切的值可能取決于您的硬件和代碼庫(kù)。
Maven下:
    你可以從 Maven 開始使用 MAVEN_OPTS 環(huán)境變量的額外內(nèi)存。命令如下:
        $ MAVEN_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M" mvn lagom:runAll
    在本例中,我們將設(shè)置初始的JVM堆512Mb,最大堆的1024M,一個(gè)線程堆棧為2M,最大的Metaspace大小為2014M。
    如果在不同的項(xiàng)目中需要不同的設(shè)置,那么在每次調(diào)用中聲明MAVEN_OPTS都是錯(cuò)誤的,并且在全局上導(dǎo)出它是不可能的。您可能希望使用direnv來設(shè)置每個(gè)項(xiàng)目的環(huán)境變量。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70078.html

相關(guān)文章

  • Lagom參考指南(三)

    摘要:針對(duì)您的個(gè)人需要,有一些設(shè)置和任務(wù)可用來調(diào)整服務(wù)器,讓我們來探索它們默認(rèn)端口號(hào)默認(rèn)情況下,服務(wù)器在端口上啟動(dòng)。 開發(fā)環(huán)境下運(yùn)行Lagom1.開發(fā)環(huán)境 Lagom的sbt或者maven項(xiàng)目是可以基于開發(fā)的環(huán)境允許使用單個(gè)命令來運(yùn)行任意數(shù)量的服務(wù)。 當(dāng)代碼更改時(shí),同樣的命令也會(huì)重新加載服務(wù),這樣你就不用手動(dòng)重啟了,您可以繼續(xù)關(guān)注您的工作,并讓Lagom進(jìn)行編譯和重新加載。 (1)運(yùn)行Mav...

    lemanli 評(píng)論0 收藏0
  • Lagom參考指南(三)

    摘要:有一些設(shè)置和任務(wù)可以為您喜歡的嵌入式服務(wù)定位器調(diào)整,讓我們來探索它們默認(rèn)的端口號(hào)在中,服務(wù)發(fā)現(xiàn)的端口號(hào)默認(rèn)的是但是這個(gè)端口是非常容易被其他的應(yīng)用所占用的。 開發(fā)環(huán)境下運(yùn)行Lagom1.開發(fā)環(huán)境 Lagom的sbt或者maven項(xiàng)目是可以基于開發(fā)的環(huán)境允許使用單個(gè)命令來運(yùn)行任意數(shù)量的服務(wù)。 當(dāng)代碼更改時(shí),同樣的命令也會(huì)重新加載服務(wù),這樣你就不用手動(dòng)重啟了,您可以繼續(xù)關(guān)注您的工作,并讓La...

    VishKozus 評(píng)論0 收藏0
  • 微服務(wù)框架lagom

    摘要:在這種情況下,每一個(gè)微服務(wù)定義一個(gè)限界上下文,類似于領(lǐng)域驅(qū)動(dòng)的限界上下文。設(shè)計(jì)你的微服務(wù)系統(tǒng)的響應(yīng)式微服務(wù)架構(gòu)這本書對(duì)于微服務(wù)系統(tǒng)架構(gòu)很有幫助。 1.Lagom概念介紹 lagom框架包含一系列的可以支持我們從開發(fā)到部署的庫(kù)以及開發(fā)環(huán)境: >在開發(fā)階段,可以通過一個(gè)簡(jiǎn)單的命令構(gòu)建我們的項(xiàng)目,啟動(dòng)所有你的服務(wù),并且可以支持所有的lagom基礎(chǔ)設(shè)置層。當(dāng)你修改了代碼,logom是有熱加載的...

    Michael_Lin 評(píng)論0 收藏0
  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...

    princekin 評(píng)論0 收藏0
  • Day07 - Array Cardio 中文指南

    摘要:中文指南二作者簡(jiǎn)介是推出的一個(gè)天挑戰(zhàn)。完整中文版指南及視頻教程在從零到壹全棧部落。第七天的練習(xí)是接著之前中文指南一的練習(xí),繼續(xù)熟練數(shù)組的方法,依舊沒有頁(yè)面顯示效果,所以請(qǐng)打開瀏覽器的面板進(jìn)行調(diào)試運(yùn)行。 Day07 - Array Cardio 中文指南二 作者:?liyuechun 簡(jiǎn)介:JavaScript30 是 Wes Bos 推出的一個(gè) 30 天挑戰(zhàn)。項(xiàng)目免費(fèi)提供了 30 個(gè)...

    Forest10 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<