阿里雲服務器部署Dubbo框架入門教程(SpringBoot+zookeeper+dubbo)

一、準備環境

話說看代碼不如寫代碼,寫完代碼也要跑起來看看效果纔行,不然搭建了demo,沒有環境運行效果,也是沒有太好的體會。所以首先需要準備環境纔行。 搭建的是dubbo框架的分佈式服務demo,以下是我的環境準備。 環境準備: 1、一臺服務器(阿里雲或者騰訊雲) 2、服務器上搭建java環境,安裝maven、tomcat、zookeeper、dubbo-admin。 雖然搭建的是簡單的分佈式服務,但是成功地在服務器上跑起來還是花了一些時間,主要是在搭建環境中遇到了一些坑,爲了讓其他同學能夠快速地搭建一個簡單的分佈式服務,我將自己搭建的每一個步驟都詳細地書寫了,方便大家自己搭建。

1、購買阿里雲服務器

首先需要一個雲服務器,沒有云服務器的話也可以在自己電腦上使用vmware,用戶可在單一的桌面上同時運行不同的操作系統,進行開發。但是這樣做太費內存了,電腦卡的不行,所以我還是選擇服務器。 網上有許多的服務器,耳熟能詳的就是阿里雲和騰訊雲,同學們可以自己去官網對比一下,從價格、性能、活動優惠內容這些自己選擇。下面是我購買阿里雲服務器一些流程,對於還沒有用過服務器的同學,我覺得還是有幫助的。 (1)登錄阿里雲官網( https://www.aliyun.com/ ),如果沒有註冊阿里雲會員的,可以先註冊一個。選擇雲服務器ECS。爲什麼叫ECS服務器,大家可以去問問度娘,這裏就不解釋了。

這裏就注意了,阿里雲網頁是有活動的,所以不要點立即購買,點擊下面的活動。(土豪請無視)阿里雲活動地址:阿里雲·雲小站

推薦三年,原因是阿里雲針對新用戶有折扣,老用戶就沒辦法享受,所以如果你的賬號是新賬號的話,建議不要你的賬號去選擇1個月或者1年的,儘量時間選擇長一點。(等你不是新用戶的時候,你就發現阿里雲同等配置的服務器要貴蠻多) 以後續費:建議找家人和朋友的新賬號購買。你只需要做好服務器之間程序和數據的穩定遷移就可以了。

進入活動頁面,找到適合自己的,當前活動我選擇的是下面紅框中的。有同學可能想問爲什麼不選突發性能型t5,我對比了一下,t5是由性能限制的,具體的自己對比下。點擊立即購買。一般推薦共享型n4 3年。想免備案推薦輕量應用服務器-香港。需要更多免備案機型的可以查看:免備案機型彙總

購買後出現下面的頁面,這時候需要選擇地域,有些同學會奇怪爲什麼沒有我所在的地域,是不是不能用,並不是這樣的。這些地域是佈置有服務器的地域,你選擇離你所在地域比較近的就行了。而且實例必須你是有的,沒有實例的是灰色的。帶寬可以自己選擇。最後點擊立即購買。

購買後,進入阿里雲主頁,選擇ECS雲服務器——管理控制檯——實例——更多,重置實例密碼,重置後要重啓服務器纔會生效。

使用Xshell或者MobaXterm進入服務器中,服務器的ip就是公網顯示的ip。爲什麼用公網ip?服務器公網ip可以用於域名解析ip,服務器遠程登錄ip,是最主要的服務器ip地址。私網ip不能用於域名解析。不可以直接用於服務器遠程登錄,其主要作用是:跟當前帳號下的其他同集羣的機器通信。

參考教程:阿里雲ECS服務器使用入門教程

2、搭建java環境

服務器有了,就可以開始搭建環境。

(1)查看當前linux操作系統版本

cat /etc/redhat-release 是系統安裝時默認的發行版本。

[root@iZbp13xqpgsk8aqlm2wr1zZ ~]# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)

cat /proc/version 和 uname -a 顯示的內容相同,顯示linux內核版本號(開源版本)

[root@iZbp13xqpgsk8aqlm2wr1zZ ~]# cat /proc/version
Linux version 4.18.0-147.5.1.el8_1.x86_64 ([email protected]) (gcc version 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)) #1 SMP Wed Feb 5 02:00:39 UTC 2020
[root@iZbp13xqpgsk8aqlm2wr1zZ ~]# uname -a
Linux iZbp13xqpgsk8aqlm2wr1zZ 4.18.0-147.5.1.el8_1.x86_64 #1 SMP Wed Feb 5 02:00:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

