Dubbo SpringBoot应用创建和K8S部署

推荐阅读:Dubbo 快速入门-CSDN博客

创建基于Spring Boot的微服务应用

以下文档将引导您从头创建一个基于 Spring Boot 的 Dubbo 应用,并为应用配置 Triple 通信协议、服务发现等微服务基础能力。

快速创建应用

以下是我们为您提前准备好的示例项目,可通过如下命令快速下载示例源码。在实际开发中,您也可以访问 start.dubbo.apache.org 快速创建一个全新的 Dubbo 应用模板。

curl -O -# https://dubbo-demo.oss-cn-hangzhou.aliyuncs.com/quickstart/dubbo-quickstart.zip
unzip dubbo-quickstart
cd dubbo-quickstart
提示

本项目源码在 Dubbo Github 示例仓库中维护 https://github.com/apache/dubbo-samples

本地启动应用

接下来,让我们尝试在本地启动应用。运行以下命令启动应用:

chmod a+x ./mvnw
./mvnw clean install -DskipTests
./mvnw compile -pl quickstart-service exec:java -Dexec.mainClass="org.apache.dubbo.samples.quickstart.QuickStartApplication"
注意
  • 运行示例要求 JDK 17+ 版本。
  • 由于配置文件中启用了注册中心,您需要首先在本地启动 Nacos 注册中心 server。或者参考下一篇 Kubernetes 部署方式。

在应用启动成功后,本地进程使用 Triple 协议在指定端口发布了服务。同时可以看到消费端持续对提供端发起调用调用:

Started QuickStartApplication in 4.38 seconds (process running for 4.629)
Receive result ======> Hello world

可直接使用 cURL 测试服务是否已经正常运行:

curl \--header "Content-Type: application/json" \--data '["Dubbo"]' \http://localhost:50051/org.apache.dubbo.samples.quickstart.dubbo.api.DemoService/sayHello/

除了使用命令行之外,我们还可以在 IDE 中启动项目,调整示例或进行本地 debug。

源码解析

将以上准备好的示例项目导入最喜欢的 IDE 开发工具(以 IntelliJ IDEA 为例),项目结构如下:

Maven 依赖

打开 pom.xml,可以看到示例项目中 Dubbo 相关核心依赖如下:

    <dependencyManagement><dependencies><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-bom</artifactId><version>3.3.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-nacos-spring-boot-starter</artifactId></dependency></dependencies>

其中,dubbo-spring-boot-starterdubbo-nacos-spring-boot-starter 分别为我们引入了 Dubbo 内核框架与 Nacos 客户端相关的依赖组件,更多内容可以查看 Dubbo 支持的 Spring Boot Starter 清单 。

服务定义

以下是基于 Java Interface 的标准 Dubbo 服务定义。

public interface DemoService {String sayHello(String name);
}

在 DemoService 中,定义了 sayHello 这个方法。后续服务端发布的服务,消费端订阅的服务都是围绕着 DemoService 接口展开的。

服务实现

定义了服务接口之后,可以在服务端这一侧定义对应的业务逻辑实现。

@DubboService
public class DemoServiceImpl implements DemoService {@Overridepublic String sayHello(String name) {return "Hello " + name;}
}

DemoServiceImpl 类中添加了 @DubboService 注解,通过这个配置可以基于 Spring Boot 去发布 Dubbo 服务。

发起服务调用

示例应用中有一个 consumer 包,用于模拟发起对 provider 服务的远程调用。

@Component
public class Consumer implements CommandLineRunner {@DubboReferenceprivate DemoService demoService;@Overridepublic void run(String... args) throws Exception {String result = demoService.sayHello("world");System.out.println("Receive result ======> " + result);}
}

在 Task 类中,通过@DubboReference 从 Dubbo 获取了一个 RPC 订阅代理,这个 demoService 代理可以像本地调用一样直接调用: demoService.sayHello("world")

提示

通常远程调用是跨进程的,示例项目为了方便开发,直接内置了一个 @DubboReference 调用。如果您想学习如何开发一个独立的 Consumer(客户端)进程,以便发起对 Dubbo 服务的远程调用,我们有一个 包含独立 consumer、provider 模块的示例项目 可供参考。

应用入口与配置文件

由于我们创建的是一个 Spring Boot 应用,Dubbo 相关配置信息都存放在 application.yml 配置文件中。基于以下配置,Dubbo 进程将在 50051 端口监听 triple 协议请求,同时,实例的 ip:port 信息将会被注册到 Nacos server。

