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、基…

如何调整 YOLOv3 的 NMS 参数以优化检测性能?

调整YOLOv3中的非极大值抑制&#xff08;Non-Maximum Suppression, NMS&#xff09;参数是优化检测性能的重要步骤。以下是一些调整NMS参数以优化YOLOv3检测性能的方法&#xff1a; 1. NMS阈值&#xff08;nms_thresh&#xff09;&#xff1a;这是决定何时抑制重叠框的关键参数…

图形制作

1 问题 如何利用python使程序有更丰富的外观。 2 方法 利用需要用到的绘图库turtle&#xff0c;先定义一个清屏的函数&#xff0c;在定义画线的函数&#xff0c;确定点的位置与线的颜色。 代码清单 1 from turtle import *def curvemove(): #这个函数是为了绘制形状上方的曲线 …

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

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

MongoDB的基础使用

1. 数据集操作 进入MongoDB控制台&#xff1a; # 展示数据库 show dbs# 创建并使用数据库 use 数据库名 如&#xff1a;use articledb# 删除数据库 db.dropDatabase()注&#xff1a; 数据库命名规则&#xff1a;数据库名可以是满足以下条件的任意UTF-8字符串。 不能是空字符串…

入侵渗透 抓取内网windows登陆密码及查看密文相关问题

1. windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff1f; 密文存在哪个文件下&#xff1f;该文件是否可以打开&#xff0c;并且查看到密文&#xff1f; 在Windows中&#xff0c;用户登录的密码不会以明文形式保存&#xff0c;会以加密形式存储。其默认使用NTLM或K…

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;常用于数据库系统和地理信…

拿来即用的响应式布局方法

文章导读&#xff1a;AI 辅助学习前端&#xff0c;包含入门、进阶、高级部分前端系列内容&#xff0c;当前是 HTML 的部分&#xff0c;瑶琴会持续更新&#xff0c;适合零基础的朋友&#xff0c;已有前端工作经验的可以不看&#xff0c;也可以当作基础知识回顾。 响应式设计是一…

【OceanBase诊断调优】—— 如何查看 Root Service 切换完成的时间点

本文详述如何查看 Root Service 切换完成的时间点。 在主 Root Service 节点上的 rootservice.log 搜索。 grep -i "START_SERVICE: full_service !!! start to work!!" rootservice.log[2023-12-08 14:35:58.927245] INFO [RS] ob_root_service.cpp:7111 [27152]…

ax200/ax201/ax210/ax211/ax411等intel网卡无法开启5G热点问题解决方案汇总

目录 故障原因解决方案windowslinuxkernel < 5.5kernel > 5.5方案1 修改linux内核模块代码&#xff08;iwlwifi内核模块&#xff09;&#xff0c;重新编译内核模块并重新导入方案2 修改hostapd代码 最后更新于2024.04.28 故障原因 根本原因是因为英特尔在内核中开启了LA…

算法模板——数据结构篇

声明&#xff1a;参考自acwing 目录 1.单链表 2.双链表 3.数组栈与队列 4.单调栈 1.单链表 int head,e[N],ne[N],idx;void init(){head-1;idx0; } void add_head(int x){ //head有实值e[idx]x,ne[idx]head,headidx; } void add(int k,int x){ e[idx]x,…

Python Flask Web教程:make_response的详细用法

在 Flask 中,make_response 是一个非常实用的函数,它可以用来构造响应对象。下面是 make_response 函数的详细用法: 基本用法 在 Flask 中,make_response 可以用来从返回的数据中创建一个响应对象。它接受几种不同类型的参数,并返回一个 Response 对象。 from flask im…

【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之间缺乏协作的原因是传统的代码将开发过程限…

2024-4-28

今日流水账&#xff1a; 上午&#xff1a; 打CTF总不能爆零吧&#xff0c;所以看群里师傅说 D3CTF 的那道 qemu 逃逸很简单&#xff0c;所以就把他给做了然后还是在配内核环境&#xff0c;服了&#xff0c;还是不行捏~~~下午继续配&#xff0c;啊啊啊 好好的思考了一下&#xf…

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…