在WildFly中运行多个standalone模式的实例
WildFly作為一款優秀的EJB容器,其前身為JBoss AS。JBoss作為一款開源的應用服務器,被廣泛的應用在各種項目當中。假設我們現在有這樣一個項目,他是以standalone的模式運行在WildFly中,且這個項目在實際產品環境中需要被部署成多個實例,每個實例都會有不同的服務對象,比如不同的國家,不同角色的用戶等等。針對于不同的服務對象,在后臺的配置也會有些許的不同,比如需要連接不同的數據庫等。
面對這種需求,也許你首先考慮到的是我們可以為不同的服務對象編譯發行不同的發布包,這樣做也許很直觀,但是在實際交付過程中卻很難行得通。首先,不同的實例也許需要加載一些不同的配置,但是這些配置文件的名字和路徑都是都是相對固定的,也就是說你如果想針對不同的實例去加載各自配置文件,你首先需要修改配置,配置文件名甚至路徑等等,然后在代碼中做種相應的修改去加載他們,這無形中大大的增加了了維護的開銷。其次,如果一旦服務的對象很多,那么久意味著需要交付的發行包也會有許多,這無形中會增加項目發布的開銷。最后,多個項目實例放在同一個WildFly的instance中,也許會遇到一些未知的問題,比如端口沖突等等,這也會潛在的增加運維的開銷和程序的不穩定性。
那么有沒有一種辦法能在不增加開銷基礎上解決這個問題呢?答案就是我們可以通過在WildFly中運行多個standalone模式的實例,然后在每個實例中都運行著我們的項目,再對不同的實例里項目的配置文件進行相應的修改(比如數據庫連接字符串)。這樣我們僅僅關注具體配置項的差異即可,不需要修改代碼,也不需要關心是否有端口沖突問題,更不需要發行多個發布包。這個solution聽起來是不是很誘人呢?
在進入正題之前我假設你已經對JBoss或者WildFly已經有了一定的了解,且已經可以正確運行你機器上WildFly和你的項目。本文中,我用來演示的WildFly的版本為9.0.2.Final。
如果你的WildFly和你的項目都是okay的話,那么你的項目應該是在standalone目錄中。首先我們需要把項目的服務停掉,然后拷貝standalone到任意的一個文件夾,改個名字(比如standalone1)然后再拷回WildFly的根目錄當中。
這個時候你的standalone1目錄中也包含了一個和standalone一樣的項目,接下來我們進入standalone1目錄中修改一下你所需要修改的配置文件,比如數據庫連接等等。修改完畢之后我們進入WildFly的bin目錄,在里面建立兩個bat文件start.bat和start1.bat。然后為start.bat添加如下命令
Java代碼
./standalone.bat-cstandalone-full.xml-Djboss.server.base.dir=./../standalone-Djboss.socket.binding.port-offset=0
同理,start1.bat文件的內容修改為
Java代碼
./standalone.bat-cstandalone-full.xml-Djboss.server.base.dir=./../standalone1-Djboss.socket.binding.port-offset=100
這里我們稍微解釋一下這個命令:
./standalone.bat這個是standalone模式的下的啟動文件,不多說。
-c standalone-full.xml是你自定義的WildFly的配置文件(這里我們用standalone-full.xml來舉例子),也不多說。
-Djboss.server.base.dir=./../standalone1是指定你這個WildFly的instance的根目錄。
-Djboss.socket.binding.port-offset=100指的是你這個實例針對于WildFly標準端口的偏移量。
編輯完成先后啟動著兩個bat文件。
start.bat
start1.bat
從控制臺上我們可以看出,兩個WildFly instances的Amdin Console分別是
http://127.0.0.1:9990和on http://127.0.0.1:10090
由此可見端口確實有了100的偏移量。。至此我們完成了WildFly多個實例的配置, 也就變向的實現我們文中最初的那種需求。
同理我們也為不同的instance添加shutdown的命令。
Java代碼
./jboss-cli.bat--controller=localhost:9990--connect--command=:shutdown
Java代碼
./jboss-cli.bat--controller=localhost:10090--connect--command=:shutdown
此刻你的心情是不是非常的輕松愉快呢?
總結
以上是生活随笔為你收集整理的在WildFly中运行多个standalone模式的实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#委托(delegate、Action
- 下一篇: Unity3d烘焙常见黑斑解决方法(适用