一、背景

         以前用spring单独整合过Dubbo+zookeeper,因为用springboot已经好长时间,而且配置也方便,想着重新用springboot整合下Dubbo+zookeeper;各种心酸,因为一个注解的问题导致消费者无法注册到Dubbo中,心累!后面会提到的。

二、前期准备

1.zookeeper安装

下载地址:

链接:https://pan.baidu.com/s/1dukbp2Ld54Mqtnt9F6Igyw 
提取码:o8e6

a)下载完了后,解压出来,到\apache-zookeeper-3.6.0-bin\conf目录下,将zoo_sample.cfg文件复制一份改一个名字:zoo.cfg

b)修改zoo.cfg文件,主要修改的是下面两个目录,需要到对应的路径下创建目录哦

c)启动。切换到apache-zookeeper-3.6.0-bin\bin目录下,双击zkServer.cmd启动就Ok了

2.dubbo安装

下载地址:

链接:https://pan.baidu.com/s/193xCvde4clGJRXShTP14mg 
提取码:x9rt 
a)下载完后了之后解压,然后切换到dubbo-admin目录下,打开命令行,输入:mvn clean install,然后会在target目录产生一个war包,将产生的war包放入tomcat的webapps目录下,然后到tomcat的bin目录下执行startup.bat启动tomcat(我的tomcat默认端口为8080,启动时一直提示端口本占用,可以把tomcat的端口号换一个,我换的8081)

b)启动成功后就可以在浏览器访问dubbo可是页面了,登录用户和密码:root/root

三、项目搭建

1.先创建一个父项目dubbo-parent,然后引入依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
        <!-- dubbo -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <!-- zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.8</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>

2.创建一个公共的api接口工程:common-api,然后创建一个HelloService接口

public interface HelloService {

    public String sayHello(String message);
}

3.创建一个服务提供者工程:server-provider,然后引入common-api工程,实现common-api的中HelloService接口

 
@Service(interfaceClass = HelloService.class)
public class HelloServiceImpl implements HelloService {

    public String sayHello(String message) {
        return "hello:"+message;
    }
}

这个地方的@Service是Dubbo框架中的注解,然后需要指明接口

配置文件的配置如下:

server:
  port: 9001
dubbo:
  application:
    # 服务名称,保持唯一
    name: server-provider
    # zookeeper地址,用于向其注册服务
  registry:
    protocal: zookeeper
    address: zookeeper://127.0.0.1:2181
    #address: zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182,127.0.0.1:2183
  protocol:
    name: dubbo
    port: 20880
  scan: com.pyh.provider.service


启动类:

@EnableDubbo
@SpringBootApplication
public class MainApplication {

    public static void main(String[] args) {
        System.out.println("=============start============");
        SpringApplication.run(MainApplication.class,args);
        System.out.println("=============end============");
    }
}

4.创建一个服务消费者工程:server-consumer,然后引入commin-api工程,然后创建一个控制器

@RestController
public class HelloController {

    @com.alibaba.dubbo.config.annotation.Reference
    private HelloService helloService;

    @RequestMapping("sayHello")
    public String sayHello(String message){
        return helloService.sayHello(message);
    }
}

这个地方需要注意下,一定要使用dubbo的@reference注解,不然消费者就不能注册到dubbo中,我在这个地方折腾了好久,人都快崩溃了,切记,切记,切记!

配置文件:

server:
  port: 9002
dubbo:
  application:
    name: server-consumer
  registry:
    protocol: zookeeper
    address: zookeeper://127.0.0.1:2181
    #address: zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182,127.0.0.1:2183
  scan:
    base-packages: com.pyh.consumer

启动类:

@SpringBootApplication
@EnableDubboConfig
public class MainApplication {

    public static void main(String[] args) {
        System.out.println("=============start===============");
        SpringApplication.run(MainApplication.class,args);
        System.out.println("=============end===============");
    }
}

5.启动server-provider和server-consumer服务

启动完成后就会在dubbo的页面看到服务的提供者和消费者,到此就搭建完成了

四、总结

出现一个很小的问题,但是耗费了好长时间才解决,在server-consumer中使用过的@reference不是dubbo中的,导致注册失败!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