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

1、Spring Cloud Dubbo

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

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

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

【Spring Cloud Alibaba】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 检查一下是否注册成功

【Spring Cloud Alibaba】Dubbo 分布式服务调用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.classargs);
    }

}

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

【Spring Cloud Alibaba】Dubbo 分布式服务调用OK,生产者和消费者都注册完成,调用接口测试

http://localhost:8084/echo/123456

返回结果

[ECHO2] 123456

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

微信公众号


原文始发于微信公众号(花海里):【Spring Cloud Alibaba】Dubbo 分布式服务调用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/69507.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!