查看當前Linux版本是多少位

[root@iZbp13xqpgsk8aqlm2wr1zZ ~]# getconf LONG_BIT
64

(2)安裝之前先查看一下有無系統自帶jdk

rpm -qa |grep java
rpm -qa |grep jdk
rpm -qa |grep gcj

沒有信息輸出就是無jdk,如果有就使用批量卸載命令

rpm -qa | grep java | xargs rpm -e --nodeps

(3)下載安裝JDK1.8

這裏我已經寫好了教程,參考Linux安裝JDK8安裝教程

3、搭建Maven環境

1)下載maven 下載地址:https://mirrors.cnnic.cn/apache/maven/maven-3/

選擇版本以後再選擇紅框中的,不要問爲什麼,自己可以去試試…

2)安裝maven以及配置環境變量 在liunx上解壓maven的tar包

tar xf apache-maven-3.3.9-bin.tar.gz -C /usr/local/

配置環境變量

vim /etc/profile

在/etc/profile文件內容最後添加以下內容

#set maven3.6.3 enviroment
export MAVEN_HOME=/usr/local/apache-maven-3.3.9 
export PATH=${PATH}:${MAVEN_HOME}/bin

刷新配置文件

source /etc/profile  

驗證maven是否安裝成功

[root@iZbp13xqpgsk8aqlm2wr1zZ apache-maven-3.3.9]# mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/apache-maven-3.3.9
Java version: 1.8.0_242, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el8_1.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-147.5.1.el8_1.x86_64", arch: "amd64", family: "unix"

注意:在選擇版本的時候,我開始下載的是3.6.3版本,結果一頓操作下來,沒有mvn命令,反覆看哪裏沒操作對,結果沒發現。不甘心的我看了網上用3.3.9版本的多,最後換了版本就好了,蛋蛋的憂傷。。。。。。

4、安裝配置Tomcat

這裏我也已經寫好了詳細教程,參考教程: Linux安裝Tomcat8並配置環境變量

5、安裝配置zookeeper

1)下載安裝zookeeper,我們移步到國內鏡像下載呢。 鏡像地址1: http://apache.fayea.com/zookeeper/ 鏡像地址2: http://mirrors.hust.edu.cn/apache/zookeeper/ 以上可以隨機選一個下載地址 然後下載zookeeper(我下載zookeeper-3.4.14.tar.gz版本),再放入服務器中。用xftp上傳到服務器。

2)解壓zookeeper的包並進行配置(可以自己選擇位置,看自己)。 切換到zookeeper目錄下的conf目錄下,重新複製一份 zoo_sample.cfg文件並命名爲zoo.cfg(只能是這個名字)

tar xf zookeeper-3.4.14.tar.gz -C /usr/local/
mv /usr/local/zookeeper-3.4.14/ /usr/local/zookeeper
cd /usr/local/zookeeper
cd conf
cp zoo_sample.cfg zoo.cfg

對zoo.cfg進行配置。這是最重要的配置,zookeeper連接配置都是在這裏配置的。

vi zoo.cfg

配置dataDir ZK啓動目錄配置dataLogDir 日誌目錄

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/log
# the port at which the clients will connect
clientPort=2181
server.1=ip地址:2888:3888
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

注意: 1、更改成自己服務器的IP,具體幾個server可根據需要添加,由於服務器性能原因,我這裏只保留一個,就是單機模式 2、上面的dataDir和dataLogDir文件,先手動去確認一下是否存在,沒有就手動mkdir一個。 3、沒有myid文件,需要在上圖的dataDir路徑下生成一個myid文件,同時寫入上面的server.X中 的 X,集羣模式下除了多個zookeeper外,在myid文件中也需要添加server.X中的X。直接vi myid,在裏面寫入1。

Server.1=Master:3333:4444   就在myid中寫個1
Server.1=Master:3333:4444  Server.2=slave1:3333:4444   就寫1  2 

配置環境變量

vi /etc/profile

#set zookeeper environment
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER/bin

刷新配置文件

source /etc/profile 

啓動zookeeper 任務目錄下執行以下命令

[root@iZbp13xqpgsk8aqlm2wr1zZ bin]# ./zkServer.sh start 啓動zookeeper服務端
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@iZbp13xqpgsk8aqlm2wr1zZ bin]# ./zkServer.sh status 查看服務端運行狀態
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: standalone  單機模式
[root@iZbp13xqpgsk8aqlm2wr1zZ bin]# ./zkServer.sh stop 停止zookeeper服務端
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