# application.yml
dubbo:registry:address: nacos://${nacos.address:127.0.0.1}:8848?username=nacos&password=nacos# This will enable application-level service discovery only (the recommended service discovery method for Dubbo3).# For users upgrading from Dubbo2.x, please set the value to 'all' for smooth migration.register-mode: instanceprotocol:name: triport: 50051application:name: QuickStartApplicationlogger: slf4j

以下是整个应用的启动入口,@EnableDubbo 注解用来加载和启动 Dubbo 相关组件。

@SpringBootApplication
@EnableDubbo
public class QuickStartApplication {public static void main(String[] args) {SpringApplication.run(QuickStartApplication.class, args);}
}

发布服务定义到远端仓库

应用开发完成后,我们需要将服务定义(在此示例中是 DemoService 接口定义)发布到外部公开的或组织内部的 maven 仓库,以便调用这些服务的应用能够加载并使用这些服务定义。

如之前我们看到的,示例项目包含 api、service 两个模块,切换项目到 api 目录,以下命令即可完成发布动作:mvn clean deploy

快速部署Dubbo应用

在上面,我们学习了如何开发基于 Spring Boot 的 Dubbo 应用。接下来,我们将学习部署这个 Dubbo 应用。

本文将以 Kubernetes 集群作为基础环境来讲解 Dubbo 应用的部署,部署架构如下图所示:

注意

在实际使用中可能会选择不同的部署环境与架构,如使用服务网格(Service Mesh)、虚拟机等多种部署模式,请参考 部署文档 了解更多详细内容。

部署应用

我们为您提前准备好了示例项目的镜像与部署文件,您可以使用如下命令将示例快速部署到 Kubernetes 集群(请确保在示例源码根目录执行如下命令):

kubectl apply -f ./Kubernetes-manifests.yaml

以上命令将自动部署如下资源:

  • dubbo-system 命名空间
    • Nacos Deployment
    • Nacos Service
  • dubbo-quickstart 命名空间
    • Quickstart Deployment
    • Quickstart Service

运行以下命令,确认资源已经部署成功:

kubectl get services -n dubbo-system
kubectl get services -n dubbo-quickstart

访问应用

部署成功后,可以通过以下方式检查应用状态。

  • 请根据情况选择:
  • 本地 Kubernetes 集群
  • 阿里云 ACK 集群

执行以下命令进行本地端口映射:

kubectl port-forward <pod-name> 50051:50051 -n dubbo-quickstart

通过 curl 访问服务:

curl \--header "Content-Type: application/json" \--data '["Dubbo"]' \http://localhost:50051/org.apache.dubbo.samples.quickstart.dubbo.api.DemoService/sayHello/

附录

如果你有修改示例源码并需要重新打包 docker 镜像,请在示例根目录运行如下命令,随后将镜像推送到远端镜像仓库并修改 kubernetes-manifests.yaml 中的镜像地址后重新部署。

docker build -f ./Dockerfile --build-arg APP_FILE=quickstart-service-0.0.1-SNAPSHOT.jar -t demo:latest .

本示例 Kubernetes 部署资源文件也可在 Github 访问:https://raw.githubusercontent.com/apache/dubbo-samples/master/11-quickstart/Kubernetes-manifests.yaml。

# Namespace
apiVersion: v1
kind: Namespace
metadata:name: dubbo-quickstart
---
apiVersion: v1
kind: Namespace
metadata:name: dubbo-system
---# Nacos
apiVersion: apps/v1
kind: Deployment
metadata:name: nacosnamespace: dubbo-system
spec:replicas: 1selector:matchLabels:app: nacostemplate:metadata:labels:app: nacosspec:containers:- name: consumerimage: nacos-registry.cn-hangzhou.cr.aliyuncs.com/nacos/nacos-server:v2.1.2imagePullPolicy: Alwaysresources:requests:memory: "2Gi"cpu: "500m"ports:- containerPort: 8848name: client- containerPort: 9848name: client-rpcenv:- name: NACOS_SERVER_PORTvalue: "8848"- name: NACOS_APPLICATION_PORTvalue: "8848"- name: PREFER_HOST_MODEvalue: "hostname"- name: MODEvalue: "standalone"- name: NACOS_AUTH_ENABLEvalue: "true"
---
apiVersion: v1
kind: Service
metadata:name: nacosnamespace: dubbo-system
spec:type: ClusterIPsessionAffinity: Noneselector:app: nacosports:- port: 8848name: servertargetPort: 8848- port: 9848name: client-rpctargetPort: 9848
---apiVersion: apps/v1
kind: Deployment
metadata:name: quickstartnamespace: dubbo-quickstart
spec:replicas: 1selector:matchLabels:app: quickstarttemplate:metadata:labels:app: quickstartspec:containers:- name: quickstartimage: sca-registry.cn-hangzhou.cr.aliyuncs.com/dubbo/dubbo-quickstart:1.0imagePullPolicy: Alwaysports:- name: dubbocontainerPort: 50051protocol: TCP- name: dubbo-qoscontainerPort: 22222protocol: TCPenv:- name: JAVA_TOOL_OPTIONSvalue: "-Dnacos.address=nacos.dubbo-system.svc"
---apiVersion: v1
kind: Service
metadata:name: quickstartnamespace: dubbo-quickstart
spec:selector:app: quickstartports:- name: tcpport: 50051targetPort: 50051- name: httpport: 22222targetPort: 22222
---

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

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

