• 阿里云服务器部署Dubbo框架入门教程(SpringBoot+zookeeper+dubbo)


    一、准备环境

    话说看代码不如写代码,写完代码也要跑起来看看效果才行,不然搭建了demo,没有环境运行效果,也是没有太好的体会。所以首先需要准备环境才行。 搭建的是dubbo框架的分布式服务demo,以下是我的环境准备。
    环境准备:
    1、一台服务器(阿里云或者腾讯云
    2、服务器上搭建java环境,安装maven、tomcat、zookeeper、dubbo-admin。
    虽然搭建的是简单的分布式服务,但是成功地在服务器上跑起来还是花了一些时间,主要是在搭建环境中遇到了一些坑,为了让其他同学能够快速地搭建一个简单的分布式服务,我将自己搭建的每一个步骤都详细地书写了,方便大家自己搭建。

    1、购买阿里云服务器

    首先需要一个云服务器,没有云服务器的话也可以在自己电脑上使用vmware,用户可在单一的桌面上同时运行不同的操作系统,进行开发。但是这样做太费内存了,电脑卡的不行,所以我还是选择服务器。
    网上有许多的服务器,耳熟能详的就是阿里云和腾讯云,同学们可以自己去官网对比一下,从价格、性能、活动优惠内容这些自己选择。下面是我购买阿里云服务器一些流程,对于还没有用过服务器的同学,我觉得还是有帮助的。
    (1)登录阿里云官网( https://www.aliyun.com/ ),如果没有注册阿里云会员的,可以先注册一个。选择云服务器ECS。为什么叫ECS服务器,大家可以去问问度娘,这里就不解释了。

    [这里是图片001]

    这里就注意了,阿里云网页是有活动的,所以不要点立即购买,点击下面的活动。(土豪请无视)阿里云活动地址:阿里云·云小站

    [这里是图片002]

    推荐三年,原因是阿里云针对新用户有折扣,老用户就没办法享受,所以如果你的账号是新账号的话,建议不要你的账号去选择1个月或者1年的,尽量时间选择长一点。(等你不是新用户的时候,你就发现阿里云同等配置的服务器要贵蛮多) 以后续费:建议找家人和朋友的新账号购买。你只需要做好服务器之间程序和数据的稳定迁移就可以了。

    进入活动页面,找到适合自己的,当前活动我选择的是下面红框中的。有同学可能想问为什么不选突发性能型t5,我对比了一下,t5是由性能限制的,具体的自己对比下。点击立即购买。一般推荐共享型n4 3年。想免备案推荐轻量应用服务器-香港。需要更多免备案机型的可以查看:免备案机型汇总

    购买后出现下面的页面,这时候需要选择地域,有些同学会奇怪为什么没有我所在的地域,是不是不能用,并不是这样的。这些地域是布置有服务器的地域,你选择离你所在地域比较近的就行了。而且实例必须你是有的,没有实例的是灰色的。带宽可以自己选择。最后点击立即购买。

    [这里是图片003]

    购买后,进入阿里云主页,选择ECS云服务器——管理控制台——实例——更多,重置实例密码,重置后要重启服务器才会生效。

    [这里是图片004]

    使用Xshell或者MobaXterm进入服务器中,服务器的ip就是公网显示的ip。为什么用公网ip?服务器公网ip可以用于域名解析ip,服务器远程登录ip,是最主要的服务器ip地址。私网ip不能用于域名解析。不可以直接用于服务器远程登录,其主要作用是:跟当前帐号下的其他同集群的机器通信。

    参考教程:阿里云ECS服务器使用入门教程

    [这里是图片005]

    2、搭建java环境

    服务器有了,就可以开始搭建环境。

    (1)查看当前linux操作系统版本

    cat /etc/redhat-release 是系统安装时默认的发行版本。

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

    cat /proc/version 和 uname -a 显示的内容相同,显示linux内核版本号(开源版本)

    [root@iZbp13xqpgsk8aqlm2wr1zZ ~]# cat /proc/version
    Linux version 4.18.0-147.5.1.el8_1.x86_64 (mockbuild@kbuilder.bsys.centos.org) (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
    
    • 1
    • 2
    • 3
    • 4

    查看当前Linux版本是多少位

    [root@iZbp13xqpgsk8aqlm2wr1zZ ~]# getconf LONG_BIT
    64
    
    • 1
    • 2

    (2)安装之前先查看一下有无系统自带jdk

    rpm -qa |grep java
    rpm -qa |grep jdk
    rpm -qa |grep gcj
    
    • 1
    • 2
    • 3

    没有信息输出就是无jdk,如果有就使用批量卸载命令

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

    (3)下载安装JDK1.8

    这里我已经写好了教程,参考Linux安装JDK8安装教程

    3、搭建Maven环境

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

    [这里是图片006]

    选择版本以后再选择红框中的,不要问为什么,自己可以去试试…

    [这里是图片007]

    [这里是图片008]

    2)安装maven以及配置环境变量
    在liunx上解压maven的tar包

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

    配置环境变量

    vim /etc/profile
    
    • 1

    在/etc/profile文件内容最后添加以下内容

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

    刷新配置文件

    source /etc/profile  
    
    • 1

    验证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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:在选择版本的时候,我开始下载的是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上传到服务器。

    [这里是图片009]

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    对zoo.cfg进行配置。这是最重要的配置,zookeeper连接配置都是在这里配置的。

    vi zoo.cfg
    
    • 1

    配置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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    [这里是图片010]

    注意:
    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 
    
    • 1
    • 2

    配置环境变量

    vi /etc/profile
    
    
    
    #set zookeeper environment
    export ZOOKEEPER_HOME=/usr/local/zookeeper
    export PATH=$PATH:$ZOOKEEPER/bin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    [这里是图片011]

    刷新配置文件

    source /etc/profile 
    
    • 1

    启动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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    连接zookeeper

    ./zkCli.sh -server localhost:2181 
    ./zkCli.sh start -server ip:端口号
    
    • 1
    • 2

    出现以下界面说明连接zookeeper成功。

    [这里是图片012]

    6、zookeeper的可视化工具

    zkui是基于java语言开发,使用zkui来搭建zookeeper的可视化web界面,下载zkui工具
    下载地址:https://github.com/DeemOpen/zkui.git
    在idea中修改config.cfg,zh,主要修改port和zkserver。
    [这里是图片013]

    再package打包,生成两个jar包:
    zkui-2.0-SNAPSHOT.jar和zkui-2.0-SNAPSHOT-jar-with-dependencies.jar,用的是第二个,将第二个上传至服务器,并且将config.cfg文件也放到和jar包相同的目录下。

    [这里是图片014]

    执行jar包

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

    查看网页,浏览器中运行http://自己的ip:9090,账号密码 admin/manager

    [这里是图片015]

    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和端口
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    在idea上先clean项目,然后package打包,生成的jar包是放在源码文件夹下面的。

    将jar包放入服务器中,执行jar包

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

    [这里是图片016]

    [这里是图片017]

    4)在网页上登录dubbo admin控制台

    [这里是图片018]

    (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
    autovt@.service                             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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    对于端口开放,还可以添加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
    
    • 1
    • 2

    二、在idea上实现一个简单分布式服务demo

    1、创建父maven工程

    在idea中创建一个maven项目,单击file——new——project,这里不要选择Create from archetype复选框。

    [这里是图片019]

    命名dubboDemo,用来存放后面创建的dubbo-api,dubbo-provider,dubbo-consumer文件。

    [这里是图片020]

    [这里是图片021]

    finish生成maven项目

    2、创建服务接口 dubbo-api

    (1)在idea中,再次创建一个Module的maven项目,单击file——new——Module。

    [这里是图片022]

    [这里是图片023]

    (2)创建HelloService接口类

    [这里是图片024]

    (3)使用install 成jar包,便于其它项目使用

    [这里是图片025]

    3、创建服务提供者dubbo-provider

    (1)创建一个Module的spring项目,单击file——new——Module。选择Spring Initializr

    [这里是图片026]

    [这里是图片027]

    [这里是图片028]

    [这里是图片029]

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

     
            
                com.alibaba.spring.boot
                dubbo-spring-boot-starter
                2.0.0
            
            
            
                com.101tec
                zkclient
                0.10
            
            
            
                com.lxy
                dubbo-api
                1.0-SNAPSHOT
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    (3)实现dubbo-provider接口,注意提供者必须添加Component和Service的注解。Component是Spring bean注解,负责将bean注入到Spring容器中,Service是dubbo的注解(不要和spring bean的service注解弄混),负责暴露服务。

    [这里是图片030]

    (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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    [这里是图片031]

    (5)服务提供者启动类,添加EnableDubboConfiguration注解。@EnableDubboConfiguration, 表示要开启dubbo功能.

    [这里是图片032]

    4、创建服务消费者 dubbo-consumer

    (1)创建dubbo-consumer的springboot项目 ,与创建dubbo-provider项目一样。就不多做介绍了。
    [这里是图片033]

    [这里是图片034]

    (2)在dubbo-consumer 添加下面代码框中的依赖(细心的同学会发现和provider的一样)

     
            
                com.alibaba.spring.boot
                dubbo-spring-boot-starter
                2.0.0
            
            
            
                com.101tec
                zkclient
                0.10
            
            
            
                com.lxy
                dubbo-api
                1.0-SNAPSHOT
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    (3)编写controller调用远程服务,Reference注解引用配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心。在需要调用服务的类(Controller) 中使用 @Reference 注解来创建 Bean。
    注意:在服务启动的时候,dubbo注解的扫描必须要先于spring的注解,如果不做处理的话,先扫描controller注解,再扫描reference会造成项目启动没问题,但是在实现功能的时候会报service空指针。因为这个reference没有被注入到controller中去。

    [这里是图片035]

    (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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    (6)服务消费者启动类,添加EnableDubboConfiguration注解。

    [这里是图片036]

    5、测试

    主要在dubbo-admin的平台查看是否有服务。也可以在zookeeper的可视化界面或者节点上查看。
    (1)首先启动dubbo-admin的jar包
    [这里是图片037]

    (2)启动dubbo-provider

    [这里是图片038]

    (2)在浏览器中输入dubbo-admin的网址http://自己设置的ip:7002/。不清楚的可以看看上面dubbo-admin安装时的配置。在首页上可以看出已成功注册provider服务。

    [这里是图片039]

    [这里是图片040]

    (3)启动dubbo-consumer,选择comsumers查看是否有消费者

    [这里是图片041]

    [这里是图片042]

    (4)最终测试,在浏览器中输入localhost:8091/hello(8091是自己配置的消费者的端口号),若在屏幕显示Hello world,表示成功,控制台同样输出Hello lxy

    控制台输出

    [这里是图片043]

    大功告成!

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

  • 相关阅读:
    Improving Multimodal Accuracy Through Modality Pre-training and Attention
    【mybatis基础】
    SaaSBase:什么是微盛?
    MySQL表单的修改与删除
    上新啦!请查收云原生虚拟数仓 PieCloudDB 十月动态
    解答:EasyDSS视频点播时音频是否可以设置为默认开启?
    Flutter 在项目中使用动画(不使用包)
    [lesson60]数组类模板
    【模型剪枝】|Learning Efficient Convolutional Networks through Network Slimming
    抓包整理————ip 协议四[十五]
  • 原文地址:https://blog.csdn.net/sebeefe/article/details/126619696