IDEA搭建SpringBoot+Dubbo+Zookeeper项目

一、准备工作

1.安装zookeeper

dubbo项目官方建议使用zookeeper做为dubbo的服务注册与发现的注册中心,所以首先需要在服务器中安装zookeeper。我使用的是mac开发,在mac中,首先cd到你要安装的目录,然后使用brew命令brew install zookeeper,等待安装完成后,cd到Cellar,然后cd zookeeper/3.4.13/bin,

IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第1张图片
image.png
IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第2张图片
image.png
image.png

在bin中执行 zkServer start, 运行zookeeper
IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第3张图片
image.png

brew安装好的zookeeper是配置好的,不用手动去配置 zoo.cfg文件,如果要手动修改配置文件的话,可以在安装根目录中进入 /etc/zookeeper目录修改 zookeeper
IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第4张图片
image.png

IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第5张图片
image.png

2.部署dubbo后台管理

打开dubboGithub链接,下载zip文件,然后使用maven进行打包,然后在dubbo-admin-servertarget中得到dubbo-admin-server-0.1.jar,

IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第6张图片
image.png

拷贝jar包到其他目录中,这里我拷贝到本地 tomcatwebapps中,使用命令 java -jar dubbo-admin-server-0.1.jar运行项目,然后就可以本地通过 localhost:8080访问dubbo管理后台了。
IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第7张图片
image.png

这里可以看到注册到后台的接口等其他信息,暂时还没有详细研究。

二、正式创建项目

1.创建多模块项目

使用idea新建一个Spring Initializr项目

IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第8张图片
image.png

配置 Group``Artifact
IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第9张图片
image.png

一直 next到项目创建

在打开的dubbo项目中右击新建module

IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第10张图片
image.png

IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第11张图片
image.png

依次创建 dubbo-apidubbo-serverdubbo-web 三个模块,其中api是提供接口,server是接口的实现类。

2.配置项目

创建好项目后要分别配置一下项目的pom.xml文件,我直接贴出来
父项目的



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.6.RELEASE
         
    
    com.crossyf.dubbo
    dubbo
    0.0.1-SNAPSHOT
    dubbo
    Demo project for Spring Boot
    pom
    
        dubbo-api
        dubbo-service
        dubbo-web
    

    
        UTF-8
        UTF-8
        1.8
        2.1.6.RELEASE
        8.5.42
        2.0.0
        3.4.10
        0.5
        1.0.0

    

    

        
            org.springframework.boot
            spring-boot-starter-tomcat
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        
        
        
            com.alibaba.spring.boot
            dubbo-spring-boot-starter
            ${dubbo.version}
        
        
        
            com.101tec
            zkclient
            ${zkclient.version}
        
        
            org.apache.zookeeper
            zookeeper
            ${zookeeper.version}
        
    
    
        
            
                
                org.springframework.boot
                spring-boot-dependencies
                2.1.6.RELEASE
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



apipom



    4.0.0
    
        com.crossyf.dubbo
        dubbo
        0.0.1-SNAPSHOT
         
    
    jar
    dubbo-api
    com.crossyf.dubbo
    0.0.1-SNAPSHOT
    dubbo-api
    http://maven.apache.org

    Demo project for Spring Boot

    
        UTF-8
        1.8
        com.crossyf.dubbo.web.DubboWebApplication
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    exec
                
            
        
    




注意 这里pom里的build标签内的内容,如果不加上这个,sevice运行是没有问题的,但是使用maven构建项目的时候,所有引用到api module里的包名都会报错找不到包名。这里我在这里耽误了很久,找不到问题,最后在这个帖子里找到了答案
https://hbxflihua.iteye.com/blog/2431537

