Spring Boot---(23)springboot整合dubbo-zookeeper

本文讲解如何在springboot项目中整合dubbo,zookeeper.

详细代码地址:https://github.com/lightClouds917/springboot-dubbo-zookeeper

具体步骤分为五部:
- 1.安装,启动zookeeper
- 2.新建dubbo-api项目
- 3.新建dubbo-server项目
- 4.新建dubbo-client项目
- 5.启动项目

1.安装,启动zookeeper

如果基础的linux命令不熟练,请参考:Linux—(1)linux常用命令
- 下载
地址: http://www.apache.org/dyn/closer.cgi/zookeeper
- 解压

tar zxvf zookeeper-3.4.8.tar.gz
  • 配置文件
    在 conf 目录新建 zoo.cfg ,配置如下
tickTime=2000
dataDir=/javaee/zookeeper/data 
dataLogDir=/javaee/zookeeper/log
clientPort=2181
  • 启动
    bin目录下,启动
cd zookeeper-3.3.6/bin
./zkServer.sh start

2.新建dubbo-api项目

此项目主要是用于存放dubbo-server,dubbo-client公用的东西,比如实体类,服务接口等。

1.User实体

package com.java4all.domain;

import java.io.Serializable;

/**
 * Author: momo
 * Date: 2018/6/9
 * Description:用户实体
 */
public class User implements Serializable{
    private static final long serialVersionUID = -6591900875272367270L;

    private Integer id;

    private String name;

    private Integer age;

    public User() {
    }

    public User(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

2.接口

package api;


import com.java4all.domain.User;

/**
 * Author: momo
 * Date: 2018/6/9
 * Description:对外服务的接口
 */
public interface UserApi {
    /**根据id查询user*/
    User getUserById(Integer id);
}

3.新建dubbo-server项目

此项目用来实现dubbo-api项目中对外暴露的服务接口。

1.引入dubbo相关依赖

        <!-- Spring Boot Dubbo 依赖 -->
        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>1.0.0</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.9</version>
        </dependency>
        <!--api模块-->
        <dependency>
            <groupId>com.java4all</groupId>
            <artifactId>api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

2.配置文件application.properties

server.port=8011
## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://xx.xx.xx.xx:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
# 这个扫描到实现类的所在包
spring.dubbo.scan=com.java4all.apiImpl

3.接口实现类

package com.java4all.apiImpl;

import api.UserApi;
import com.alibaba.dubbo.config.annotation.Service;
import com.java4all.domain.User;

/**
 * Author: momo
 * Date: 2018/6/9
 * Description:接口服务实现类
 */
//对外暴露为dubbo服务,注意,这个@service为dubbo的@service,版本号可不要,或者自定义
@Service(version = "1.0.0")
public class UserApiImpl implements UserApi
{
    @Override
    public User getUserById(Integer id) {
        return new User(id,"汪汪啊",22);
    }
}

4.新建dubbo-client项目

此项目,我们用来调用对外暴露的接口。

1.引入dubbo相关依赖

        <!-- Spring Boot Dubbo 依赖 -->
        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>1.0.0</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.9</version>
        </dependency>
        <!--api模块-->
        <dependency>
            <groupId>com.java4all</groupId>
            <artifactId>api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

2.配置文件application.properties

server.port=8022
## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://xx.xx.xx.xx:2181
spring.dubbo.scan=com.java4all.controller

3.接口实现类

package com.java4all.controller;

import api.UserApi;
import com.alibaba.dubbo.config.annotation.Reference;
import com.java4all.domain.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * Author: momo
 * Date: 2018/6/9
 * Description:
 */
@RestController
@RequestMapping(value = "user")
public class UserController {

    //指定服务实现类以及版本
    @Reference(version = "1.0.0")
    private UserApi userApi;

    @RequestMapping(value = "getUserById",method = RequestMethod.GET)
    public User getUserById(Integer id){
        //调用服务提供的方法
        return userApi.getUserById(88);
    }

}

5.启动项目

启动顺序为api,server,client;然后我们访问接口,发现服务被调用。
这里写图片描述

整合过程中遇到什么问题,欢迎留言探讨。

猜你喜欢

转载自blog.csdn.net/weixin_39800144/article/details/80632527