SpringBoot整合Dubbo

SpringBoot整合Dubbo

  • SpringBoot整合dubbo
    • 开始构建项目
    • 加入pom.xml
    • application.properties
    • SpringBoot启动类
    • 服务生产者的接口
    • 生产者接口的实现类
      • 项目目录结构
      • 服务消费者
    • 实现类
    • controller
    • application.properties
    • 启动类
    • 项目目录
    • 分别启动两个项目

SpringBoot整合dubbo

最近一直在学习Dubbo,发现网上并没有一遍很完美的SpringBoot整合Dubbo的demo。自己也是琢磨了很久,有很多坑。下面给大家分享一个SpringBoot整合dubbo的一个小demo。第一次写博客哈哈哈哈哈。

整合之前大家去网上下载一个zookeeper,并开启注册中心,网上有很多zookeeper的教程配置很简单。
开启服务的时候先启动zkService.cmd开启成功后大概是这样的

SpringBoot整合Dubbo_第1张图片

开始构建项目

创建一个Maven项目
SpringBoot整合Dubbo_第2张图片
我IDEA刚用没多久有点菜鸡,我是一个父项目里面包含两个子项目,大家也可以分别创建一个生产者一个消费者
SpringBoot整合Dubbo_第3张图片
在父项目下创建子项目
SpringBoot整合Dubbo_第4张图片
这样一个生产者一个消费者的项目分别就创建完成了

加入pom.xml

**Springboot整合Duboo的POM依赖只有这三个,之前少导了一个整合包, 一直空指针异常。**

        
        
            com.alibaba.boot
            dubbo-spring-boot-starter
            0.2.0
        
        
        
            com.alibaba
            dubbo
            2.6.2
        
        
        
            org.apache.curator
            curator-framework
            2.12.0
        




    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.1.RELEASE
         
    
    com.zfbgt.dubbo.consumer
    demo
    1.0.0
    demo
    Demo project for Spring Boot

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
        
        
            com.alibaba.boot
            dubbo-spring-boot-starter
            0.2.0
        
        
        
            com.alibaba
            dubbo
            2.6.2
        
        
        
            org.apache.curator
            curator-framework
            2.12.0
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    




application.properties

dubbo.application.name=annotation-provider 			#服务生产的名字
dubbo.registry.address=zookeeper://127.0.0.1:2181   #开启本地的zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

SpringBoot启动类


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

@EnableDubbo //可以在指定的包名下扫描 Dubbo 的服务提供者以及 Dubbo 的服务消费者
@SpringBootApplication //SpringBoot启动类
public class DemoApplication {

    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);
    }

}


服务生产者的接口

package com.zfbgt.dubbo.service;

import org.springframework.stereotype.Service;
//这里接口我加了个service注解,如果去掉的话消费者那边调用会出现空指针也是一个坑
@Service
public interface SayHello {

    String sayHello();
}

生产者接口的实现类

注意@Service注解是dubbo的注解,而我们为了区分用了Spring的@component

import com.alibaba.dubbo.config.annotation.Service;
import com.zfbgt.dubbo.service.SayHello;
import org.springframework.stereotype.Component;


@Service
@Component
public class SayHelloImpl implements SayHello {
    @Override
    public String sayHello() {
        
        return "这是一个dubbo的微服务";
    }
}

项目目录结构

SpringBoot整合Dubbo_第5张图片

服务消费者

注意!这个接口和服务生产者的接口是一样的!

public interface SayHello {

    String sayHello();
}

为了测试我们在写一个接口

public interface Annotation {

    String doSayHello();
}

实现类

注意@Reference是dubbo的注解。

import com.alibaba.dubbo.config.annotation.Reference;
import com.zfbgt.dubbo.service.SayHello;
import org.springframework.stereotype.Component;

@Component
public class AnnotationAction{


    @Reference
    private SayHello sayHello;

    public String doSayHello(){
            return sayHello.sayHello();
    }

}


controller


import com.zfbgt.dubbo.serviceImpl.AnnotationAction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class Hello {
    @Autowired
    private AnnotationAction annotationAction;

    @ResponseBody
    @RequestMapping(value = "hello")
    public String hello(){
        String s = annotationAction.doSayHello();
        return s;

    }
}

application.properties

dubbo.application.name=annotation-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.consumer.timeout=3000
server.port=8081      #防止和生产者接口产生冲突

启动类


@EnableDubbo //可以在指定的包名下扫描 Dubbo 的服务提供者以及 Dubbo 的服务消费者
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);
    }

}

项目目录

SpringBoot整合Dubbo_第6张图片

分别启动两个项目

打开网页输入http://localhost:8081/hello
SpringBoot整合Dubbo_第7张图片
这样就完成了。网上有很多用xml来实现dubbo,Springboot推荐无xml形式,既然我们用的Springboot还是用application.properties或者yml的形式比较好。

你可能感兴趣的:(dubbo)