SpringBoot 快速开始 Dubbo RPC

文章目录

  • SpringBoot 快速开始 Dubbo RPC
    • 下载 Nacos
    • 项目启动
      • 项目的创建
        • 创建主项目
        • 接口定义服务的创建
        • Dubbo 服务提供者的创建
        • 服务的消费者创建
      • 添加依赖
        • 给 Provider、Consumer 添加依赖
      • 开始写代码
        • 定义接口
        • 在 Provider 中实现
        • 在 Consumer 里面使用
        • 创建启动类
      • 注册中心配置
      • 启动
    • 确认是否成功

SpringBoot 快速开始 Dubbo RPC

这里是用 Nacos 作为服务的注册与发现中心

下载 Nacos

这里请看我的上篇文章

nacos 启动成功如图:
在这里插入图片描述
只要启动了就可以了。

项目启动

这里创建项目分三个模块,一个interface(接口定义)、一个provider(服务的提供者)、一个consumer(服务的消费者)

项目的创建

创建主项目

步骤如下:
在这里插入图片描述
主工程创建好效果:
在这里插入图片描述

接口定义服务的创建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Dubbo 服务提供者的创建

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

服务的消费者创建

过程和上面一样,换个名字而已
在这里插入图片描述

添加依赖

给 Provider、Consumer 添加依赖

注意其中 dubbo 的依赖就好了
Provider 的 pom.xml 内容如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>DubboTeach</artifactId><groupId>com.xwhking</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>DubboProvider</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-boot.version>3.0.2</spring-boot.version></properties><dependencies><dependency><groupId>com.xwhking</groupId><artifactId>DubboInterface</artifactId><version>${parent.version}</version></dependency><!-- spring boot starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>${spring-boot.version}</version></dependency><!-- dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.3.0-beta.1</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-nacos-spring-boot-starter</artifactId><version>3.3.0-beta.1</version></dependency></dependencies></project>

