SpringBoot整合Dubbo、Zookeeper(无xml配置)

版权声明:原创文章,未经允许,禁止转载! https://blog.csdn.net/weixin_36512652/article/details/82388601
  这几天在学习Dubbo、Zookeeper和SpringBoot的整合,按照视频上的教程,在消费方使用@Reference注解的时候总是会报空指针异常,被这个问题烦了好几天。看网上的大佬们说是什么加载顺序不同,本菜鸟不是很懂,还有的教程是使用xml配置文件,本人通过使用xml配置文件可以成功整合,但是我想要的是使用全注解的方式来将其整合在一起,经过这几天的尝试,在不使用xml配置文件的情况下将三者整合了起来,下面是我的整合过程。
  整个工程分为三个模块:
  • api模块
  • 服务提供者
  • 服务消费者
下面是三个模块的工程结构

API接口
服务提供者
服务消费者

API模块:
  • 定义了一个接口
//定义一个接口,作为要暴露的服务
public interface HelloService {
    String sayHello(String name);
}
服务提供者模块:
  • POM文件
    <dependencies>
        <!--引入api接口-->
        <dependency>
            <groupId>com.youngpain</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <!--引入Dubbo依赖-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

        <!--引入ZookeeperClient-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • 实现了API模块的接口并将其暴露出去
@Component//加入容器组件
@Service//暴露服务
public class HelloServiceImpl implements HelloService {

    @Override
    public String sayHello(String name) {
        return "Hello," + name;
    }

}
  • 主程序类使用@DubboComponentScan指定Dubbo扫描包路径
//指定Dubbo扫描包路径
@DubboComponentScan(value = "com.youngpain.dubbo.provider.service")
@SpringBootApplication
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }
}
  • application.properties文件配置相关属性
#设置端口号
server.port=8080
#应用名称
dubbo.application.name=dubbo-provider
#注册中心地址
dubbo.registry.address=zookeeper://x.x.x.x:2181
服务消费者模块:
  • POM文件
 <dependencies>
     <!--引入api接口-->
     <dependency>
         <groupId>com.youngpain</groupId>
         <artifactId>dubbo-api</artifactId>
         <version>0.0.1-SNAPSHOT</version>
     </dependency>

     <!--引入Dubbo依赖-->
     <dependency>
         <groupId>com.alibaba.boot</groupId>
         <artifactId>dubbo-spring-boot-starter</artifactId>
         <version>0.2.0</version>
     </dependency>

     <!--引入ZookeeperClient-->
     <dependency>
         <groupId>com.github.sgroschupf</groupId>
         <artifactId>zkclient</artifactId>
         <version>0.1</version>
     </dependency>

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

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
     </dependency>
 </dependencies>
  • 编写一个Controller类调用服务
@RestController
public class HelloController {

    @Reference
    HelloService helloService;

    @GetMapping("/hello")
    public String useHello() {
        return helloService.sayHello("Dubbo");
    }

}
  • application.properties文件配置相关属性
#避免端口占用
server.port=8081
#应用名称
dubbo.application.name=dubbo-consumer
#注册中心地址
dubbo.registry.address=zookeeper://39.108.114.57:2181
测试流程:
  1. 启动dubbo-provider
  2. 启动dubbo-consumer
  3. 在浏览器输入http://localhost:8081/hello
测试结果:

结果

  源码下载:资源下载

猜你喜欢

转载自blog.csdn.net/weixin_36512652/article/details/82388601