servicepom



    4.0.0
    
        com.crossyf.dubbo
        dubbo
        0.0.1-SNAPSHOT
    
    0.0.1-SNAPSHOT
    http://maven.apache.org
    
        1.8
        UTF-8
    

    com.crossyf.dubbo
    dubbo-service
    dubbo-service
    Demo project for Spring Boot

    
        
            com.crossyf.dubbo
            dubbo-api
            0.0.1-SNAPSHOT
        

    



    
        dubbo-service

        
            
                ${project.build.directory}/classes
                src/main/resources
                true
                
                    **/*.xml
                    **/*.properties
                    **/*.yml
                
            
        

        
            
                
                
                    org.eclipse.m2e
                    lifecycle-mapping
                    1.0.0
                    
                        
                            
                                
                                    
                                        org.apache.maven.plugins
                                        maven-dependency-plugin
                                        [2.0,)
                                        
                                            copy-dependencies
                                        
                                    
                                    
                                        
                                    
                                
                            
                        
                    
                
            
        
        
            
            
                org.apache.maven.plugins
                maven-jar-plugin
                
                    target/classes/
                    
                        
                            com.crossyf.dubbo.service.DubboServiceApplication
                            
                            false
                            true
                            lib/
                        
                        
                            .
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        copy-dependencies
                        package
                        
                            copy-dependencies
                        
                        
                            jar
                            jar
                            
                                ${project.build.directory}/lib
                            
                        
                    
                
            
        
    


webpom



    4.0.0
    
        com.crossyf.dubbo
        dubbo
        0.0.1-SNAPSHOT
    
    com.crossyf.dubbo
    dubbo-web
    0.0.1-SNAPSHOT
    dubbo-web
    Demo project for Spring Boot
    war
    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
            2.1.6.RELEASE
        
        
            ${project.groupId}
            dubbo-api
            ${project.version}
        


        
        
            com.ibeetl
            beetl-framework-starter
            1.1.22.RELEASE
        
    

    
        dubbo-web
    


3.配置application.yml文件

serviceapplication.yml如下

  port: 8094
  servlet:
    context-path: /dubbo-service

spring:
  http:
    encoding:
      charset: UTF-8
      force: true
      enabled: true


dubbo:
  application:            #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
    name: Provide
  registry:                 #注册中心配置,用于配置连接注册中心相关信息。
    address: zookeeper://192.168.3.38:2181
  protocol:     #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
    name: dubbo
    port: 20880
  scan: com.crossyf.dubbo.service.impl  #服务暴露与发现消费所在的package

webapplication.yml

server:
  port: 8092
  servlet:
    context-path: /dubbo-web
spring:
  http:
    encoding:
      charset: UTF-8
      force: true
      enabled: true
    multipart:


dubbo:
  application:            #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
    name: Customer
    id: Customer
  registry:                 #注册中心配置,用于配置连接注册中心相关信息。
    address: zookeeper://192.168.3.38:2181
  protocol:
    name: dubbo
    port: 20880

4.编写测试代码

api模块中创建一个接口DemoApi,定义一个方法

 * @author Created by YangFan.
 * @date 2019/7/8
 * 功能:
 */
public interface DemoApi {
    /**
     * 打招呼
     * @param name 名称
     * @return 结果
     */
    String sayHello(String name);
}

然后在service中创建接口的实现类DemoApiImpl

/**
 * @author Created by YangFan.
 * @date 2019/7/8
 * 功能:
 */
@Service
public class DemoApiImpl implements DemoApi {

    @Override
    public String sayHello(String name) {
        return "Hello," + name + " from dubbo Demo2222";
    }
}

web中创建测试控制器DemoController

/**
 * @author Created by YangFan.
 * @date 2019/7/8
 * 功能:
 */
@RequestMapping(value = "/demo")
@RestController
public class DemoController {

    @Reference
    private DemoApi demoApi;

    @RequestMapping(value = "/index")
    public String index(){
        return demoApi.sayHello("dubbo");
    }
}

这里需要注意点地方是,注解@Service是引入的com.alibaba.dubbo.config.annotation.Service的包名。

5.运行测试项目

运行DubboWebApplicationDubboServiceApplication
可以在dubbo后台中发现api已经注册到后台

IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第12张图片
image.png

然后访问 http://localhost:8092/dubbo-web/demo/index,可以返回相关内容
IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第13张图片
image.png

把项目进行maven打包, service中得到 dubbo-service.jar包,将得到的 jar包放在另一台机器中运行,我这里在虚拟机中运行的(拟机环境是centos7),运行后我们在进入 dubbo-admin后台中,可以看到 DemoAPi就有两个提供者了。
IDEA搭建SpringBoot+Dubbo+Zookeeper项目_第14张图片
image.png

现在修改当前项目的DemoApiImpl打印的信息,然后重新运行项目,在地址栏输入http://localhost:8092/dubbo-web/demo/index,不断的刷新,可以看到返回的结果是随机的展现出来的,基本完成了dubbozookeeper的项目。

你可能感兴趣的:(IDEA搭建SpringBoot+Dubbo+Zookeeper项目)