当前位置: 首页 > news >正文

springboot集成dubbo实现微服务系统

目录

1.说明

2.示例

3.总结


1.说明

dubbo官网:https://cn.dubbo.apache.org/zh-cn/

Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,支持多种语言,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

2.示例

实现说明:

        创建一个空项目,在空项目中创建3个模块,分别定义接口工程,生产者工程及消费者工程。并在生产者工程及消费者工程中引入接口工程。

        接口工程存放表的实体类及服务接口。

        生产者工程提供服务接口的实现。

        消费者工程调用服务接口。

实现步骤:

①引入dubbo依赖

        <!-- Dubbo Spring Boot Starter --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.8</version></dependency><dependency><!--zookerper版本一定要匹配! --><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-zookeeper</artifactId><version>2.7.8</version></dependency>

 ②在接口工程中创建接口

package com.example.service;public interface PrivoderService {String getInfo();
}

③在生产者工程中实现接口,并进行dubbo的配置

接口实现:使用dbboservice注解,将服务的实现暴露给dubbo

package com.example.provider.service.impl;import com.example.service.PrivoderService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;/*** @Author linaibo* @Date 2023/11/18 15:28* @Version 1.0*/
@Service
@DubboService
public class PrividerServiceImpl implements PrivoderService {@Overridepublic String getInfo() {return "执行成功";}
}

 配置文件:

server:port: 8881
dubbo:application:name: provider-service //dubbo的应用名registry:protocol: zookeeper //使用zookeeper作为服务的注册中心address: 127.0.0.1:2181 //zookeeper地址protocol:name: dubbo //使用dubbo协议port: 20885consumer:timeout: 60000 //调用接口的超时时间check: false //启动时不校验消费者是否已启动
spring:datasource:url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: 123456
mybatis:mapper-locations: classpath*:mapper/*Mapper.xmltype-aliases-package: com.**.domain

启动类配置:添加@EnableDubbo,用于将dubbo相关的配置bean加载到spring容器

package com.example.provider;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @Author linaibo* @Date 2023/11/18 15:32* @Version 1.0*/
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}
}

 ④生产者工程中调用接口

调用:使用DubboReference指定调用的服务

package com.example.consumer.service.impl;import com.example.consumer.service.ConsumerService;
import com.example.domain.AjaxResult;
import com.example.service.ISysConfigService;
import com.example.service.PrivoderService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;import static com.example.domain.AjaxResult.success;/*** @Author linaibo* @Date 2023/11/18 15:56* @Version 1.0*/
@Service
public class ConsumerServiceImpl implements ConsumerService {@DubboReferenceprivate PrivoderService privoderService;@DubboReferenceprivate ISysConfigService sysConfigService;@Overridepublic String getInfo() {String info = privoderService.getInfo();return info;}@Overridepublic AjaxResult getConfig(Long configId) {return success(sysConfigService.selectConfigById(configId));}
}

配置文件及启动类配置和生产者工程一致

启动zookeeper服务及生产者工程及消费者工程,就可以进行服务的调用。

3.总结

可以通过dubbo-admin进行服务的管理及查看。

dubbo.consumer.timeout:调用超时时间(毫秒),默认为 1000。debug模式下会导致调用失败,所以需要调大。

dubbo.consumer.check:为true时,开启服务启动时检查依赖的服务是否可用,默认为 true。

也就是说,生产者没有启动时,消费者无法启动,需要设置为false

参照:SpringBoot整合dubbo+zooker搭建分布式服务(超详细)_springboot+dubbo分布式项目-CSDN博客

SpringBoot项目集成Dubbo_springboot集成dubbo-CSDN博客

相关文章:

springboot集成dubbo实现微服务系统

目录 1.说明 2.示例 3.总结 1.说明 dubbo官网&#xff1a;https://cn.dubbo.apache.org/zh-cn/ Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题&#xff0c;支持多种语言&#xff0c;官方提供了 Java、Golang 等多语言 SDK 实…...

idea使用gitee基本操作流程

