spring boot 2+dubbo+zookeeper搭建指南

spring boot 2+dubbo+zookeeper搭建指南

0.写在前边

  • 关于spring boot、dubbo、zookeeper的基础知识就不在此普及了,大家自行百度。之前项目一直用的是比较笨重的springMVC,最近想转路线,于是调研了几个方向。并基于分布式的潮流,试着搭建了spring boot2+dubbo的环境。结合网上搜的一些教程,将搭建过程写下来。

1.版本

  • spring boot 2.1.1
  • dubbo 2.6.2
  • dubbo starter 0.2.0
  • zookeeper 3.4.12

2.搭建环境

  • window开发机(jdk+tomcat+maven+eclipse):eclipse 运行dubbo-consumer、dubbo-provider,tomcat运行 dubbo-admin
  • linux开发机(jdk):运行zookeeper(单机版)

3.zookeeper安装

  • 先安装jdk
  • https://www.apache.org/dyn/closer.cgi/zookeeper 网址下有下载链接,选择了http://mirrors.hust.edu.cn/apache/zookeeper/镜像下资源下载。
  • linux下运行curl http://mirrors.hust.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz -O,将文件下载到本地(也可内网直接下载)
  • 解压缩 tar zxf zookeeper-3.4.12.tar.gz
  • 在zookeeper-3.4.12目录下,创建data、log文件夹 mkdir data , mkdir log
  • 在conf目录下,cp zoo_sample.cfg zoo.cfg
  • 修改zoo.cfg,指定data及log目录(log目录不指定默认和data一致)
    dataDir=/zookeeper-3.4.12/data
    dataLogDir=/zookeeper-3.4.12/log
    端口为默认的2181
  • 进入bin目录,启动zookeeper ./zkServer.sh start,会显示启动信息,如使用的配置文件等
  • 可执行bash bin/zkServer.sh status查看状态

dubbo-admin安装

dubbo-provider

  • 在https://start.spring.io/中选择web依赖,生成项目,导入eclipse
  • 修改provider的pom文件,只需加入dubbo-spring-boot-starter,完整pom如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.dubbo</groupId>
    <artifactId>provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>provider</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <maven-jar-plugin.version>2.6</maven-jar-plugin.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  • 修改配置文件application.properties
server.port=8081

# Service version
demo.service.version = 1.0.0

# Base packages to scan Dubbo Components (e.g @Service , @Reference)
dubbo.scan.basePackages  = com.dubbo.provider.service

# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = provider1
dubbo.application.name = provider-1

## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

## RegistryConfig Bean
dubbo.registry.id = my-registry1
dubbo.registry.address = zookeeper://192.168.1.143:2181
  • 实现服务提供接口,分别定义**接口类(必需?不定义会报错)**及接口实现类,接口实现类如下:
import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.provider.service.TestService;

@Service(version = "${demo.service.version}", protocol = { "dubbo" }, registry = "${dubbo.registry.id}")
public class TestServiceImpl implements TestService {

 @Override
 public String sayHello(String name) {
  return "Hello, " + name + " (from Spring Boot)";
 }
}
  • 启动spring boot,在dubbo-admin中可见服务已经注册

dubbo-consumer

  • 在https://start.spring.io/中选择web依赖,生成项目,导入eclipse
  • pom文件与provider类似,需新增对provider项目的依赖(?)
<dependency>
         <groupId>com.dubbo</groupId>
         <artifactId>provider</artifactId>
         <version>0.0.1-SNAPSHOT</version>
</dependency>
  • properties文件配置
spring.application.name = dubbo-consumer
server.port = 9091

dubbo.application.name = dubbo-consumer

demo.service.version = 1.0.0

dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

dubbo.registry.address = zookeeper://192.168.1.143:2181

dubbo.consumer.timeout = 5000
  • controller中调用服务接口,代码如下
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.provider.service.TestService;

@RestController
public class TestController {

 @Reference(version = "${demo.service.version}")
 private TestService testService;

 @RequestMapping("/sayHello/{name}")
 public String sayHello(@PathVariable("name") String name) {
  return testService.sayHello(name);
 }

}

猜你喜欢

转载自blog.csdn.net/cxtadment/article/details/85322406
今日推荐