Tigase技術交流群 :310790965
一些小伙伴們經常問Tigase8 check下來的源代碼怎么跑起來,因為我不能及時一 一回答,所以還是寫個博文來演示一下吧,一般針對新手而言,老手的話,就跳過吧!
一、一般第一步是進入tigase的官網,現在官網代碼已經轉移到github上,選擇你想要下載的模塊 :
如果下圖,現在8.0版本已經正式發布了。我們就使用它作為研究學習:
可以先通過git 克隆下來代碼:
git clone --branch tigase-server-8.0.0 https://github.com/tigase/tigase-server.git
等待下載成功,再使用IDEA打開代碼:
一般下載代碼后,第一步就是進行項目配置設置 Tigase8是依賴是JDK8及以上,看到右邊第五步那,我們只要留下src/main/java 這源碼項就可以,其它的可以點X移除,不需要的暫時不讓它參與編譯
現在展開代碼看下,發現有些類可以由於沒有導入 相應的包而出現報錯,這時候可能有些同學開始慌了,別擔心,如下圖只是沒有成功導入tigase-utils.jar 才會出現找不到類的錯誤,那我們就去看看原因,問題就是在maven ,那么我們不防先執行下maven install
在執行maven后如果沒能成功下載包時,則不防在pom.xml里為它加入tigase私有倉庫如下:
<repositories> <repository> <id>tigase</id> <name>Tigase repository</name> <url>http://maven-repo.tigase.org/repository/release</url> </repository> <repository> <id>tigase-snapshot</id> <name>Tigase repository</name> <url>http://maven-repo.tigase.org/repository/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository>
<repository>
<id>tigase</id>
<url>http://maven-repo.tigase.org/repository/tigase</url>
</repository>
</repositories>
現在再點擊 install 進行下載,如果還是下載不下來,再試試去進入你本地的maven庫中,刪除要下載的對應的版本文件目錄
點擊install 后,順利地下載所有依賴的包下來了,如圖所示,已經沒有再報錯了,OK,進展很順利!
二 、不防先試着去運行下源代碼吧:快速去找到XMPPServer 主入口類,運行,啊怎么會跑到Groovy的代碼,別慌,我這里是故意演示下這樣的錯誤,很多同學之前問到。不用想問題一定在配置里了,我們應該移除Groovy模塊,不讓他參與編譯。
點開配置項,移除不需要的模塊,如圖X所示:
再次點擊運行,wo ?配置文件我都沒動怎么就運行成功了,別慌,這可是使用默認的配置項,都沒有讀取到數據庫表信息,所以才會成功跑起來了
從提示里可以看出,它默認加載的配置文件是 : etc/init.properties,如果你不想在JVM啟動配置項里加入 對應配置來改變這個默認參數項,最簡單的就是拷貝一個配置文件,改個名字放到etc目錄下去唄,多省事。如我選擇mysql數據庫,那么我就拷貝一個init-mysql.properties,改名為init.properties
看到新增加的init.properties文件,及里面的配置
再次運行XMPPServer后,會發現熟悉的錯誤出現了,就是找不到Mysql 驅動,這就對了,說明還得加入mysql-connector-java.jar ,那就改下pom.xml吧 加入 如下:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> <!--<scope>test</scope>--> </dependency>
注意: 如果使用的是MYSQL8.0及以上。會有安全檢查及時區檢查,在url后加上: '&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC'
uri = 'jdbc:mysql://localhost:3306/tigasedb8?user=root&password=123456&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC'
有些眼快的同學可能會有疑問?明明加入init.properties,運行過后怎么變成init.properties.old了,這是簡單說明下,其實從8開始,Tigase官方推薦的配置文件格式改了,從8.0 起推薦使用DSL領域專用語言來寫配置文件,但還是為了兼容老版本,他自動幫你把init.properties里的配置轉換到config.tdsl文件里了,所以別慌,要是老用戶,你也還可以選擇properties配置,讓他自動幫你轉,不然去官方那看下他8的配置文件指導也是極其簡單滴!
如果Tigase的數據庫導入了數據成功的話,這里跑起來應該是成功,可能結束了,但也有可以數據導入的問題,出現一些奇怪的問題,演示下:
上文的報錯提示:系統要求的版本為0.0.0,而我們的是8.0.0, 看到這錯誤,這不是很矛盾嘛,但別慌,一定是哪里配置少了,或者少操作了哪一步 !
分析開始 :由於我是手動導入數據腳本的,所以我堅信我的數據庫現在是完整的,一定沒問題。這里插入下怎么導入呢:如下圖里的紅圈,你點開里面一個個文件都從小版本一直執行完到8.0.0,相信你應該會SQL就不多說了,后面我會附上一份導出的腳本 文件。
提醒下有些同學可能會按着腳本從頭到尾導入,但為什么會遇到出錯的導不進去呢,其實有個腳本里面是有個BUG的,如mysql-server-8.0.0-sp.sql 中
基於我的經驗,數據庫導入沒有問題了,那為什么還報版本與期望的不一致的錯誤呢,這個時候來個大招,直接看下報錯的源代碼吧:
原來這里Tigase讀取打包的jar包沒有添加版本信息,也就是說沒有讀取到MANIFEST.MF 文件里的描述信息,默認0.0.0,我這里就不管了,直接在下面設置下為8.0.0,與數據庫配置的版本號一致就行了,跳過這個版本檢查。
注意:如果是在IDEA中啟動,那只能注掉,或數據庫都配置0.0.0. 默認從this.getClass().getPackage().getImplementationVersion();取值,正常在說是讀到MANIFEST.MF中的Implementation-Version: 8.0.0。但是只有打成jar包的時候,this.getClass().getPackage().getImplementationVersion();才有效地讀得出來。如果你是在IDEA中,就算你配置了MANIFEST.MF,他還是讀不出來null,這是個坑嗎?誰清楚給指點下???google上也很多類似的,最終在官方也找不到答案。
拿MUC模塊來舉個例子,由於muc.jar 中包含了META-INF描述信息,這里就能讀出3.0.0版本號來
其實這里還可以選擇一種做法,也就是運行 tigase.db.util.SchemaManager "upgrade-schema" --config-file=etc/config.tdsl 這樣系統去執行腳本 ,由於我選擇的是手動導入腳本到數據庫,所以我不跑這步了,你們可以試試。
但無論怎么樣,現在他默認讀取運行jar包上的版本號和數據庫上的版本進行匹配,出現問題直接定位到這里糾正就行!
三、再次執行XMPPServer 運行main ,發現版本檢查的問題沒有出現了,但可能又出現的另一個問題,但別慌,這個看提示就很清晰了,SessionManager 組件中 max-queue-size 配置小了,它讓你配置大些,為什么有人可以有人不行,現在這個配置項是動態的,根據你CPU核數來要求配置最小值,簡單,就配置下嘛:
修改config.tdsl文件,如下圖:
再次運行 ,一切順利跑起來拉:
這個時候,開始使用spark或psi去驗證下:但在登錄前,要注意兩項:
1、'default-virtual-host' 可以配置為任意名XX,但配置以后你必須要保證通過ping XX ,能通!!!
如我本機IP是192.168.3.2,但我也可以配置
'default-virtual-host' = 'llooper'
'default-virtual-host' = 'llooperlx'
因為我已經在hosts文件中配置了映射,所以我可以通過這個域名訪問本機上的服務
2、可以先關閉TLS加密認證,在config.tdsl 中加入
'sess-man' () { starttls (class: tigase.xmpp.impl.StartTLS, active: false) { queueSize = null threadsNo = 1 } }
不激活TLS : active: false
注意,同時要確認下,數據庫生成的vhost節點數據是否正確:
如圖:tig_paris pkey為vhosts-lists ,pval中,vhost
tls-required="false
hostname="llooperlx"
這兩個都得對應上。改動要重啟服務,如果不正常,手動更正重啟試試!
<vhost tls-required="false" domain-filter="ALL" anon="true" register="true" enabled="true" max-users="0" hostname="llooperlx" s2s-secret="0cd38742-c2f5-4291-b271-1d42234fad2c"><comps></comps><other></other></vhost>

重啟XMPPServer ,用spark注冊登錄:
登錄用戶 :
如果我配置域名為llooperlx
'default-virtual-host' = 'llooperlx'
啟動服務,登錄都成功了,大功告成 !其實這個沒什么難度的,就是出現什么問題,就解決它,要有耐心!
注意:為了幫助新手,如果登錄不成功,你可以進入群里附上以下的debuger日志,盡可能給你們解答!
對了,本來想附上一份,tigase-server.sql 這里上傳不了附件,那我就上傳到群里的文件里去吧,有需要的同學在群文件里找,tigasedb_8.sql
閑的時候,寫寫文檔,一起進步吧。有什么問題在群里問,但是有時候可能沒時間回復,見諒!
附上一些tigase doc地址 :
https://docs.tigase.net/tigase-server/snapshot/Administration_Guide/html/
倉庫地址
https://maven-repo.tigase.org/repository/release/