当前位置:   article > 正文

springboot整合 dubbo、zookeeper,可运行的入门demo_spring boot+zookeeper+dubbo集成demo

spring boot+zookeeper+dubbo集成demo

吐槽一下,搞这个花了4个多小时,心态有点崩。

开始了,怎么配

interface

  • 目录结构如下:单纯的建了一个 接口
    在这里插入图片描述
  • 内容如下
package com.yichen.demo;
public interface IUserService {
    public String sayHello(String name);
}
  • 1
  • 2
  • 3
  • 4
  • 由于这个项目会被生产者(producer)和消费者(consumer)使用到,所以要把它打成jar包,放在本地仓库中。
    在这里插入图片描述
  • 如果失败,有可能是setting的问题,要确保是自己的本地仓库,而不是其他人的。

生产者 producer

目录结构

在这里插入图片描述

pom 依赖
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <!---使用curator代替zkclient-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.9</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
//  这里是我前面打的 接口 jar包
        <dependency>
            <groupId>com.yichen</groupId>
            <artifactId>springboot-dubbo-interface</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
  • 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
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
接口实现类

这里需要注意注解Service 是 import com.alibaba.dubbo.config.annotation.Service 而不是其他的!!

package com.yichen.demo;
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Component
@Service(version = "1.2.3")
public class UserServiceImpl implements IUserService{
    @Override
    public String sayHello(String name) {
        return "hello:"+name;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
springboot 启动类

这里添加 @EnableDubbo 注解就行了

package com.yichen.demo;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
properties
spring.application.name=dubbo-demo-provider
dubbo.application.name=dubbo-demo-provider
dubbo.application.id=dubbo-demo-provider
# 注册中心地址,好像只能是一个,我没怎么细研究
dubbo.registry.address=zookeeper://192.168.175.128:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.scan.base-packages=com.yichen.demo.UserServiceImpl
# 这里 是连接时间,如果连不上zookeeper 可以把时间设置的长一点,我现在设置的是5s
dubbo.config-center.timeout=5000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

消费者

目录结构

在这里插入图片描述

pom 依赖

相比生产者 它多了一个 spring-boot-starter-web,用于在页面上展示从生产者那里获得的消息

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <!---使用curator代替zkclient-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.9</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.yichen</groupId>
            <artifactId>springboot-dubbo-interface</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
  • 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
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
properties
spring.application.name=dubbo-demo-consumer
dubbo.application.name=dubbo-demo-consumer
dubbo.application.id=dubbo-demo-consumer
dubbo.registry.address=zookeeper://192.168.175.128:2181
dubbo.config-center.timeout=10000
  • 1
  • 2
  • 3
  • 4
  • 5
接收消息的controller

注意,这里的 @Reference 来自 import com.alibaba.dubbo.config.annotation.Reference 而不是其他的

package com.yichen.demo;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {

    @Reference(version = "1.2.3")
    private IUserService userService;

    @RequestMapping("/sayHello")
    public String sayHello(String name){
        return userService.sayHello(name);
//        return "dfs";
    }
    @RequestMapping("/show")
    public String show(){
        return "show";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
启动类

注意,producer类和consumer 类这两个类中启动类的注解是不一样的!!

package com.yichen.demo;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubboConfig
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

运行测试

查看zookeeper 目录树

在这里插入图片描述
可以看到生产者和消费者都注册到了zookeeper 上了。

网页测试

在这里插入图片描述

总结

  • pom 依赖问题,一开始使用的是b站上教学视频中的依赖,一直出现连接不上zookeeper,尝试修改连接时长,依赖冲突和版本问题都不行。后面才发现是zkClient的问题。。
  • 注解问题,接口类的实现类,以及调用接口的类引用的都是alibaba 那的。一开始有一个使用了apache的,导致找不到生产者。。
  • 两个启动类 的注解也是不一致的,一开始都用了enableDubboConfig。。
  • 最开始启动类我设置的是 enableAutoConfiguration 因为我看官方是这么写的,然后就是一路错,难受。还没搞定有啥区别,先记录一下。
  • properties 中的 注册地址 好像只能写一个。之前一下子写了3个,然后给我报ipv6的错。
  • 最后,抱怨一句,虚拟机中装unbutu是真的卡,昨天电脑差点卡死。还是center os香。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/53988
推荐阅读
相关标签
  

闽ICP备14008679号