連接zookeeper

./zkCli.sh -server localhost:2181 
./zkCli.sh start -server ip:端口號

出現以下界面說明連接zookeeper成功。

6、zookeeper的可視化工具

zkui是基於java語言開發,使用zkui來搭建zookeeper的可視化web界面,下載zkui工具 下載地址:https://github.com/DeemOpen/zkui.git 在idea中修改config.cfg,zh,主要修改port和zkserver。

再package打包,生成兩個jar包: zkui-2.0-SNAPSHOT.jar和zkui-2.0-SNAPSHOT-jar-with-dependencies.jar,用的是第二個,將第二個上傳至服務器,並且將config.cfg文件也放到和jar包相同的目錄下。

執行jar包

java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar

查看網頁,瀏覽器中運行http://自己的ip:9090,賬號密碼 admin/manager

7、安裝配置dubbo-admin

爲了讓使用戶更好的管理或監控衆多的dubbo服務,dubbo官方提供了可視化的監控程序——Dubbo Admin。不過不安裝監控中心也不會影響dubbo的使用。 看了網上好多搭建dubbo admin的,好多方法還是把war包部署到tomcat中。現在不用生成war包,不用tomcat。在idea上生成jar包後,直接在linux上運行即可。 (1)使用dubbo-admin jar包 1)下載dubbo admin dubbo admin 官方地址 https://github.com/apache/incubator-dubbo-ops

2)在idea中導入dubbo admin源碼進行配置,生成jar包 在src/main/resources目錄,修改application.properties中的配置(默認使用zookeeper作爲註冊中心,一般不需要改動,默認配置即可使用)

#application.properties默認配置:
   server.port=7002  端口號
   spring.velocity.cache=false
   spring.velocity.charset=UTF-8
   spring.velocity.layout-url=/templates/default.vm
   spring.messages.fallback-to-system-locale=false
   spring.messages.basename=i18n/message
   spring.root.password=root  root用戶的密碼
   spring.guest.password=guest  guest用戶的密碼
   dubbo.registry.address=zookeeper://127.0.0.1:2181 註冊中心ip和端口

#我的zookeeper和dubbo-admin部署在阿里雲服務器,所以地址默認服務器的ip就可以。

在idea上先clean項目,然後package打包,生成的jar包是放在源碼文件夾下面的。

將jar包放入服務器中,執行jar包

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

4)在網頁上登錄dubbo admin控制檯

(2)使用dubbo-admin war包,這裏就不做詳細介紹了。

8、總結環境搭建所遇問題

1、因爲使用的是阿里雲服務器,所以必須要在阿里雲服務器添加安全組規則。這是爲了能夠使用端口訪問,不然訪問不了的,不信的話你可以試試。這裏就不細說了,可以看:阿里雲服務器配置安全組教程 部署tomcat、zookeeper這些會涉及到端口、防火牆的時候。可以使用systemctl工具來管理服務程序,它包括了service和chkconfig。

[root@iZbp13xqpgsk8aqlm2wr1zZ bin]# systemctl list-unit-files|grep enabled
aliyun.service                              enabled
atd.service                                 enabled
auditd.service                              enabled
[email protected]                             enabled
chronyd.service                             enabled
cloud-config.service                        enabled
cloud-final.service                         enabled
cloud-init-local.service                    enabled
cloud-init.service                          enabled
crond.service                               enabled
dbus-org.freedesktop.NetworkManager.service enabled
dbus-org.freedesktop.nm-dispatcher.service  enabled
dbus-org.freedesktop.resolve1.service       enabled
dbus-org.freedesktop.timedate1.service      enabled

PS:一些systemctl命令:

啓動一個服務:systemctl start firewalld.service
關閉一個服務:systemctl stop firewalld.service
重啓一個服務:systemctl restart firewalld.service
顯示一個服務的狀態:systemctl status firewalld.service
在開機時啓用一個服務:systemctl enable firewalld.service
在開機時禁用一個服務:systemctl disable firewalld.service
查看服務是否開機啓動:systemctl is-enabled firewalld.service;echo $?
查看已啓動的服務列表:systemctl list-unit-files|grep enabled

對於端口開放,還可以添加INPUT鏈,INPUT鏈的默認規則是DROP,所以我們就寫需要ACCETP(通過)的鏈,爲了能採用遠程SSH登陸,我們要開啓22和8080端口。

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