相关文章

AI大模型开发架构设计(12)——以真实场景案例驱动深度剖析 AIGC 新时代 IT 人的能力模型

文章目录 以真实场景案例驱动深度剖析 AIGC 新时代 IT 人的能力模型1 AI 工具以及大模型会给我们带来哪些实际收益?业务研发流程环节为什么 LLM 大模型不是万能的?LLM 大模型带来实际收益 2 新时代IT人的能力模型会发生哪些变化?古典互联网架构师能力模型IT人能力模型变化 以…

这都能封!开发者行为导致Google账号关联?

从去年10月开始&#xff0c;在AI加持下&#xff0c;Google Play不断更新和迭代审查机制&#xff0c;Google Play在最近一年的时间真是杀疯了&#xff0c;封号的声音响彻整个行业&#xff0c;尤其是一些敏感品类行业。账号关联&#xff0c;恶意软件&#xff0c;欺骗行为&#xf…

小红书新ID保持项目StoryMaker,面部特征、服装、发型和身体特征都能保持一致!(已开源)

继之前和大家介绍的小红书在ID保持以及风格转换方面相关的优秀工作&#xff0c;感兴趣的小伙伴可以点击以下链接阅读~ 近期&#xff0c;小红书又新开源了一款文生图身份保持项目&#xff1a;StoryMaker&#xff0c;是一种个性化解决方案&#xff0c;它不仅保留了面部的一致性&…

贪吃蛇游戏(代码篇)

我们并不是为了满足别人的期待而活着。 前言 这是我自己做的第五个小项目---贪吃蛇游戏&#xff08;代码篇&#xff09;。后期我会继续制作其他小项目并开源至博客上。 上一小项目是贪吃蛇游戏&#xff08;必备知识篇&#xff09;&#xff0c;没看过的同学可以去看看&#xf…

Angular Count-To 项目教程

Angular Count-To 项目教程 angular-count-to Angular directive to animate counting to a number 项目地址: https://gitcode.com/gh_mirrors/an/angular-count-to 1. 项目介绍 Angular Count-To 是一个用于 AngularJS 的动画计数器指令。该指令可以在指定的时间内从…

Lfsr32

首先分析 Lfsr5 首先要理解什么是抽头点&#xff08;tap&#xff09;&#xff0c;注意到图中有两个触发器的输入为前级输出与q[0]的异或&#xff0c;这些位置被称为 tap position.通过观察上图&#xff0c;所谓抽头点指的就是第5个&#xff0c;第3个寄存器的输入经过了异或逻辑…

利用C++封装鼠标轨迹算法为DLL:游戏行为检测的利器

在现代软件开发中&#xff0c;鼠标轨迹模拟技术因其在自动化测试、游戏脚本编写等领域的广泛应用而备受青睐。本文将介绍如何使用C语言将鼠标轨迹算法封装为DLL&#xff08;动态链接库&#xff09;&#xff0c;以便在多种编程环境中实现高效调用&#xff0c;同时探讨其在游戏行…

cudnn8编译caffe过程(保姆级图文全过程,涵盖各种报错及解决办法)

众所周知,caffe是个较老的框架,而且只支持到cudnn7,但是笔者在复现ds-slam过程中又必须编译caffe,我的cuda版本是11.4,最低只支持到8.2.4,故没办法,只能编译了 在此记录过程、报错及解决办法如下; 首先安装依赖: sudo apt-get install git sudo apt-get install lib…

【IEEE独立出版 | 厦门大学主办】第四届人工智能、机器人和通信国际会议(ICAIRC 2024)

【IEEE独立出版 | 厦门大学主办】 第四届人工智能、机器人和通信国际会议&#xff08;ICAIRC 2024&#xff09; 2024 4th International Conference on Artificial Intelligence, Robotics, and Communication 2024年12月27-29日 | 中国厦门 >>往届均已成功见刊检索…

【Kubernetes① 基础】一、容器基础

