淘先锋技术网

首页 1 2 3 4 5 6 7

1、工程结构

dubbo:是一个父工程
consumer:是服务消费方
provider:是服务提供方
interface:存放接口,因为dubbo是根据接口进行服务注册发现的,因此我们要把接口单独拿出来,provider提供方实现该接口并注册服务, consumer要根据接口进行注入
dependency:方便依赖管理

2、引入依赖

dubbo父工程

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

dependency子工程

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>

provider子工程

        <dependency>
            <groupId>com.study</groupId>
            <artifactId>dependency</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>com.study</groupId>
            <artifactId>interface</artifactId>
            <version>1.0</version>
        </dependency>

consumer子工程

        <dependency>
            <groupId>com.study</groupId>
            <artifactId>dependency</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>com.study</groupId>
            <artifactId>interface</artifactId>
            <version>1.0</version>
        </dependency>

interface子工程

不需要依赖

3、安装zookeeper

参考:Zookeeper安装_麻侬的博客-CSDN博客

4、配置文件

provider提供者配置

#web服务端口
server.port=8000
#web服务名称
spring.application.name=provider
#dubbo服务提供者名称
dubbo.application.name=provider
#注册地址 使用zookeeper
dubbo.registry.address=zookeeper://192.168.111.201:2181
#包扫描路径
dubbo.scan.base-packages=com.study.dubbo
#使用dubbo协议
dubbo.protocol.name=dubbo
#协议端口为20880
dubbo.protocol.port=20880

由于配置文件中,配置了dubbo包扫描 dubbo.scan.base-packages,启动类上 @EnableDubbo 注解可加可不加。

@EnableDubbo //服务提供者需要添加这个注解
@SpringBootApplication
public class ProviderApp {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApp.class, args);
    }
}

consumer消费者配置

#web服务端口
server.port=9000
#web服务名称
spring.application.name=consumer
#dubbo服务消费者名称
dubbo.application.name=consumer
#注册地址 使用zookeeper
dubbo.registry.address=zookeeper://192.168.111.201:2181
#使用dubbo协议
dubbo.protocol.name=dubbo
#协议端口为20880
dubbo.protocol.port=20880

消费者如果不提供服务,也就是不把接口注册到注册中心时,可以不添加@EnableDubbo注解 和dubbo包扫描。

5、示例代码

interface子工程编写接口

package com.study.dubbo.service;

public interface GoodsService {
    public String getData(String data);
    public String getGoods();
}

provider工程,接口实现

@Service 这里的service注解不能使用spring的注解,要使用dubbo中的注解

package com.study.dubbo.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.study.dubbo.service.GoodsService;

@Service // 这里的service注解不能使用spring的注解,要使用dubbo中的注解
public class GoodsServiceImpl implements GoodsService {
    @Override
    public String getData(String data) {
        System.out.println("getData 方法被访问了!data: " + data);
        return null;
    }

    @Override
    public String getGoods() {
        System.out.println("getGoods 方法被访问了!");
        return null;
    }
}

 consumer子工程,并引用GoodsService,消费

@Reference 使用dubbo中的注解

package com.study.dubbo.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.study.dubbo.service.GoodsService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/goods")
public class GoodsController {

    @Reference
    private GoodsService goodsService;

    //http://localhost:9000/goods/get
    @RequestMapping("/get")
    public Object getGoods() {
        return goodsService.getGoods();
    }

}

完整示例代码:dubbo: dubbo示例 

6、启动provider和consumer

浏览器访问测试:http://localhost:9000/goods/get

可以看到访问已经成功了,并且provider的控制台也有输出信息

 参考:

SpringBoot集成Dubbo_springboot dubbo_薛定谔的 bug的博客-CSDN博客