1.首先&#xff0c;每次要写代码前&#xff0c;先切换到自己负责的分支 点击签出。 然后拉取一次远程master分支&#xff0c;保证得到的是最新的代码。 写完代码后&#xff0c;在左侧栏有提交按钮。 点击后&#xff0c;选择更新的文件&#xff0c;输入描述内容&#xff08;必填…...

Docker容器里面有什么东西?

2024年5月15日&#xff0c;周三下午 Docker 容器内部包含了一个运行的应用程序及其依赖环境。当你创建一个 Docker 容器时&#xff0c;你可以指定容器应该运行哪个镜像。这个镜像是由一系列层组成的&#xff0c;每一层包含了一些文件和目录。当你运行这个镜像时&#xff0c;Doc…...

vue基础+高级用法

一、vue基础用法 mvvm的了解/认知 语义化模板mvc - model view controllermvvm - model view view-model vue是如何利用mvvm思想进行开发 双向数据绑定 花括号&#xff0c;构建了数据与视图的双向绑定通过视图绑定事件&#xff0c;来处理数据 生命周期-vue示例 建立&…...

鸿蒙应用布局ArkUI【基础运用案例】

布局基础运用案例 平级导航的复合网格视图 平级导航的复合网格视图常出现在同时展示多种不同内容的界面。 例如&#xff0c;市场类应用作为典型的平级导航&#xff0c;其首页不同板块采用了不同布局能力。 标题栏与搜索栏&#xff1a;因元素单一、位置固定在顶部&#xff0c…...

GD32F103RCT6/GD32F303RCT6-UCOSIII底层移植(1)工程建立

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布&#xff1a; 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转&#xff1a; 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…...

在本地设备上配置 Git 忽略特定文件

在本地设备上配置 Git 忽略特定文件 在日常的 Git 使用中&#xff0c;有时我们希望某些文件只在本地设备上被忽略&#xff0c;而不影响其他团队成员或设备。这篇博客将介绍如何在特定设备上配置 Git 忽略规则&#xff0c;使得一个文件不会被提交。 背景 通常&#xff0c;我们…...

cin.ignore()函数和stoll函数

cin.ignore()函数 cin.ignore() 是一个非常实用的函数&#xff0c;主要用于控制输入流 cin 的行为 cin.ignore(int n 1, char delimiter EOF); n&#xff1a;一个整数参数&#xff0c;表示要忽略的字符数量。默认值是1&#xff0c;意味着只忽略下一个字符。delimiter&#x…...

win11快速安装mysql数据库系统

win11快速安装mysql数据库系统 1、下载 1.1 打开官网 1.2 向下滚动页面 1.3 进入下载选项 1.4 下载8.0.4 LTS 1.5 开始下载 1.6 下载中 2、解压 大家注意&#xff0c;此时解压后目录是没有data目录的。 3、数据库初始化 3.1 管理员身份打开CMD 开始菜单上&#xff0c;输入…...

C# WinForm —— 21 RichTextBox 使用

1. 加载文件到控件中 加载文件时&#xff0c;要设置文件的路径和类型RichTextBoxStreamType&#xff0c;文件类型包含&#xff1a; RichText 0&#xff1a;富文本格式&#xff08;RTF&#xff09;流PlainText 1&#xff1a;纯文本流对象链接和嵌入&#xff08;OLE&#xff…...

【数据结构】堆(超详细)

文章目录 前言堆的概念及结构堆的实现堆的向下调整算法&#xff08;建小堆为例&#xff09;堆的向上调整算法&#xff08;建小堆为例&#xff09;堆的初始化销毁堆堆的插入堆的删除(规定删堆顶的数据)取堆顶元素判断堆是否为空获取堆的个数 完整代码&#xff08;包括测试代码&a…...

常用正则 JS 持续更新

应用版本号正则验证 正则判断版本号&#xff08;如&#xff1a;1.2.3 或 1.2.3.4&#xff09;&#xff0c;不允许出现 0.x.x&#xff1b;01.x.x; x.0x.x; x.00.x&#xff1b; x.x.00; x.x.0x/ ^ ([ 1-9 ] \d | [ 1-9 ])( . ([ 1-9 ] \d | \d )) {2,3} $ /0-10 保留一位小数的数…...

