springboot整合 dubbo、zookeeper,可运行的入门demo

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

开始了,怎么配

interface

  • 目录结构如下:单纯的建了一个 接口
    在这里插入图片描述
  • 内容如下
package com.yichen.demo;
public interface IUserService {
    public String sayHello(String name);
}
  • 由于这个项目会被生产者(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>
接口实现类

这里需要注意注解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;
    }
}
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);
    }
}
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

消费者

目录结构

在这里插入图片描述

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>
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
接收消息的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";
    }
}
启动类

注意,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);
    }

}

运行测试

查看zookeeper 目录树

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

网页测试

在这里插入图片描述

总结

  • pom 依赖问题,一开始使用的是b站上教学视频中的依赖,一直出现连接不上zookeeper,尝试修改连接时长,依赖冲突和版本问题都不行。后面才发现是zkClient的问题。。
  • 注解问题,接口类的实现类,以及调用接口的类引用的都是alibaba 那的。一开始有一个使用了apache的,导致找不到生产者。。
  • 两个启动类 的注解也是不一致的,一开始都用了enableDubboConfig。。
  • 最开始启动类我设置的是 enableAutoConfiguration 因为我看官方是这么写的,然后就是一路错,难受。还没搞定有啥区别,先记录一下。
  • properties 中的 注册地址 好像只能写一个。之前一下子写了3个,然后给我报ipv6的错。
  • 最后,抱怨一句,虚拟机中装unbutu是真的卡,昨天电脑差点卡死。还是center os香。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值