SpringCloud Alibaba集成Dubbo实现远程服务间调用
SpringCloud Alibaba集成Dubbo实现远程服务间调用
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2X4hYOm7-1676772812773)(SpringCloud%20Alibaba%E9%9B%86%E6%88%90Dubbo%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E9%97%B4%E8%B0%83%E7%94%A8.image/image-20230218212440924.png)]](https://img-blog.csdnimg.cn/1f06b2ae962e40f891baaeefe82d2197.png)
工程创建
一、创建springBoot分模块项目,父工程:springcloud-alibaba以及子模块product-dubbo-provider、order-dubbo-consumer等
项目基本结构图如下所示:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TVJdb83Z-1676772812774)(SpringCloud%20Alibaba%E9%9B%86%E6%88%90Dubbo%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E9%97%B4%E8%B0%83%E7%94%A8.image/image-20230218212812556.png)]](https://img-blog.csdnimg.cn/4895230faabb47c09d86daceba62a134.png)
二、依赖引入
在以上两个子模块的pom.xml文件中分别引入如下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId></dependency><!--模板引擎依赖,即使不需要生成模板,也需要引入--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.2</version></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--Spring Cloud Alibaba--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>0.2.2.RELEASE</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId></dependency><!--Dubbo--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><!--对api的依赖--><dependency><groupId>com.springcloud.xxkfz</groupId><artifactId>dubbo-base</artifactId><version>1.0-SNAPSHOT</version></dependency>
服务生产者
一、在编写生产者服务代码之前,我们首先在dubbo-base定义一个RPC接口queryList供消费者调用。那么这个接口在哪里去实现呢?
package com.simplememory.xxkfz.service;import java.util.List;/*** @author 公众号: SimpleMemory* @version 1.0.0* @ClassName ConsumerImpl.java* @Description TODO* @createTime 2023年02月18日 20:41:00*/
public interface IProviderService {List<String> queryList();
}
二、在product-dubbo-provider模块中创建实现类ProviderServiceImpl.java实现dubbo-base声明的queryList接口。其中@Service是Dubbo提供的注解,表示当前服务会发布成一个远程服务,不要和Spring提供的搞混哦。
package com.simplememory.xxkfz.service;import org.apache.dubbo.config.annotation.Service;import java.util.Arrays;
import java.util.List;/*** @author 公众号: SimpleMemory* @version 1.0.0* @ClassName ProviderServiceImpl.java* @Description TODO* @createTime 2023年02月18日 20:44:00*/
@Service
public class ProviderServiceImpl implements IProviderService {@Overridepublic List<String> queryList() {return Arrays.asList("欢迎关注小小开发者公众号","私信回复【源代码】可获取代码工程资源哦");}
}
三、在配置文件application.yml中配置数据源信息、dubbo相关配置等;完整配置信息如下:
# 数据源配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/xk_cloud?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=GMT%2B8username: rootpassword: rootapplication:name: provider-servicecloud:nacos:discovery:server-addr: 127.0.0.1:8848
server:port: 8050
# dubbo相关配置
dubbo:scan:# dubbo服务实现类的扫描基准包路径base-packages: com.simplememory.xxkfz.service#Dubbo服务暴露的协议配置protocol:name: dubboport: 1
服务消费者
编写基本的相关代码结构
一、创建ConsumerController.java,提供查询列表数据的接口。
package com.simplememory.xxkfz.controller;import com.simplememory.xxkfz.service.ConsumerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @author 公众号: SimpleMemory* @version 1.0.0* @ClassName ConsumerImpl.java* @Description TODO* @createTime 2023年02月18日 20:41:00*/
@RestController
@RequestMapping("/dubbo/consumer")
public class ConsumerController {@Autowiredprivate ConsumerService consumerService;@GetMappingpublic List<String> list() {return consumerService.list();}
}
二、创建ConsumerService.java
package com.simplememory.xxkfz.service;import java.util.List;/*** @author 公众号: SimpleMemory* @version 1.0.0* @ClassName ConsumerService.java* @Description TODO* @createTime 2023年02月18日 20:41:00*/
public interface ConsumerService {List<String> list();}
三、创建实现类ConsumerServiceImpl.java,并使用使用@Reference注解注入相应的service,就可以像调用本地jar包一样,调用远程服务。
package com.simplememory.xxkfz.service.impl;import com.simplememory.xxkfz.service.ConsumerService;
import com.simplememory.xxkfz.service.IProviderService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;import java.util.List;/*** @author 公众号: SimpleMemory* @version 1.0.0* @ClassName ConsumerImpl.java* @Description TODO* @createTime 2023年02月18日 20:41:00*/
@Service
public class ConsumerServiceImpl implements ConsumerService {@Referenceprivate IProviderService providerService;@Overridepublic List<String> list() {return providerService.queryList();}
}
四、在配置文件application.yml中配置基本信息,主要配置了要订阅的服务名;完整配置信息如下:
# 数据源配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/xk_cloud?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=GMT%2B8username: rootpassword: rootapplication:name: consumer-servicecloud:nacos:discovery:server-addr: 127.0.0.1:8848
server:port: 8020
#dubbo配置
#要订阅的服务名,多个用,隔开
dubbo:cloud:subscribed-services: provider-service
测试
-
启动nacos注册中心。
-
nacos注册中心启动完成后,依次启动
DubboProviderMainApplication,DubboConsumerMainApplication生产者、消费者服务,可以看到Nacos服务列表里有两个服务。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tyFB7F3G-1676772812775)(SpringCloud%20Alibaba%E9%9B%86%E6%88%90Dubbo%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E9%97%B4%E8%B0%83%E7%94%A8.image/image-20230218215513847.png)]](https://img-blog.csdnimg.cn/fafc76538d1346b3a946fc41c20ab93b.png)
- 在浏览器地址栏访问:http://127.0.0.1:8020/dubbo/consumer


相关文章:
SpringCloud Alibaba集成Dubbo实现远程服务间调用
SpringCloud Alibaba集成Dubbo实现远程服务间调用 工程创建 一、创建springBoot分模块项目,父工程:springcloud-alibaba以及子模块product-dubbo-provider、order-dubbo-consumer等 项目基本结构图如下所示: 二、依赖引入 在以上两个子模块…...
网络编程(一)
网络编程 文章目录网络编程前置概念1- 字节序高低地址与高低字节高低地址:高低字节字节序大端小端例子代码判断当前机器是大端还是小端为何要有字节序字节序转换函数需要字节序转换的时机例子一例子二2- IP地址转换函数早期(不用管)举例现在与字节序转换函数相比:**…...
PVE硬件直通之强制IOMMU分组
文章目录检查是否直接支持IOMMU分组配置IOMMU分组不直接支持的需要更新内核参考检查是否直接支持IOMMU分组 下面 以SATA控制器为例,看pci设备是否可以直接支持IOMMU分组 /* 打印pci设备详细信息*/ lspci -vv /* 找到SATA controller 段落*/ 16:00.1 SATA controll…...
深入讲解Kubernetes架构-node
Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行你的工作负载。 节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。 每个节点包含运行 Pod 所需的服务; 这些节点由控制面负责管理。通常集群中会有若干个节点…...
XSS-labs-master
XSS 经典14关这边先说一下常用的弹窗手法<script>alert(1)</script> <script>confirm(1)</script> <script>alert(1)</script> <script>alert(/1/zyl)</script> <script>alert(document.cookie)</script> <scr…...
「可信计算」助力TLS 传输更安全
序言背景(Satuation):TLS 是 TCP/IP 上的传输层安全协议,保护着数以亿万级的数据安全,我们在浏览器中输入的 https,就是受到 TLS 保护的。冲突(complication):从可信计算…...
链表学习基础
链表 通过指针串联在一起的线性结构,每个节点由数据域和指针域两部分组成。链表节点在内存中的存储通常不是连续的,各节点通过指针连接在一起,其内存分布大致如下图所示。 定义 单链表 struct ListNode {// DATATYPE 可以是任意存放数据的…...
springboot整合阿里云oss文件服务器
springboot整合阿里云oss文件服务器一、申请Bucket二、 获取AccessKey ID、AccessKey Secret三、 springboot整合3.1 在application.yml 配置参数3.2 oss需要的pom3.3 配置 oss配置类3.4 oss的controller类3.5 oss的service类以及impl一、申请Bucket 进入该网址对象存储oss述 …...
数据分析:旅游景点销售门票和消费情况分析
数据分析:旅游景点销售门票和消费情况分析 文章目录数据分析:旅游景点销售门票和消费情况分析一、前言二、数据准备三、分析数据四、用户购买门票数量分析五、用户复购分析六、用户回购分析七、占比分析1.每个月分层用户占比情况。2.每月不同用户的占比3…...
Android问题解决方案(一):Android 打空包后提示没有”android:exported“的属性设置
Android 打空包后提示没有”android:exported“的属性设置Android 打空包后提示没有”android:exported“的属性设置1、问题:2、文档3、参考链接:4、解决方案:Android 打空包后提示没有”android:exported“的属性设置 1、问题: …...
Portraiture2023最新版人像图像后期处理软件
2023全新发布Portraiture 4是专注于图像后期处理软件研发的 Imagenomic, LLC产品之一,在摄影爱好者中有点影响力。Portraiture可以将繁琐复杂的人像磨皮操作极致简化,不论是普通爱好者或专业后期处理人员,均能一键完成。凭借优秀的AI算法和多…...
链表OJ(七)删除有序链表中重复的元素-I -II
目录 删除有序链表中重复的元素-I 删除有序链表中重复的元素-II 删除有序链表中重复的元素-I 描述 删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次 例如: 给出的链表为1→1→21→1→2,返回1…...
C语言经典编程题100例(81~100)
目录81、习题7-7 字符串替换82、习题8-10 输出学生成绩83、习题8-2 在数组中查找指定元素84、习题8-3 数组循环右移85、题8-9 分类统计各类字符个数86、习题9-2 计算两个复数之积87、习题9-6 按等级统计学生成绩88、习题11-1 输出月份英文名89、习题11-2 查找星期90、练习10-1 …...
ChIP-seq 分析:数据质控实操(5)
1. 数据 今天将继续回顾我们在上一次中研究的 Myc ChIPseq。这包括用于 MEL 和 Ch12 细胞系的 Myc ChIPseq 及其输入对照。 可在此处[1]找到 MEL 细胞系中 Myc ChIPseq 的信息和文件可在此处[2]找到 Ch12 细胞系中 Myc ChIPseq 的信息和文件可以在此处[3]找到 MEL 细胞系的输入…...
java黑马头条 day5自媒体文章审核 敏感词过滤算法DFA 集成RabbitMQ实现自动审核
自动审核流程介绍 做为内容类产品,内容安全非常重要,所以需要进行对自媒体用户发布的文章进行审核以后才能到app端展示给用户。2 WmNews 中status 代表自媒体文章的状态 status字段:0 草稿 1 待审核 2 审核失败 3 人工审核 4 人工审核通过 …...
python--matplotlib(1)
前言 Matplotlib画图工具的官网地址是 http://matplotlib.org/ Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示。 正文 1.arange函数 arange函数需要三个参数,分别为起始点、终止…...
华为OD机试题 - 获取最大软件版本号(JavaScript)
最近更新的博客 华为OD机试题 - 任务总执行时长(JavaScript) 华为OD机试题 - 开放日活动(JavaScript) 华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试题 - 最小步骤数(JavaScript) 华为OD机试题 - 任务混部(JavaScript) 华为OD机试题 - N 进…...
字符函数和字符串函数
字符串以\0为结束标志,strlen函数返回的是’\0’前的字符个数,不包括\0参数的指向的字符串必须是\0为结束标志,不然结果不确定函数的返回类型是size_t(无符号的整型)strlen的使用#include <stdio.h> #include <string.h&…...
【猜名次】-C语言-题解
1. 描述: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二&#x…...
对 equals() 和 hashCode() 的理解?
在 java.lang.Object 类中有两个非常重要的方法: public native int hashCode(); public boolean equals(Object obj) {return (this obj); }Object 类是类继承结构的基础,是每一个类的父类,都实现了Object 类中定义的方法。 equals()方法…...
Shopee风控算法逆向 - Unidbg补环境实战解析
1. Shopee风控算法逆向分析入门 最近在研究Shopee的风控机制时,我发现他们的Native层加密算法特别有意思。作为一个常年和移动安全打交道的开发者,今天想和大家分享下使用Unidbg模拟执行Shopee风控算法的完整过程。 Shopee作为东南亚头部电商平台&…...
Vue3实战:5分钟搞定全局WebSocket封装(含心跳检测与断线重连)
Vue3全局WebSocket封装实战:心跳检测与断线重连的最佳实践 WebSocket在现代Web应用中扮演着越来越重要的角色,特别是在需要实时数据更新的场景中。Vue3作为当前最流行的前端框架之一,与WebSocket的结合能够为开发者提供强大的实时交互能力。本…...
Qwen2.5-VL视觉定位模型优化升级:GPU加速、批量处理、提示词技巧
Qwen2.5-VL视觉定位模型优化升级:GPU加速、批量处理、提示词技巧 1. 视觉定位技术概述 视觉定位(Visual Grounding)是计算机视觉领域的一项关键技术,它能够根据自然语言描述在图像中精确定位目标对象。这项技术在智能相册管理、…...
用Python实战N皇后:从回溯的O(n!)到启发式修补的秒解,附完整性能对比代码
用Python实战N皇后:从回溯的O(n!)到启发式修补的秒解,附完整性能对比代码 N皇后问题作为经典的算法挑战,一直是检验编程技巧和算法思维的试金石。当棋盘规模n增大时,不同算法的性能差异会呈现指数级分化——回溯法在n15时可能需要…...
电容选型实战指南
电容选型这件事,比电阻要复杂得多。电阻选错了,大多数情况是“烧了”或“不准了”;电容选错了,可能直接导致系统复位、EMI超标、寿命骤减、甚至爆炸。电容是电路中最“敏感”的元件之一,它的选型需要在电气性能、温度特性、寿命、成本、体积之间反复权衡。 一、 选型前的四…...
LM2596 DC-DC开关电源芯片的实战应用与优化设计
1. LM2596芯片基础与工作原理 LM2596这颗DC-DC降压芯片可以说是电子工程师的老朋友了,从工业设备到消费电子产品都能见到它的身影。我第一次用它是在大学做智能车项目时,需要把12V电池电压降到5V给单片机供电。当时对比了几款芯片后选择了LM2596…...
不会写代码?用TRAE+AI零代码搞定你的第一个Obsidian插件(2025最新版)
不会写代码?用TRAEAI零代码搞定你的第一个Obsidian插件(2025最新版) 你是否曾经在使用Obsidian时,发现现有的插件无法完全满足你的个性化需求?或许你想要一个能够自动整理笔记标签的工具,或者一个能根据内…...
别再只用CPU了!手把手教你用CUDA C++写第一个GPU并行程序(附完整代码)
从零开始:用CUDA C解锁GPU并行计算的实战指南 如果你是一名C开发者,可能已经习惯了在CPU上编写串行代码。但当你面对海量数据计算时,是否曾感到CPU力不从心?现代GPU拥有数千个计算核心,能够同时执行大量线程࿰…...
基于LMS算法的16位SAR ADC中电容失配数字校正技术研究:Split ADC原理、MAT...
基于lms电容失配数字校正的16bit sar adc的split adc MATLAB可对比校正前后精度,原理基于国外论文,不支持。 适合进阶学习,想要对sar adc数字校正建模有了解的同学可以。SAR ADC设计里最头疼的就是电容失配问题。当工艺跑到16bit精度时&#…...
地热模拟实战:当岩石遇上高温水流
Comsol地热开采-热流固耦合(两个模型,均质和裂隙岩体)附赠参考文献。地热开采就像给地球做"针灸",要在不透水的花岗岩里造出人工热储层。最近用COMSOL折腾了两个典型模型:人畜无害的均质岩体和自带裂隙的破碎…...