YOLO v6 iou_loss dfl_loss一直为0

Question img record infomation path is:…/mydata/images.train_cache.json Train: Final numbers of valid images: 1248/ labels: 1248. 0.1s for dataset initialization. img record infomation path is:…/mydata/images.val_cache.json Convert to COCO format 100%|█…...

FreeRTOS【4】线程挂起和恢复

1.开发背景 基于上一篇指引&#xff0c;成功创建并启动线程后&#xff0c;线程已经开始运行了&#xff0c;但是有时我们需要线程暂停运行&#xff0c;例如某个线程是控制 LED 闪灯的&#xff0c;如果现在需要让 LED 停止工作&#xff0c;单纯的关闭 LED 是没用的&#xff0c;因…...

CPU占用率过高排查

CPU占用率高是设备本身的一种现象&#xff0c;直观表现为display cpu-usage命令查询结果中整机CPU占用率“CPU usage”偏高&#xff0c;如超过70%。在网络运行中CPU高常常会导致其他业务异常&#xff0c;如BGP震荡、VRRP频繁切换、甚至设备无法登录。 通常&#xff0c;整机CPU占…...

关于 vs2019 c++20 规范里的 STL 库里模板 decay_t<T>

&#xff08;1&#xff09; 这个模板&#xff0c;在库代码里非常常见。 decay 英文是“衰弱&#xff0c;消减” 的意思&#xff0c;大概能感觉到就是要简化模板参数 T 的类型&#xff0c;去掉其上的修饰符。因为常用且复杂&#xff0c;故单独列出其源码和注释。先举例其应用场景…...

android C++打印堆栈

Android在Java层打印堆栈比较方便&#xff0c;代码如下&#xff1a; try {throw new Exception("Debug xxx call stack"); }catch(Exception e) {e.printStackTrace(); }但是在C模块中能打印调用堆栈吗&#xff1f;怎么打印调用栈呢&#xff1f; 答案是肯定的&…...

MySQL Undo Log、Redo Log、bin Log

Undo Log 回滚日志&#xff0c;用于将数据回滚到之前的状态。 MySQL在进行数据的增、删、改时&#xff0c;会将数据写入到Undo Log日志中。 对于Undo Log存在着insert和update两种类型的数据。插入语句对应的是insert类型&#xff0c;修改、删除语句对应的是update类型。 U…...

vld.ini配置文件说明

vld.ini配置文件说明 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; Visual Leak Detector - 初始化/配置文件 ;; 版权所有 (c) 2005-2017 VLD团队 ;; ;; 本库是自由软件&#xff1b;你可以在自由软件基金会发布的GNU宽通用公共…...

NSS【web】刷题

[SWPUCTF 2021 新生赛]jicao 类型&#xff1a;PHP、代码审计、RCE 主要知识点&#xff1a;json_decode()函数 json_decode()&#xff1a;对JSON字符串解码&#xff0c;转换为php变量 用法&#xff1a; <?php $json {"ctf":"web","question"…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

算术操作符与类型转换:从基础到精通

目录 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符&#xff1a;、-、*、/、% 赋值操作符&#xff1a;和复合赋值 单⽬操作符&#xff1a;、--、、- 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

boost::filesystem::path文件路径使用详解和示例

boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类&#xff0c;封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解&#xff0c;包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...

CppCon 2015 学习:Simple, Extensible Pattern Matching in C++14

什么是 Pattern Matching&#xff08;模式匹配&#xff09; ❝ 模式匹配就是一种“描述式”的写法&#xff0c;不需要你手动判断、提取数据&#xff0c;而是直接描述你希望的数据结构是什么样子&#xff0c;系统自动判断并提取。❞ 你给的定义拆解&#xff1a; ✴ Instead of …...

CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found

Nginx1.24编译时&#xff0c;报LuaJIT2.x错误&#xff0c; configuring additional modules adding module in /www/server/nginx/src/ngx_devel_kit ngx_devel_kit was configured adding module in /www/server/nginx/src/lua_nginx_module checking for LuaJIT 2.x ... not…...