基于Spring Boot 3.1.0的Dubbo代码实现(以Redis作为注册中心)

基于Spring Boot 3.1.0的Dubbo代码实现(以Redis作为注册中心)

一 简介

Apache Dubbo 最初是为了解决阿里巴巴内部的微服务架构问题而设计并开发的,在十多年的时间里,它在阿里巴巴公司内部的很多业务系统的到了非常广泛的应用。最早在 2008 年,阿里巴巴就将 Dubbo 捐献到开源社区,它很快成为了国内开源服务框架选型的事实标准框架,得到了业界更广泛的应用。在 2017 年,Dubbo 被正式捐献 Apache 软件基金会并成为 Apache 顶级项目,开始了一段新的征程。

Dubbo 被证实能很好的满足企业的大规模微服务实践,并且能有效降低微服务建设的开发与管理成本,不论是阿里巴巴还是工商银行、中国平安、携程、海尔等社区用户,它们都通过多年的大规模生产环境流量对 Dubbo 的稳定性与性能进行了充分验证。后来 Dubbo 在很多大企业内部衍生出了独立版本,比如在阿里巴巴内部就基于 Dubbo 衍生出了 HSF,HSF 见证了阿里巴巴以电商业务为首的微服务系统的快速发展。自云原生概念推广以来,各大厂商都开始拥抱开源标准实现,阿里巴巴将其内部 HSF 系统与开源社区 Dubbo 相融合,与社区一同推出了云原生时代的 Dubbo3 架构,截止 2022 年双十一结束,Dubbo3 已经在阿里巴巴内部全面取代 HSF 系统,包括电商核心、阿里云等核心系统已经全面运行在 Dubbo3 之上。

二 前言

该项目是公司原有项目的扩展,而原项目作为单体式项目并没有使用Nacos或Zookeeper作为配置、注册中心。为了达成最小化项目中间件的目的,寻求以Redis作为注册中心的方式实现Dubbo服务的注册与发现。

三 文档查阅

官网文档说实话非常简陋,仅仅描述的工作原理,并未对如何代码实现作阐述,在实现该部分代码的过程中踩了非常多的小坑,虽然最终代码只有寥寥几行,却耗费了笔者一个下午的时间调试。
在这里插入图片描述

四 依赖项

1 注意事项

此处踩坑,如果你在Pom文件中配置了dependencyManagement用以声明Spring Boot的版本,那么Jedis依赖的引入就会变成4.3.2的版本。因为dependencyManagement的优先级是高于dependency中的version标签的,而4.3.2正是Spring Boot所需要的版本,这也是Spring Boot为何能做到开箱即用的原因之一。

2 版本
<!-- Jedis依赖版本 -->
<jedis.version>3.7.1</jedis.version>
<!-- Commons Pool2 版本 -->
<commons-pool2.version>2.11.1</commons-pool2.version>
<!-- Dubbo Redis 注册中心版本 -->
<dubbo-registry-redis.version>1.0.1</dubbo-registry-redis.version>
<!-- Dubbo 版本 -->
<dubbo.version>3.2.4</dubbo.version>
3 dependencyManagement依赖
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>${jedis.version}</version>
		</dependency>
	</dependencies>
</dependencyManagement>
4 dependency依赖
<dependency>
	<groupId>org.apache.dubbo</groupId>
	<artifactId>dubbo-spring-boot-starter</artifactId>
	<version>${dubbo.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.dubbo.extensions</groupId>
	<artifactId>dubbo-registry-redis</artifactId>
	<version>${dubbo-registry-redis.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-pool2</artifactId>
	<version>${commons-pool2.version}</version>
</dependency>

五 配置文件

1 注意事项

关于注册中心地址,共分为协议、用户名、密码、IP地址、端口号以及数据库六个部分。其中:
(1)协议:毫无疑问填写redis;
(2)用户名:仅在Redis6及以后的版本中支持,所以这个地方可以填任何值,但是不能为空;
(3)密码:Redis数据库密码;
(4)端口号:Redis数据库端口号;
(5)数据库:非必填,默认为0。

2 代码
package com.lhms.dubboredis.core.configurations;

import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 基于Redis的Dubbo配置类
 *
 * @author wuzijing
 */
@Configuration
public class DubboRedisConfiguration {

    @Value("${spring.profiles.active:dev}")
    private String active;

    @Value("${spring.application.name:unknown}")
    private String application;

    @Value("${spring.data.redis.host}")
    private String host;

    @Value("${spring.data.redis.port}")
    private String port;

    @Value("${spring.data.redis.password}")
    private String password;

    @Value("${spring.data.redis.database}")
    private String database;

    @Value("${dubbo.application.qos-port}")
    private Integer qosPort;

    @Value("${dubbo.protocol.port}")
    private Integer protocolPort;

    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName(application + "-" + active);
        applicationConfig.setQosEnable(true);
        applicationConfig.setQosAcceptForeignIp(true);
        applicationConfig.setQosPort(qosPort);
        return applicationConfig;
    }

    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        // 注册中心地址,redis6以前的版本账号无用,但是必须要有
        registryConfig.setAddress("redis://redis:" + password + "@" + host + ":" + port);
        // 注册中心协议
        registryConfig.setProtocol("dubbo");
        // 注册中心请求超时时间
        registryConfig.setTimeout(30000);
        // 服务分组注册,用于环境隔离
        registryConfig.setGroup(active);
        registryConfig.setPort(protocolPort);
        return registryConfig;
    }

}

六 yml文件

dubbo:
  application:
    qos-port: 22000
  protocol:
    port: 20800
  scan:
    base-packages: com.catalpa.test.service
spring:
  data:
    redis:
      host: 127.0.0.1
      port: 6379
      password: 123456
      database: 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

布熬夜了

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

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

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

打赏作者

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

抵扣说明:

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

余额充值