Consumer 的 pom.xml 文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>DubboTeach</artifactId><groupId>com.xwhking</groupId><version>1.0-SNAPSHOT</version></parent><groupId>com.xwhking</groupId><artifactId>DubboConsumer</artifactId><version>0.0.1-SNAPSHOT</version><properties><java.version>17</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>3.0.2</spring-boot.version></properties><dependencies><dependency><groupId>com.xwhking</groupId><artifactId>DubboInterface</artifactId><version>${parent.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring-boot.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.3.0-beta.1</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-nacos-spring-boot-starter</artifactId><version>3.3.0-beta.1</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>17</source><target>17</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.xwhking.dubbo_consumer.DubboConsumerApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

开始写代码

定义接口

在 interface 项目中定义接口,然后再由 provider 进行实现,在依赖中我们引入了 interface 的包。
我们这里就简单定义一个 Hello 的接口.
在这里插入图片描述

代码如下:

package com.xwhking;public interface HelloService {String sayHello(String name);
}
在 Provider 中实现

接口在微服务中一般是不太会变了的,所以我们要在服务的提供者中去实现它。
我们就简单实现一下。

这里因为中途出现问题,我把名字进行了一个更换,其他没有影响

一定要注意这里进行使用 HelloService 前,对Interface 包进行maven 的install 操作

在这里插入图片描述

package com.xwhking.dubbo_provider;import com.xwhking.dubbo_interface.HelloService;
import org.apache.dubbo.config.annotation.DubboService;@DubboService
public class HelloServiceImpl implements HelloService {@Overridepublic String sayHello(String name) {return "Hello " + name + "\n This is Dubbo";}
}
在 Consumer 里面使用

通过注解 @DubboReference 得到服务
具体如下
在这里插入图片描述

package com.xwhking.dubbo_consumer;import com.xwhking.dubbo_interface.HelloService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/test")
public class TestController {@DubboReferenceprivate HelloService helloService;@GetMapping("/hello")public String hello(String name) {String result = helloService.sayHello(name);return result;}
}
创建启动类

Consumer 启动类

package com.xwhking.dubbo_consumer;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@EnableDubbo
public class DubboConsumerApplication {public static void main(String[] args) {SpringApplication.run(DubboConsumerApplication.class, args);}
}

Privider 启动类
在这里插入图片描述

package com.xwhking.dubbo_provider;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@EnableDubbo
public class DubboProviderApplication {public static void main(String[] args) {SpringApplication.run(DubboProviderApplication.class, args);}}

注册中心配置

在 Provider 和 Consumer 的项目中的resource 目录下添加 application.yml 文件进行注册中心的配置

dubbo:application:name: DubboTeachProviderprotocol:name: dubboport: -1registry:address: nacos://localhost:8848
server:port: 8080
dubbo:application:name: DubboTeachConsumerprotocol:name: dubboport: -1registry:address: nacos://localhost:8848

启动

首先要启动的是 Provider
在这里插入图片描述

然后再启动 Consumer
在这里插入图片描述

确认是否成功

在网站访问:localhost:8080/test/hello?name=xwhking
在这里插入图片描述
进行调试可以清楚的看到我们调用成功了
在这里插入图片描述
这就是一次简单的 Dubbo RPC 调用尝试

代码仓库,如果对你有帮助的话欢迎点个小小的 Star ✨
参考:

  1. https://dubbo-next.staged.apache.org/zh-cn/overview/mannual/java-sdk/quick-start/spring-boot/#1-%E5%90%AF%E5%8A%A8%E6%B3%A8%E5%86%8C%E4%B8%AD%E5%BF%83
  2. https://dubbo-next.staged.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/nacos/
  3. https://dubbo-next.staged.apache.org/zh-cn/overview/mannual/java-sdk/tasks/develop/springboot/

大家好,我是xwhking,一名技术爱好者,目前正在全力学习 Java,前端也会一点,如果你有任何疑问请你评论,或者可以加我QQ(2837468248)说明来意!希望能够与你共同进步

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

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

相关文章

YOKOGAWA横河手操器维修hart通讯器YHC5150X-01

横河手操器设置注意事项&#xff1a;内藏指示计显示选择与单位设置 有如下 5 种显示模式及单位设置百分比显示、用户设置显示、用户设置和百分比交替显示、输入压力显示、输入压力和百分比交替显示。即应用在当没有输入时操作要求输出为20mA引压方向设置右/左侧高压&#xff0c…

Docker容器:数据管理与镜像的创建(主要基于Dockerfile)

目录 一、Docker 数据管理 1、数据卷&#xff08;Data Volumes&#xff09; 2、数据卷容器&#xff08;DataVolumes Containers&#xff09; 二、容器互联&#xff08;使用centos镜像&#xff09; 三、Docker 镜像的创建 1、基于现有镜像创建 2、基于本地模板创建 3、基…

QT Windows 实现调用Windows API获取ARP 表

简介 使用ping方式获取网络可访问或者存在的设备发现部分会无法ping通但实际网络上存在此设备&#xff0c; 但使用arp -a却可以显示出来&#xff0c; 所以现在使用windows API的方式获取arp 表。 实现 参考Windows提供的示例转化成Qt Qt .pro LIBS -liphlpapiLIBS -lws2_32…

R-Tree: 原理及实现代码

文章目录 R-Tree: 原理及实现代码1. R-Tree 原理1.1 R-Tree 概述1.2 R-Tree 结构1.3 R-Tree 插入与查询 2. R-Tree 实现代码示例&#xff08;Python&#xff09;结语 R-Tree: 原理及实现代码 R-Tree 是一种用于管理多维空间数据的数据结构&#xff0c;常用于数据库系统和地理信…

【CANoe示例分析】TCP Chat(CAPL) with TLS encription

1、工程路径 C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 15.3.89\Ethernet\Simulation\TLSSimChat 在CANoe软件上也可以打开此工程:File|Help|Sample Configurations|Ethernet - Simulation of Ethernet ECUs|Basic AUTOSAR Adaptive(SOA) 2、示例目…

面试题:斐波那契数列

题目描述&#xff1a; 写一个函数,输入n,求斐波那契数列的第n项.斐波那契数列定义如下: F(0) 0 F(1) 1 F(N) F(N - 1) F(N - 2), 其中 N > 1. 解题方法&#xff1a; 算法1: 利用递归实现,这个方法效率有严重问题,时间复杂度为O(2^n) long long Fibon(int n) {if (…

微软如何打造数字零售力航母系列科普03 - Mendix是谁?作为致力于企业低代码服务平台的领头羊,它解决了哪些问题?

一、Mendix 成立的背景 Mendix的成立是为了解决软件开发中最大的问题&#xff1a;业务和IT之间的脱节。这一挑战在各个行业和地区都很普遍&#xff0c;很简单&#xff1a;业务需求通常被描述为IT无法正确解释并转化为软件。业务和IT之间缺乏协作的原因是传统的代码将开发过程限…

WPF —— MVVM 指令执行不同的任务实例

标签页 设置两个按钮&#xff0c; <Button Content"修改状态" Width"100" Height"40" Background"red"Click"Button_Click"></Button><Button Content"测试"Width"100"Height"40&…

如何让用户听话?

​福格教授&#xff08;斯坦福大学行为设计实验室创始人&#xff09;通过深入研究人类行为20年&#xff0c;2007年用自己的名子命名&#xff0c;提出了一个行为模型&#xff1a;福格行为模型。 模型表明&#xff1a;人的行为发生&#xff0c;要有做出行为的动机和完成行为的能…

web安全---xss漏洞/beef-xss基本使用

what xss漏洞----跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;&#xff0c;攻击者在网页中注入恶意脚本代码&#xff0c;使受害者在浏览器中运行该脚本&#xff0c;从而达到攻击目的。 分类 反射型---最常见&#xff0c;最广泛 用户将带有恶意代码的url打开&a…

二叉树理论和题目

二叉树的种类 在我们解题过程中二叉树有两种主要的形&#xff1a;满二叉树和完全二叉树。 满二叉树 满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为 2 的结点&#xff0c;并且度为 0 的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 这棵二叉树为满二叉树…

如何使用SOCKS5代理?

SOCKS5 是一个代理协议&#xff0c;在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色&#xff0c;使得内部网中的前端机器变得能够访问Internet网中的服务器&#xff0c;或者使通讯更加安全。那么&#xff0c;SOCKS5代理该如何使用呢&#xff1f; 首先需要获取…

Matlab实现CNN-LSTM模型,对一维时序信号进行分类

1、利用Matlab2021b训练CNN-LSTM模型&#xff0c;对采集的一维时序信号进行分类二分类或多分类 2、CNN-LSTM时序信号多分类执行结果截图 训练进度&#xff1a; 网络分析&#xff1a; 指标变化趋势&#xff1a; 代码下载方式&#xff08;代码含数据集与模型构建&#xff0c;附…

BERT一个蛋白质-季军-英特尔创新大师杯冷冻电镜蛋白质结构建模大赛-paipai

关联比赛: “创新大师杯”冷冻电镜蛋白质结构建模大赛 解决方案 团队介绍 paipai队、取自 PAIN AI&#xff0c;核心成员如我本人IvanaXu(IvanaXu GitHub)&#xff0c;从事于金融科技业&#xff0c;面向银行信用贷款的风控、运营场景。但我们团队先后打过很多比赛&#xf…

社交媒体数据恢复:Rocket Chat

Rocket.Chat 数据恢复方法 1. 数据备份 在探讨数据恢复方法之前&#xff0c;重要的是要了解Rocket.Chat有一个自动备份功能。这个备份功能可以将你的数据定期备份到/var/snap/rocketchat-server//backup.tgz1 。如果你的Rocket.Chat服务器已经启用了这个自动备份功能&#xf…

如何最大程度使用AWS?

随着云计算技术的不断发展&#xff0c;AWS已经成为众多企业的首选&#xff0c;为其提供了强大的基础设施和服务。那么如何最大程度地、灵活地利用AWS&#xff0c;成为许多企业专注的焦点。九河云作为AWS的合作伙伴&#xff0c;为读者们提供一些技巧和策略&#xff0c;帮助读者充…

延时任务通知服务的设计及实现(四)-- webhook执行任务

一、本文内容 本文将简单梳理下&#xff0c;延迟任务通知服务的webhook模块实现。 这里的回调接口&#xff0c;请求方式约定为post&#xff0c;参数通过body传递参数。 实现比较简单&#xff0c;先梳理其流程图&#xff0c;再是简单的代码实现。 二、流程图 三、异步执行任…

【项目构建】04:动态库与静态库制作

OVERVIEW 1.编译动态链接库&#xff08;1&#xff09;编译动态库&#xff08;2&#xff09;链接动态库&#xff08;3&#xff09;运行时使用动态库 2.编译静态链接库&#xff08;1&#xff09;编译静态库&#xff08;2&#xff09;链接静态库&#xff08;3&#xff09;运行时使…

【链表——数据结构】

文章目录 1.单链表1.定义2.基本操作2.1.不带头结点2.2后插2.3前插2.4删除2.5按位查找2.6按值查找2.7求单链表长度2.8 建表 2.双链表1.初始化2.插入(后插)3.删除(后删)4.遍历 3.循环链表1.循环单链表2.循环双链表3.代码问题 4.静态链表1.简述基本操作的实现1.初始化3.删除某个结…

学习Rust的第21天:mini_grep第1部分

在本文中&#xff0c;我们开始用 Rust 构建一个类似 grep 的程序。我们涵盖了读取命令行参数、读取文件内容&#xff0c;并开始通过将程序构造为函数和结构体来重构程序。 Introduction 介绍 Running the following command will create a new project 运行以下命令将创建一个新…