【Spring Cloud Alibaba】Dubbo 分布式服务调用

【Spring Cloud Alibaba】Dubbo 分布式服务调用

1、Spring Cloud Dubbo

从上一篇文章中可以 get 到分布式微服务中的两种调用方式,现在的 dubbo 为第三种,三种方式的比较,网上有很多分析,这里就不一一阐述了

  • @LoadBalanced + RestTemplate
  • Spring Cloud OpenFeign
  • Spring Cloud Dubbo

同样也是使用的生产者,消费者模式。其中多了一个 API 模块,API 模块,存放 Dubbo 服务接口和模型定义,非必要,这里创建仅为更好的代码重用以及接口、模型规格控制管理

在这里插入图片描述
其实玩过 Dubbo + Zookeeper 的都知道,使用 Dubbo 调用的前提是,生产者消费者两端有同样的约束

2、构建 Dubbo 公共 API

创建 spring-cloud-alibaba-dubbo-api 模块,这个模块只需要使用普通的 java 模块即可,主要是使用统一的接口管理,创建一个 service 接口层

package cn.tellsea.service;

/**
 * 公共API
 *
 * @author Tellsea
 * @date 2021/12/20
 */
public interface EchoService {

    /**
     * dubbo 公共 API
     *
     * @param message
     * @return
     */
    String echo(String message);
}

构建完 spring-cloud-alibaba-dubbo-api 模块之后,需要使用命令打包

mvn clean install

构建 Dubbo 生产者和消费者的时候,需要使用这个依赖

3、构建 Dubbo 生产者

创建 spring-cloud-alibaba-dubbo-provider 模块,相关依赖,其中 spring-cloud-alibaba-dubbo-api 是上一步构建的 jar 包安装到了本地

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

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

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

        <dependency>
            <groupId>cn.tellsea</groupId>
            <artifactId>spring-cloud-alibaba-dubbo-api</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>
    </dependencies>

修改 application.properties 配置,增加 dubbo 配置

server.port=8083
spring.application.name=spring-cloud-alibaba-dubbo-provider
management.server.port=9093
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

# Nacos注册信息
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.namespace=sandbox-configuration

# dubbo 协议
dubbo.protocol.id=dubbo
# dubbo 协议端口( -1 表示自增端口,从 20880 开始)
dubbo.protocol.port=-1
# dubbo 服务扫描基准包
dubbo.scan.base-packages=cn.tellsea.service

启动类增加注册服务

@EnableDiscoveryClient

然后再创建一个实现类,实现 API 中的接口

package cn.tellsea.service;

import org.apache.dubbo.config.annotation.Service;

/**
 * Service注解仅声明该Java服务(本地)实现为Dubbo服务
 *
 * @author Tellsea
 * @date 2021/12/20
 */
@Service
public class SimpleEchoServiceImpl implements EchoService {

    @Override
    public String echo(String message) {
        return "[ECHO] " + message;
    }
}

到这里服务提供者就构建完成了, 看一下 nacos 检查一下是否注册成功


OK,构建 Dubbo 生产者完成

4、构建 Dubbo 消费者

创建 spring-cloud-alibaba-dubbo-consumer 模块,依赖和生产者的一样

	<dependencies>
        <dependency>
            <groupId>cn.tellsea</groupId>
            <artifactId>spring-cloud-alibaba-dubbo</artifactId>
            <version>0.0.1-SNAPSHOT</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-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

        <dependency>
            <groupId>cn.tellsea</groupId>
            <artifactId>spring-cloud-alibaba-dubbo-api</artifactId>
            <version>${project.version}</version>
        </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>
    </dependencies>

然后修改 application.properties 配置信息,这里的 dubbo 只需要订阅服务就可以

server.port=8084
spring.application.name=spring-cloud-alibaba-dubbo-consumer
management.server.port=9094
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

# Nacos注册信息
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.namespace=sandbox-configuration

# dubbo 协议
dubbo.protocol.id=dubbo
# dubbo 协议端口( -1 表示自增端口,从 20880 开始)
dubbo.protocol.port=-1
# Dubbo 消费端订阅服务端的应用名,多个服务提供者用逗号分隔
dubbo.cloud.subscribed-services=spring-cloud-alibaba-dubbo-provider

然后编写测试的调用方法

package cn.tellsea;

import cn.tellsea.service.EchoService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * spring cloud dubbo 消费者
 *
 * @author Tellsea
 * @date 2021/12/20
 */
@EnableDiscoveryClient
@RestController
@SpringBootApplication
public class SpringCloudAlibabaDubboConsumerApplication {

    @Reference
    private EchoService echoService;

    @GetMapping("/echo/{message}")
    public String echo(@PathVariable("message") String message) {
        return echoService.echo(message);
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudAlibabaDubboConsumerApplication.class, args);
    }

}

启动服务,查看 nacos 是否注册成功


OK,生产者和消费者都注册完成,调用接口测试

http://localhost:8084/echo/123456

返回结果

[ECHO2] 123456

至此,Spring Cloud Dubbo 分布式服务调用完成

微信公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tellsea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值