二、在idea上實現一個簡單分佈式服務demo

1、創建父maven工程

在idea中創建一個maven項目,單擊file——new——project,這裏不要選擇Create from archetype複選框。

命名dubboDemo,用來存放後面創建的dubbo-api,dubbo-provider,dubbo-consumer文件。

finish生成maven項目

2、創建服務接口 dubbo-api

(1)在idea中,再次創建一個Module的maven項目,單擊file——new——Module。

(2)創建HelloService接口類

(3)使用install 成jar包,便於其它項目使用

3、創建服務提供者dubbo-provider

(1)創建一個Module的spring項目,單擊file——new——Module。選擇Spring Initializr

(2)在dubbo-provider中的pom.xml添加dubbo、zookeeper、接口依賴

 <!--引入dubbo-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!--引入zookeeper-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
        <!--引入接口-->
        <dependency>
            <groupId>com.lxy</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

(3)實現dubbo-provider接口,注意提供者必須添加Component和Service的註解。Component是Spring bean註解,負責將bean注入到Spring容器中,Service是dubbo的註解(不要和spring bean的service註解弄混),負責暴露服務。

(4)在dubbo-provider中的resources 目錄下application.properties 配置的dubbo信息

server.port=8090
#dubbo服務名
spring.dubbo.application.name=dubbo-provider
#註冊中心
spring.dubbo.registry.address=zookeeper://zookeeper註冊的ip:2181
#dubbo的RPC協議
spring.dubbo.protocol.name=dubbo
#dubbo的RPC端口
spring.dubbo.protocol.port=20880
#遠程服務超時時間
spring.dubbo.provider.timeout=5000
#發佈服務掃描的路徑
spring.dubbo.base-package=com.helloDubbo.dubboprovider.service.impl

(5)服務提供者啓動類,添加EnableDubboConfiguration註解。@EnableDubboConfiguration, 表示要開啓dubbo功能.

4、創建服務消費者 dubbo-consumer

(1)創建dubbo-consumer的springboot項目 ,與創建dubbo-provider項目一樣。就不多做介紹了。

(2)在dubbo-consumer 添加下面代碼框中的依賴(細心的同學會發現和provider的一樣)

 <!--引入dubbo-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!--引入zookeeper-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
        <!--引入接口-->
        <dependency>
            <groupId>com.lxy</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

(3)編寫controller調用遠程服務,Reference註解引用配置,用於創建一個遠程服務代理,一個引用可以指向多個註冊中心。在需要調用服務的類(Controller) 中使用 @Reference 註解來創建 Bean。 注意:在服務啓動的時候,dubbo註解的掃描必須要先於spring的註解,如果不做處理的話,先掃描controller註解,再掃描reference會造成項目啓動沒問題,但是在實現功能的時候會報service空指針。因爲這個reference沒有被注入到controller中去。

(4)同樣在dubbo-provider中的resources 目錄下application.properties 配置的dubbo信息

#防止與zookeeper端口號重複
server.port=8091
#dubbo服務名
spring.dubbo.application.name=dubbo-consumer
#註冊中中心
spring.dubbo.registry.address=zookeeper://116.62.180.224:2181
#dubbo的RPC協議
spring.dubbo.protocol.name=dubbo
#dubbo的RPC端口
spring.dubbo.protocol.port=20880
#遠程服務超時時間
spring.dubbo.provider.timeout=5000
#發佈服務掃描的路徑
spring.dubbo.base-package=com.helloDubbo.dubboconsumer.controller

(6)服務消費者啓動類,添加EnableDubboConfiguration註解。

5、測試

主要在dubbo-admin的平臺查看是否有服務。也可以在zookeeper的可視化界面或者節點上查看。 (1)首先啓動dubbo-admin的jar包

(2)啓動dubbo-provider

(2)在瀏覽器中輸入dubbo-admin的網址http://自己設置的ip:7002/。不清楚的可以看看上面dubbo-admin安裝時的配置。在首頁上可以看出已成功註冊provider服務。

(3)啓動dubbo-consumer,選擇comsumers查看是否有消費者

(4)最終測試,在瀏覽器中輸入localhost:8091/hello(8091是自己配置的消費者的端口號),若在屏幕顯示Hello world,表示成功,控制檯同樣輸出Hello lxy

控制檯輸出

大功告成!

原文出處:https://www.yundashi168.com/262.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章