【Dubbo】SpringBoot 整合 Dubbo 示例

因为 Dubbo 的依赖中引入了 Spring 相关 Jar 包,所以使用 Dubbo 默认是基于 Spring 的,在前面的文章我们介绍了如何 Dubbo 进行远程通信和服务治理,那么,本篇我们就来看看如何使用 SpringBoot 整合。

创建三个单独模块,分别表示 api,provider,consumer。

在这里插入图片描述

1.dubbo-api

/**
*要暴露的服务
*/
public interface ISayHelloService {
    String sayHello();
}

2.dubbo-provider

1)引入依赖

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
	
	<!-- 服务接口 -->
    <dependency>
        <groupId>com.xupt.yzh</groupId>
        <artifactId>dubbo-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
	
	<!-- dubbo -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.7.2</version>
    </dependency>
	<!-- dubbo 自动装配相关内容-->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.1</version>
    </dependency>
	
	<!-- 注册中心Zk客户端 -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>4.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>4.0.1</version>
    </dependency>
    
</dependencies>

2)实现服务

// 这个@Service是dubbo的提供的,表示暴露服务Bean
// 也可以在@Service(loadbalance=)进行相关配置
@Service 
public class SayHelloServiceImpl implements ISayHelloService {
    @Override
    public String sayHello() {
        return "Hello Dubbo...";
    }
}

3)配置服务内容

dubbo.scan.base-packages=com.xupt.yzh.dubboprovider
dubbo.application.name=dubbo-springboot
dubbo.registry.address=zookeeper://43.107.136.120:2181

几点注意:

  1. SpringBoot 默认采用dubbo协议与20880端口,所以 dubbo.protocol.name 与 dubbo.protocol.port 可以不显式配置
  2. dubbo.application.name 必须配置,其作用在于多节点提供同一服务时起标识作用
    • 在注册中心 zookeeper 中,服务节点的名称仍然是接口全类名,application.name 保存在临时节点的 url 中(通过&拼接)
    • 如果在 com…ISayHelloService 下有多个节点(代表多种服务实现),那么 applicaiton.name 可以在调用方的@Reference(application=“ ‘)进行指定
  3. dubbo.scan.base-packages 必须配置了才能扫描

4)启动服务

启动服务后可以在 zookeeper 中看相关服务是否已经注册

在这里插入图片描述

3.dubbo-client

1)引入依赖

这里同 provider,但一般还会引入 web-starter,因为消费端一般会包含 Controller,提供 web 访问

<dependencies>
    <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>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.xupt.yzh</groupId>
        <artifactId>dubbo-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.7.2</version>
    </dependency>

    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>4.0.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>4.0.1</version>
    </dependency>
</dependencies>

2)远程调用服务

@RestController
public class DubboController {
	
    // Dubbo提供的注解,标识根据服务名获取相应服务Bean
    // 也可以在@Reference(loadbalance=)进行相关配置
    @Reference 
    ISayHelloService sayHelloService;

    @GetMapping("/sayHello")
    public String sayHello() {
        // 调用服务提供方法
        return sayHelloService.sayHello();
    }
}

3)配置服务内容

与provider相同

dubbo.registry.address=zookeeper://43.107.136.120:2181
dubbo.scan.base-packages=com.xupt.yzh.dubboclient
dubbo.application.name=dubbo-springboot-client

4.启动服务

启动后可以在web端进行访问

在这里插入图片描述

本篇相关代码我放到 GitHub 上了,有需要参考的同学点击这里跳转…

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值