摘要:允許將反序列化為沒有附加注釋元數據不可變的類。包的庫經常會想支持多個版本的這樣做需要構建一個為每個版本的支持工件它介紹了如何區分這些工件的問題看到像不支持添加額外的元數據依賴關系的想法來指定他們需要什么版本的。
1.Defining a Lagom build(定義一個Lagom構建)
正如在Lagom構建哲學中已經討論過的那樣,使用Lagom,您可以自由地將所有服務組合在一個多帶帶的構建中,或者多帶帶構建它們。 下面,我們將描述如何構建包含所有服務的單一構建。hello示例遵循這個結構。 然后,在下一節中,我們將描述一個服務構建的替代方法。 (1)理解你的項目結構 每個服務至少包含兩個部分:一個API項目和一個實現項目。(這些是同一構建中的子項目。) API項目包含服務接口,也稱為描述符,以及接口使用的所有數據模型,例如請求和響應消息。API項目可以依賴于其他服務的使用和使用。 實現項目自然也依賴于API項目,以實現它。 考慮下面的示例系統: ![圖片描述][1] 這個系統有兩個服務,一個服務叫hello,另一個服務叫hello-stream。每個服務有兩個定義的sbt項目,一個api項目:hello-api和hello-stream-api,和一個實現項目:hello-impl和hellp-stream-impl.此外,hello-stream-impl依賴于hello-api,調用hello-stream來使用它。 下面我們將怎么創建一個Lagom服務: ①配置項目根(Configuring the root project) 在Lagom,使用多模塊構建是典型的。可以在根項目中配置Lagom maven插件,我們需要把它加到pom文件里的plugins標簽里:這樣做將允許您使用像lagom:runAll這樣的命令來運行系統中的每一個服務,并定義系統范圍的配置。Maven插件從父poms繼承它們的配置,因此在父pom中定義的任何東西都將用于所有服務。 因為lagom是需要jdk1.8以上的,所以您需要將Java編譯的源和目標版本設置為1.8。此外,Lagom自帶jackson參數拆箱。允許jackson將json反序列化為沒有附加注釋元數據不可變的類。利用這個特性,Java編譯器必須啟用參數名稱。源、目標和參數名配置最好在根項目中配置,因為配置將由所有子模塊繼承: com.lightbend.lagom lagom-maven-plugin ${lagom.version} 我們還建議在您的根項目pom中使用Maven依賴管理來控制整個系統中的依賴版本,例如下面: org.apache.maven.plugins maven-compiler-plugin 3.5.1 1.8 -parameters 關于Scala版本的注釋: 在向Lagom庫中添加依賴關系時,您需要確保在工件ID中包含Scala主版本,for example:lagom-javadsl-api_2.11.Lagom本身是大多在Scala實現,與Java不同,Java維護者控制虛擬機,當添加新特性時,可以在虛擬機上構建向后兼容性,當在Scala中添加新特性時,向后兼容性是非常困難的如果不是不可能維持,因此,必須根據Scala的某個主要版本來編譯庫。 jar包的庫經常會想支持多個版本的Scala,這樣做需要構建一個為每個版本的Scala支持工件,它介紹了如何區分這些工件的問題,看到像maven不支持添加額外的元數據依賴關系的想法來指定他們需要什么版本的Scala。為了解決這個問題,我們使用了將Scala版本附加到工件的約定。 定義一個服務: 服務的API模塊是一個簡單的maven項目。它不需要配置Lagom插件,通常它只需要依賴于Lagom API庫。例如: 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 服務的實現模塊也是一個簡單的maven項目,但是會有更多的依賴關系,并且需要配置 lagom-maven-plugin;來讓它成為一個服務項目,所以這個插件知道在使用runAll時包含進它: 4.0.0 com.example my-first-system 1.0-SNAPSHOT hello-api jar com.lightbend.lagom lagom-javadsl-api_2.11 這里有幾點需要注意: >實現依賴于它的API項目,因此它可以實現這個API。 >它也需要依賴于lagom-javadsl-server,這為項目提供了所有服務器端代碼。 >這個特別的服務使用Lagom的持久化API來對數據進行持久化,所以它還需要你依賴于lagom-javadsl-persistence. >日志,默認的是使用lagom-logback做維護日志的實現 >play框架的 HTTP服務器的實現需要配置- Play提供兩個服務器實現,一個在Netty,一個在Akka HTTP。在這種情況下,Netty已經被選中。 >lagon-maven-plugin已經配置好了取讓lagonService是true,這告訴Lagom,這是一個在運行lagon:run時應該運行的Lagom服務 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
2.將一個系統分解為多個構建
在設計一個Lagom系統時,您可以靈活地組織您的服務,以構建滿足您需求的構建單元。對于一個由單個團隊維護的小系統來說,在一個構建中擁有所有服務是很好的,這樣做使得使用runAll來運行所有的服務變得非常容易,我們稍后將在本手冊的運行服務部分中看到: 如果您有多個團隊,那么正如在Lagom構建概念中所描述的那樣,我們建議將您的系統劃分為多個構建。 如果您不關心擴展到多個團隊,現在可以跳過這一部分。 (1)發布服務 即使有多個版本,您仍然經常希望在開發中一起運行您的服務。Lagom允許你從一個否到另外一個構建的導入已經發布的服務。 假設您有一個hello服務,您想要發布和導入另一個構建。如果使用Maven,可以通過運行mvn安裝,將其發布到本地存儲庫,這是發布服務的最簡單方法。然而,這意味著每個想要運行構建版本的開發人員都需要將其發布到自己的存儲庫中,他們需要為他們想要導入的每個版本做到這一點。 絕大多數情況下,一些開發人員會分享一個單一供發布于或者拉去項目用的的maven倉庫,如果您樂于使用托管存儲庫,那么有一些方法可以做到這一點,如果您想運行存儲庫位置, Artifactory 或Nexus是常見的解決方案 (2)導入服務 使用maven: Lagom-maven-plugin提供了一個配置項,叫做externalProjects,這個額配置項是可以在根項目上配置,將外部項目導入Maven構建,例如:那么現在,當你運行lagom:runAll的時候,hello-impl服務也會被啟動起來,這里還有一些externalProjects選項的其他配置項 >playService 表明這是一個play,而不是一個Lagom服務,默認值是false >servicePort 該服務所運行的端口號,默認的是通過Llagom來自動的選擇。 >cassandraEnabled 配置該服務是否需要Cassandra,默認是true com.lightbend.lagom lagom-maven-plugin ${lagom.version} com.example hello-impl 1.2.3
3.將項目導入到IDE中,這個不翻譯了,太基礎了
4.使用maven和eclipse,創建一個Lagom的服務
maven 3.3以上 java 1.8 step1:File->new->Project step2:other選項,找maven,創建maven project step3:maven就用默認的選項就行了,也就是quick-start step4:groupId啥的,不多說了 step5:run Project ①右鍵單擊父項目文件夾 Eclipse將所有Maven項目文件夾放在相同的級別,所以一定要選一個正確的。例如:如果你要使用my-first-system作為maven的 artifact ID,右鍵my-first-system ②run as..-> Maven Build ③Goal里寫 lagom:runAll ④選擇jre ⑤run 控制臺應該報告服務啟動。通過從任何HTTP客戶端調用hello服務端點(例如瀏覽器)來驗證服務是否確實啟動并運行。 http://localhost:9000/api/hello/World 請求返回消息:Hello, World!
5.在IDE中設置Immutable
Immutables是一個我們建議來創建不可變對象的庫,并將樣板代碼減少到最小值。我們相信您會找到這個庫,但是因為immutables從注釋中生成源,所以需要啟用Java編譯器注釋處理器。 Eclipse: 要在Eclipse中設置Immutables注釋處理器,您需要為每個使用Immutables工具來生成不可變對象的項目配置以下內容。 如果下面的選項你木有,就安裝。地址是http://download.eclipse.org/releases/juno,位置是在Programming Language里的Eclipse java Development Toolss一般情況下,eclipse默認都木有。 Open project Properties > Java Compiler > Annotation Processing、 本章建議自己看官網吧,這邊等我的STS可以的時候再補上。
6.增加sbt和Maven的內存
在dev模式中的Lagom啟動所有的服務,并在一個JVM中啟動一些內部的Lagom服務。這樣基于你的JVM的設置可能會產生OutOfMemoryError。可以通過增加內存來啟動Maven和sbt。 我們建議您增加 Metaspace,最大大小和線程堆棧大小。,你可以使用-Xss2M -XX:MaxMetaspaceSize=1024M這個配置來體改你的你內存大小。確切的值可能取決于您的硬件和代碼庫。 Maven下: 你可以從 Maven 開始使用 MAVEN_OPTS 環境變量的額外內存。命令如下: $ MAVEN_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M" mvn lagom:runAll 在本例中,我們將設置初始的JVM堆512Mb,最大堆的1024M,一個線程堆棧為2M,最大的Metaspace大小為2014M。 如果在不同的項目中需要不同的設置,那么在每次調用中聲明MAVEN_OPTS都是錯誤的,并且在全局上導出它是不可能的。您可能希望使用direnv來設置每個項目的環境變量。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70078.html
摘要:針對您的個人需要,有一些設置和任務可用來調整服務器,讓我們來探索它們默認端口號默認情況下,服務器在端口上啟動。 開發環境下運行Lagom1.開發環境 Lagom的sbt或者maven項目是可以基于開發的環境允許使用單個命令來運行任意數量的服務。 當代碼更改時,同樣的命令也會重新加載服務,這樣你就不用手動重啟了,您可以繼續關注您的工作,并讓Lagom進行編譯和重新加載。 (1)運行Mav...
摘要:有一些設置和任務可以為您喜歡的嵌入式服務定位器調整,讓我們來探索它們默認的端口號在中,服務發現的端口號默認的是但是這個端口是非常容易被其他的應用所占用的。 開發環境下運行Lagom1.開發環境 Lagom的sbt或者maven項目是可以基于開發的環境允許使用單個命令來運行任意數量的服務。 當代碼更改時,同樣的命令也會重新加載服務,這樣你就不用手動重啟了,您可以繼續關注您的工作,并讓La...
摘要:在這種情況下,每一個微服務定義一個限界上下文,類似于領域驅動的限界上下文。設計你的微服務系統的響應式微服務架構這本書對于微服務系統架構很有幫助。 1.Lagom概念介紹 lagom框架包含一系列的可以支持我們從開發到部署的庫以及開發環境: >在開發階段,可以通過一個簡單的命令構建我們的項目,啟動所有你的服務,并且可以支持所有的lagom基礎設置層。當你修改了代碼,logom是有熱加載的...
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...
摘要:中文指南二作者簡介是推出的一個天挑戰。完整中文版指南及視頻教程在從零到壹全棧部落。第七天的練習是接著之前中文指南一的練習,繼續熟練數組的方法,依舊沒有頁面顯示效果,所以請打開瀏覽器的面板進行調試運行。 Day07 - Array Cardio 中文指南二 作者:?liyuechun 簡介:JavaScript30 是 Wes Bos 推出的一個 30 天挑戰。項目免費提供了 30 個...
閱讀 2791·2021-11-17 09:33
閱讀 4454·2021-09-22 15:57
閱讀 2866·2019-08-30 14:16
閱讀 3133·2019-08-29 14:07
閱讀 2413·2019-08-26 11:55
閱讀 3415·2019-08-23 17:07
閱讀 1725·2019-08-23 16:50
閱讀 2535·2019-08-23 16:08