2016-02-23 61 views
3

這是一個相當高層次的問題,所以如果它是脫離主題的道歉。我是企業Java世界的新手。如何有效地管理一堆jar文件及其管道?

假設我已經編寫了一些單獨的Java包,這些包執行解析數據饋送和將解析的信息存儲到隊列中。另一個包可能會從該隊列中讀取並將這些條目攝入到規則引擎包中。跳閘警報會被送入另一個隊列,該隊列由警報服務(假設它是用Python編寫的)從隊列中讀取併發出電子郵件進行輪詢。

現在我必須手動運行每個jar文件並將其粘貼在背景中。儘管我可能會將這些服務的一部分或全部進行靈活處理,或者編寫某種服務管理器來做同樣的事情,但這讓我覺得非常非常業餘。特別是因爲我不得不在啓動時爲這個單一的工作流程啓動一打服務。

我覺得我錯過了一些東西,但我不知道我不知道什麼。在寫一個巨大的,整體應用程序的時候,我應該考慮什麼來幫助我管理所有這些分立組件,並能夠(從概念上)提供一個全面的應用程序?我想結束某種類型的管理程序,我可以點擊一個按鈕,啓動/停止所有上述服務,爲我提供一些狀態的可見性,並確保服務在應該運行時運行。

這是框架發揮作用嗎?我看到他們中的一些人,但不知道這是否只是矯枉過正,尤其是如果我不積極爲那個框架開發解決方案

+0

maven通常用於管理depedncies,這是你問的問題。但是你似乎有一個微服務架構 - 很高興 – NimChimpsky

回答

1

看起來你構建了一個有很多組件的系統,然後在你決定聚合其中的一些組件後,因爲它們碰巧共享相同的編程語言:Java。因此,首先警告:這不是將組件連接在一起的最佳方式。

另外,看起來你不太瞭解Java,因爲你將包,包和jar和可執行文件混合在一起,這些都是完全不相關和獨特的概念。

但是,讓我們假設當前的藝術狀態是最好的並且是不可變的。您當前的需求是構建一個圖形界面(我猜想基於HTTP/HTML)來管理用Java編寫的系統的所有不同組件。我建議您使用單個JVM,將組件編寫爲EJB(實質上是start(),stop()和查詢返回自定義對象的組件狀態的方法),最後將所有內容與Spring框架連接起來,該框架有一個很好的註釋 - 驅動配置爲@Bean's。

SpringBoot還有一個actuator package,可以簡化公開對象。您也可能發現將bean註冊爲Managed beans並使用Hawtio framework來管理它們(通過Jolokia代理)是有用的。

+0

我們只是說第一個組件被寫成只是一個Python腳本的更快版本。該項目從那裏滾滾而來。在這一點上,我試圖在它失去控制之前將其全部壓制。感謝Spring的領導,我現在正在研究它 – Ivan

1

看起來好像你正在編寫你的應用程序在microservice architecture

您需要一個orchestrator。

如果您在單臺計算機上運行所有內容,那麼您可能已在運行的簡單協調器是systemd。您編寫systemd服務描述,systemd將根據您的服務描述來維護您的服務。您可以根據服務之間的依賴關係指定服務應該啓動的順序,如果服務意外停止時重新啓動策略,記錄stdout/stderr等。請注意,這與運行大多數現代Linux的啓動順序的systemd相同發行版。

如果您正在運行多臺機器,仍然可以繼續使用systemd等單機編排器,但通常對編排器的要求也會變得更加複雜。對於多臺機器,您現在必須考慮到諸如在機器之間移動服務,分階段推出等等。對於這些設置,有一些適合多機編排的系統的軟件,如CoreOS的fleetd;還有獨立的多機協調器,如Kubernetes。兩者都使用docker作爲應用程序容器機制。

我在這裏描述的沒有一個是Java特定的,這意味着您可以對用於Python或其他語言或體系結構的Java使用相同的編排流程。

1

我不確定您是否實際使用J2EE(即Java企業版)。也可以在J2SE中編寫企業軟件。 J2SE沒有太多現成可用,但相比之下,有很多微型框架,例如Ninja,或者像Play框架這樣的完整堆棧框架,它們工作得很好,編程起來更容易,而且性能比J2EE。

如果你不使用J2EE,那麼你可以去簡單:

  • 使一個新的Java項目
  • 所有的罐子作爲依賴添加到該項目(見上文Maven的評論通過寧姆)
  • 通過簡單地調用其構造

這是一個相當幼稚的做法開始在罈子裏的類,但在這一點上爲您服務。當然,如果你想要一個可擴展的平臺,你需要先學習更多東西。對於可擴展性,我建議玩!框架作爲一個好的開始。或者,您可以使用Vert.x,它具有自己的消息隊列實現以及對高性能分佈式緩存的支持。

標準J2EE的做法是可行的(在許多老校友企業認爲是「事實上的」),但具有基本-flaws-或使一個非常陡峭的學習曲線和非常不可伸縮的應用程序「差異」。

1

您必須選擇As Raffaele建議您可以選擇將所有需求寫入一個應用程序/服務。看起來像一個可能的使命,使用Java Ejb's或使用彈簧集成 - ampqTemplate(可以寫入隊列與ampqTemplate並接收帶有專用偵聽器的消息(example

或選擇實現與微服務體系結構。將推到隊列另一個將包含聽衆等等一個任務,可以很容易地與彈簧啓動

「一個按鈕來控制他們所有」 - 在一個單一的應用程序的情況下 - 這很容易 如果你選擇微服務架構,它取決於你需要什麼,如果它只是「開始」,「停止」操作,我想你的tomcat /其他服務器的啓動和停止將會執行。多種解決方案。再次,這取決於你的需求。