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

news2024/12/27 18:02:25

目录

  • 基于Spring Boot 3.1.0的Dubbo代码实现(以Redis作为注册中心)
    • 一 简介
    • 二 前言
    • 三 文档查阅
      • 四 依赖项
        • 1 注意事项
        • 2 版本
        • 3 dependencyManagement依赖
        • 4 dependency依赖
      • 五 配置文件
        • 1 注意事项
        • 2 代码
      • 六 yml文件

基于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/999918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RRU-Net:The Ringed Residual U-Net for Image Splicing Forgery Detection阅读笔记一

文章目录 1. Introduction2. Related Work3. The Ringed Residual U-Net (RRU-Net)3.1. Residual Propagation3.2. Residual Feedback3.3. Ringed Residual Structure and Network Architectures 4. Evaluation Experiment and Comparative Analysis 1. Introduction 根据现有…

Golang 常用的几种密码加密方式

加密方式 加密有两种方式&#xff0c;一种是直接加密&#xff0c;一种是盐值加密 **直接加密&#xff08;Plain Hashing&#xff09;**指的是将原始密码直接进行加密&#xff0c;而不进行任何额外的操作。这种方式可能存在一些安全风险&#xff0c;因为相同的密码在经过加密后…

STM32F4X DMA

STM32F4X DMA 什么是DMASTM32F4X DMADMA框图DMA通道DMA仲裁器DMA FIFO DMA传输模式DMA传输方向存储器到存储器存储器到外设外设到存储器 DMA循环模式和普通模式循环模式&#xff08;Circular&#xff09;普通模式&#xff08;Normal&#xff09; DMA源、目标寄存器增量模式DMA例…

一文简介,数字时代的数据交易模式

在数字时代&#xff0c;数据作重要的信息和资源&#xff0c;未来获得更高质量的数据资源&#xff0c;数据交易越来越常见&#xff0c;数据也成为企业重要的无形资产。 2022年3月出台的《中共中央、国务院关于加快建设全国统一大市场的意见》强调要加快培育数据要素市场&#xf…

Zabbix登录绕过漏洞复现(CVE-2022-23131)

0x00 前言 最近在复现zabbix的漏洞&#xff08;CVE-2022-23131&#xff09;&#xff0c;偶然间拿到了国外某公司zabbix服务器。Zabbix Sia Zabbix是拉脱维亚Zabbix SIA&#xff08;Zabbix Sia&#xff09;公司的一套开源的监控系统。该系统支持网络监控、服务器监控、云监控和…

Jetpack Compose 1.5 发布:全新 Modifier 系统助力性能提升

不久前 Compose 1.5.0 稳定版发布&#xff0c;在组合的性能方面得到明显改善&#xff0c;这主要归功于对 Modifier API 的持续重构。 Modifier 是 Compose 中的重要概念&#xff0c;为 Composition 中的 LayoutNode 配置各种样式信息以用于后续渲染。在 1.3.0 之前的 Modifier …

Java知识点二

Java知识点二 1、Comparable内部比较器&#xff0c;Comparator外部比较器2、源码结构的区别:1&#xff09;Comparable接口&#xff1a;2&#xff09;Comparator接口&#xff1a; 2、Java反射 1、Comparable内部比较器&#xff0c;Comparator外部比较器 我们一般把Comparable叫…

【MySQL】表的增删改查

目录 MySQL表的增删查改 Create 单行数据全列插入 多行数据指定列插入 插入否则更新 替换数据 Retrieve SELECT 列 全列查询 指定列查询 查询字段为表达式 为查询结果指定别名 结果去重 WHERE 条件 查询英语不及格的同学及其英语成绩 查询语文成绩在80到90分的…

【自动化测试】如何在jenkins中搭建allure

相信大家在做自动化测试过程中&#xff0c;都会用到自动化测试环境&#xff0c;目前最常见的就是通过容器化方式部署自动化测试环境&#xff0c;但对于一些测试小白&#xff0c;不是很会搭建持续集成环境&#xff0c;特别是从0-1的过程&#xff0c;需要自行搭建很多依赖环境&am…

完全保密的以太坊交易:Aztec网络的隐私架构