目录 一、进程二、隔离与限制三、容器镜像总结参考书籍 一、进程 容器技术的兴起源于PaaS技术(平台即服务)的普及&#xff1b;Docker公司发布的Docker项目具有里程碑式的意义&#xff1b;Docker项目通过“容器镜像”解决了应用打包这个根本性难题(CloudFoundry)。 容器本身的价…

【QAMISRA】解决导入commands.json时报错问题

1、 文档目标 解决导入commands.json时报错“Could not obtain system-wide includes and defines”的问题。 2、 问题场景 客户导入commands.json时报错“Could not obtain system-wide includes and defines”。 3、软硬件环境 1、软件版本&#xff1a; QA-MISRA23.04 2、…

【电路笔记】-运算放大器多谐振荡器

运算放大器多谐振荡器 文章目录 运算放大器多谐振荡器1、概述2、施密特触发器3、运算放大器稳态多谐振荡器4、运算放大器单稳态多谐振荡器5、运算放大器双稳态多谐振荡器6、总结1、概述 本文将重点介绍通常称为多谐振荡器的配置,特别是基于运算放大器的电路。 事实上,多谐振…

AWS账号与邮箱的关系解析

在当今数字化时代&#xff0c;云计算服务的普及使得越来越多的企业和个人用户开始使用亚马逊网络服务&#xff08;AWS&#xff09;。作为全球领先的云服务平台&#xff0c;AWS为用户提供了丰富的计算、存储和数据库服务。然而&#xff0c;对于许多新用户来说&#xff0c;关于AW…

VLOG视频制作解决方案,开发者可自行定制包装模板

无论是旅行见闻、美食探店&#xff0c;还是日常琐事、创意挑战&#xff0c;每一个镜头背后都蕴含着创作者无限的热情和创意。然而&#xff0c;面对纷繁复杂的视频编辑工具&#xff0c;美摄科技凭借其前沿的视频制作技术和创新的解决方案&#xff0c;为每一位视频创作者提供了开…

LLaMA-Factory 让大模型微调变得更简单!!

背景 如果只需要构建一份任务相关的数据&#xff0c;就可以轻松通过网页界面的形式进行 Fine-tuning 微调操作&#xff0c; 那么必将大大减轻微调工作量。 今年的 ACL 2024见证了北航和北大合作的突破—论文《LLAMAFACTORY: 统一高效微调超百种语言模型》。他们打造的 LLaMA-…

三菱FX3UPLC机械原点回归- DSZR/ZRN指令

机械原点回归用指令的种类 产生正转脉冲或者反转脉冲后&#xff0c;增减当前值寄存器的内容。可编程控制器的定位指令&#xff0c;可编程控制器的电源0FF后&#xff0c;当前值寄存器清零&#xff0c;因此上电后&#xff0c;请务必使机械位置和当前值寄存器的位置相吻合…

【网络问题】解决浏览器的“代理服务器拒绝连接”的问题

大早上来上班&#xff0c;打开浏览器&#xff0c;页面变成了“代理服务器拒绝连接”&#xff01;换一个浏览器也还是这个问题&#xff0c;没法上网可真是大问题啊&#xff01; 由于隔壁同事还在正常上网工作&#xff0c;初步估计已经排除了公共网络设置的问题了。 而我已经尝试…

代码随想录(七) —— 二叉树部分

1. 二叉树的四种遍历方式的理解 前序遍历&#xff0c;中序遍历&#xff0c;后序遍历&#xff1b;层次遍历 结合另一篇博客&#xff0c;关于灵神的题单刷题 二叉树刷题记录-CSDN博客 理解&#xff1a; 在二叉树类型题目中&#xff0c;遍历顺序的选择需要根据具体问题来确定…

猎板PCB:军工武器系统中的PCB线路板技术要求

PCB线路板在军工武器系统中的应用非常广泛&#xff0c;它们是现代军事装备中不可或缺的组成部分。军工级PCB因其在极端环境下的稳定性和可靠性而受到重视&#xff0c;这些环境可能包括高温、低温、高湿度、强辐射、高震动等条件。以下是一些关键点&#xff0c;概述了PCB线路板在…

本地部署ComfyUI并添加强大的Flux.1开源文生图模型远程制作AI图片

文章目录 前言1. 本地部署ComfyUI2. 下载 Flux.1 模型3. 下载CLIP模型4. 下载 VAE 模型5. 演示文生图6. 公网使用 Flux.1 大模型6.1 创建远程连接公网地址7. 固定远程访问公网地址前言 本文将详细介绍如何在本地部署ComfyUI并搭建 Flux.1文生图神器,并且实现公网访问。 Flux…