1. 引言 Aztec为隐私优先的以太坊zkRollup&#xff1a;即其为具有完全隐私保护的L2。 为了理解私有交易的范式变化性质&#xff0c;以及为什么将隐私直接构建到网络架构中很重要&#xff0c;必须首先讨论为什么以太坊不是私有的。 2. 以太坊&#xff1a;公有链 以太坊为具有…

设计师常用的8款作图软件推荐

在数字时代&#xff0c;绘图软件已经成为设计师不可缺少的工具。从图形设计到插图&#xff0c;从传统绘图到人工智能绘画&#xff0c;为了实现高效、方便、创意的设计&#xff0c;设计师需要一个强大的绘图软件。本文将介绍8个易于使用的绘图软件&#xff0c;每个软件都具有独特…

ME51N 采购申请屏幕增强仅显示字段

1、业务需求 通过委外工单生成的采购申请&#xff0c;需要将自定义“图号”字段显示在采购申请中&#xff0c;且只用于显示即可 2、增强实现 增强表EBAN的结构CI_EBANDB 增强点CMOD&#xff1a;MEREQ001 出口EXIT_SAPLMEREQ_001 首先在TOP文件中引入全局CI_EBANDB 创建子屏…

动态渲染 echarts 饼图(vue 2 + axios + Springboot)

目录 前言1. 项目搭建1.1. 前端1.2. 后端 2. 后端数据渲染前端2.1 补充1&#xff1a;在 vue 中使用 axios2.2. 补充2&#xff1a;Springboot 处理跨域问题2.3. 修改前端代码2.3.1 修改饼图样式2.3.2 调用后台数据渲染饼图2.3.3 改造成内外两个圈 前言 因为上文中提到的需求就是…

轻松上手Three.js:JavaScript 3D库指南

1.Three.js概述 Three.js是使用JavaScript语言编写的一款运行在浏览器中的3D引擎。与WebGL不同&#xff0c;开发人员在使用Three.js进行开发时&#xff0c;无须掌握高深的图形学知识&#xff0c;只需使用少量JavaScript代码即可创建出一个3D场景。可以说&#xff0c;Three.js的…

恒运资本:小盘股的优点?投资小盘股要注意哪些方面?

股市是一个充溢时机和危险的当地&#xff0c;不同出资者有不同的偏好&#xff0c;有的人喜爱追逐大盘蓝筹股&#xff0c;有的人则钟情于小盘股。那么小盘股的长处&#xff1f;出资小盘股要注意哪些方面&#xff1f;恒运资本也为我们准备了相关内容&#xff0c;以供参考。 小盘股…

vue+springboot+mysql的垃圾分类管理系统

1、引言 设计结课作业,课程设计无处下手&#xff0c;网页要求的总数量太多&#xff1f;没有合适的模板&#xff1f;数据库&#xff0c;java&#xff0c;python&#xff0c;vue&#xff0c;html作业复杂工程量过大&#xff1f;毕设毫无头绪等等一系列问题。你想要解决的问题&am…

六、Hive数据仓库应用之Hive事务(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7)

Hive远程模式部署参考&#xff1a; 一、Hive数据仓库应用之Hive部署&#xff08;超详细步骤指导操作&#xff0c;WIN10&#xff0c;VMware Workstation 15.5 PRO&#xff0c;CentOS-6.7&#xff09; 文章目录 一、事务的设计与特点1、事务的特点2、事务的设计3、事务的实现 二、…

【LeetCode刷题笔记】动态规划 — 70.爬楼梯

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

Python不是一种伟大的编程语言?

作为一门简洁易用、生态蓬勃且具有高泛用性的编程语言&#xff0c;Python一直以来都被不少人称作“编程语言中的瑞士军刀”。 尤其随着近来AI热潮席卷全球&#xff0c;Python在编程语言圈中的地位也随之水涨船高&#xff0c;甚至一度被视作AI专用语言或大数据专用语言。 然而…

Netty核心原理:一、基础入门-04:NettyServer字符串解码器

文章目录 一、前言介绍二、代码实现2.1 工程结构2.2 Netty服务端字符串解码器实现2.2.1 服务端处理器2.2.2 通道初始化2.2.3 netty服务端 2.3 单元测试 一、前言介绍 &#x1f4a1; 服务端接收数据后我们希望是一个字符串或者是一个对象类型,而不是字节码。 在 netty 中是否可以…