SpringCloudAlibaba:3.1dubbo

dubbo

概述

简介

Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题 官方提供了 Java、Golang、Rust 等多语言 SDK 实现

Dubbo的开源故事

最早在2008年,阿里巴巴就将Dubbo捐献到开源社区,它很快成为了国内开源服务框架选型的事实标准框架,得到了业界更广泛的应用 在2017年,Dubbo被正式捐献Apache软件基金会并成为Apache顶级项目,开始了一段新的征程

优势

活跃的社区

Dubbo 项目托管在 Apache 社区,有来自国际、国内的活跃贡献者维护着超 10 个生态项目, 贡献者包括来自海外、阿里巴巴、工商银行、携程、蚂蚁、腾讯等知名企业技术专家, 确保 Dubbo 及时解决项目缺陷、需求及安全漏洞,跟进业界最新技术发展趋势。

庞大的用户群体

Dubbo3 已在阿里巴巴成功取代 HSF 框架实现全面落地,成为阿里集团面向云原生时代的统一服务框架, 庞大的用户群体是 Dubbo 保持稳定性、需求来源、先进性的基础。

任意通信协议

Dubbo 微服务间远程通信实现细节,支持 HTTP、HTTP/2、gRPC、TCP 等所有主流通信协议。 与普通 RPC 框架不同,Dubbo 不是某个单一 RPC 协议的实现, 它通过上层的 RPC 抽象可以将任意 RPC 协议接入 Dubbo 的开发、治理体系。

多语言 SDK

Dubbo 提供几乎所有主流语言的 SDK 实现,定义了一套统一的微服务开发范式。 Dubbo 与每种语言体系的主流应用开发框架做了适配,总体编程方式、配置符合大多数开发者已有编程习惯

功能

微服务编程范式和工具

Dubbo 支持基于 IDL 或语言特定方式的服务定义,提供多种形式的服务调用形式(如同步、异步、流式等)

高性能的 RPC 通信

Dubbo 帮助解决微服务组件之间的通信问题,提供了基于 HTTP、HTTP/2、TCP 等的多种高性能通信协议实现, 并支持序列化协议扩展,在实现上解决网络连接管理、数据传输等基础问题。

微服务监控与治理

Dubbo 官方提供的服务发现、动态配置、负载均衡、流量路由等基础组件可以很好的帮助解决微服务基础实践的问题。 除此之外,您还可以用 Admin 控制台监控微服务状态,通过周边生态完成限流降级、数据一致性、链路追踪等能力。

部署在多种环境

Dubbo 服务可以直接部署在容器、Kubernetes、Service Mesh等多种架构下

搭建

公共接口模块

支付接口

package jkw.service;/*** 支付接口*/
public interface PaymentService {/*** 根据订单id支付【模拟】* @param id* @return*/String payment(Integer id);
}

服务提供者

依赖

<?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>java_sc_alibaba</artifactId><groupId>jkw.life</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>test-dubbo-provider8004</artifactId><dependencies><!-- dubbo的注册中心nacos--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId></dependency><!-- dubbo和springboot整合依赖包--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><!-- SpringMVC--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 公共接口模块--><dependency><artifactId>test-com-interface</artifactId><groupId>jkw.life</groupId><version>1.0-SNAPSHOT</version></dependency></dependencies></project>

application.yml

server:port: 8004
dubbo:application:name: test-dubbo-provider8004protocol:# 通讯协议name: dubbo# 端口号 设置端口为 -1 表示 dubbo 自动扫描并使用可用端口(从20880开始递增),避免了端口冲突的问题。port: -1registry:# 注册地址address: nacos://192.168.66.103:8848

启动类

package jkw;import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@Slf4j
@EnableDubbo
@SpringBootApplication
public class Main8004 {public static void main(String[] args) {SpringApplication.run(Main8004.class, args);log.info("**************dubbo 服务提供者 8004 启动成功 ************");}
}

支付接口实现类

package jkw.service;import org.apache.dubbo.config.annotation.DubboService;/*** 支付接口实现类*/
@DubboService
public class PaymentServiceImpl implements PaymentService {@Overridepublic String payment(Integer id) {return " payment success ";}
}

服务消费者

依赖

<?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>java_sc_alibaba</artifactId><groupId>jkw.life</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>test-dubbo-customer8005</artifactId><dependencies><!-- dubbo的注册中心nacos--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId></dependency><!-- dubbo和springboot整合依赖包--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><!-- SpringMVC--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 公共接口模块--><dependency><artifactId>test-com-interface</artifactId><groupId>jkw.life</groupId><version>1.0-SNAPSHOT</version></dependency></dependencies></project>

application.yml

server:port: 8005
dubbo:application:name: test-dubbo-customer8005protocol:# 通讯协议name: dubbo# 端口号 设置端口为 -1 表示 dubbo 自动扫描并使用可用端口(从20880开始递增),避免了端口冲突的问题。port: -1registry:# 注册地址address: nacos://192.168.66.103:8848

启动类

package jkw;import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@Slf4j
@EnableDubbo
@SpringBootApplication
public class Main8005 {public static void main(String[] args) {SpringApplication.run(Main8005.class, args);log.info("**************dubbo 服务提供者 8004 启动成功 ************");}
}

订单控制层

package jkw.controller;import jkw.service.PaymentService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** 订单控制层*/
@RestController
public class OrderController {@DubboReferencePaymentService paymentService;@GetMapping("/payment")public String payment() {return paymentService.payment(1);}}

测试

测试:http://localhost:8005/payment

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

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

相关文章

面试:Mybatis(MyBatis执行流程、延迟加载、MyBatis的缓存)

目录 一、MyBatis执行流程 二、MyBatis是否支持延迟加载&#xff1f; 1、什么是延迟加载&#xff1f; 2、延迟加载的原理 三、MyBatis的缓存 1、一级缓存 2、二级缓存 3、注意事项 一、MyBatis执行流程 读取MyBatis配置文件: mybatis-config.xml加载运行环境和映射文件构…

自定义表单元素组件内容变化触发ElForm重新校验

对于下图中“付费类型”怎么实现有很多种方式&#xff0c;我能想到的是以下两种&#xff1a; Element Plus的RadioButton自定义组件 1. RadioButton 它本质上就是一个单选组件&#xff0c;它跟Element Plus的RadioButton本质上没有区别&#xff0c;无非是外观上的差别。那么…

String::intern()介绍

[Q&A] String::intern() 的作用 String::intern()是一个本地方法&#xff0c;它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串&#xff0c;则返回代表池中这个字符串的String对象的引用&#xff1b;否则&#xff0c;会将此String对象包含的字符串添加到…

Vue阶段练习:组件拆分

页面开发思路 分析页面&#xff0c;按模块拆分组件&#xff0c;搭架子&#xff08;局部或全局注册&#xff09;根据设计图&#xff0c;编写html结构css样式拆分封装通用小组件&#xff08;局部或全局注册&#xff09;将来通过js动态渲染实现功能 BaseBrandItem.vue <templ…

数字旅游以科技创新为动力:推动旅游服务的智能化、网络化和个性化发展,满足游客日益增长的多元化、个性化需求

目录 一、引言 二、科技创新推动旅游服务智能化发展 1、智能化技术的引入与应用 2、智能化提升旅游服务效率与质量 三、科技创新推动旅游服务网络化发展 1、网络化平台的构建与运营 2、网络化拓宽旅游服务渠道与范围 四、科技创新推动旅游服务个性化发展 1、个性化需求…

C语言中细说用typedef和用struct定义结构体的区别及其在单片机C语言开发中的应用

目录 1.struct声明结构体 2.定义结构体变量 3. typedef &#xff08;1&#xff09;采用struct和 typedef struct 声明结构体是有区别的 &#xff08;2&#xff09;对比&#xff0c;使用typedef struct 声明结构体 4.GPIO_TypeDef是结构体名称&#xff0c;而不是结构体变量…

Flutter笔记:谈Material状态属性-为什么FlatButton等旧版按钮就废弃了

Flutter笔记 谈Material状态属性-为什么FlatButton等旧版按钮就废弃了 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this artic…

C#知识|Dictionary泛型集合的使用总结

哈喽,你好,我是雷工! 以下是C#Dictionary泛型集合的学习笔记。 01 Dictionary泛型集合 1.1、Dictionary<K,V>通常称为字典, 1.2、其中<K,V>是自定义的,用来约束集合中元素类型。 1.3、在编译时检查类型约束, 1.4、无需装箱拆箱操作, 1.5、操作与哈希表(Ha…

网络工程师必学知识:TCP抓包分析Seq、SYN、ACK的变化过程

网络工程师必学知识:TCP抓包分析Seq、SYN、ACK的变化过程 1.概述:2.抓包3.分析:重点1:重点2:4.总结:1.概述: 下面是我面试时遇到的问题。 问:TCP协议位于tcp/ip协议栈的哪一层呢? 答:这个问题要是答不上来,就不用看下面的内容了。 问:TCP抓包时Seq、SYN、ACK的变化…

Microsoft Threat Modeling Tool 使用(二)

主界面 翻译 详细描述 选择了 “SDL TM Knowledge Base (Core)” 模板并打开了一个新的威胁模型。这个界面主要用于绘制数据流图&#xff08;Data Flow Diagram, DFD&#xff09;&#xff0c;它帮助您可视化系统的组成部分和它们之间的交互。以下是界面中各个部分的功能介绍&a…

2023-2024年Web3行业报告合集(精选13份)

Web3行业报告&#xff08;精选13份&#xff09; 2023-2024年 来源&#xff1a;2023-2024年Web3行业报告合集&#xff08;精选13份&#xff09; 【以下是资料目录】 2023Web3产业发展现状分析及国内外落地实践报告 2023模块化区块链承载Web3.0应用的新模式 2023年AI应用需求…

[基础] Unity Shader:顶点着色器(vert)函数

顶点着色器&#xff08;Vertex Shader&#xff09;是图形渲染的第一个阶段&#xff0c;它的输入来自于CPU。顶点着色器的处理单位是顶点&#xff0c;CPU输入进来的每个顶点都会调用一次顶点着色器函数&#xff0c;也就是我们在Shader代码里所定义的vert函数。本篇我们将会通过顶…

Linux下JVM相关指令详解及案例介绍

目录 博客&#xff1a;Linux下JVM相关指令详解及案例介绍1. jps2. jstack3. jmap4. jstat5. jinfo6. jconsole7. jcmd 博客&#xff1a;Linux下JVM相关指令详解及案例介绍 在Linux环境下&#xff0c;对于Java应用程序的管理和监控&#xff0c;有一系列强大的命令和工具可供使用…

WPF之可翻转面板

1&#xff0c;创建翻转面板的资源字典&#xff1a;FlippPanel.xaml。 无外观控件同样必须给样式指定类型&#xff08; <ControlTemplate TargetType"ss:FlipPanel">&#xff09;&#xff0c;相关详情参考&#xff1a;WPF之创建无外观控件-CSDN博客&#xff09…

场景文本检测识别学习 day06(Vi-Transformer论文精读、MAE论文阅读)

Vi-Transformer论文精读 在NLP领域&#xff0c;基于注意力的Transformer模型使用的非常广泛&#xff0c;但是在计算机视觉领域&#xff0c;注意力更多是和CNN一起使用&#xff0c;或者是单纯将CNN的卷积替换成注意力&#xff0c;但是整体的CNN 架构没有发生改变VIT说明&#x…

React 之 使用 ref 引用值

当你希望组件“记住”某些信息&#xff0c;但又不想让这些信息 触发新的渲染 时&#xff0c;你可以使用 ref 。 //通过从 React 导入 useRef Hook 来为你的组件添加一个 ref import { useRef } from react;export default function Counter() {//在组件内&#xff0c;调用 useR…

React中的高阶组件

高阶组件 HOC 是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分&#xff0c;它是一种基于 React 组合特性而形成的设计模式 参数为组件&#xff0c;返回值为新函数 const EnhanceComponent higherOrderComponent(WrappedComponent);组件将 pro…

蓝桥杯单片机省赛——第八届“基于单片机的电子钟程序设计与调试”程序部分

往期回顾 第三届蓝桥杯单片机省赛 第四届蓝桥杯单片机省赛 第五届蓝桥杯单片机省赛 第六届蓝桥杯单片机省赛 第七届蓝桥杯单片机省赛 文章目录 往期回顾一、前期准备二、代码详情1.基础代码蜂鸣器/继电器/led/定时器之类的代码 2.按键详解按键写法讲解 3.驱动的处理驱动写法讲…

程序员缓解工作压力——方法分享

前言 作为一名初级程序员&#xff0c;我承认自己在应对工作压力方面还有待提高。在日常工作中&#xff0c;我时常感到压力山大&#xff0c;尤其是在面对复杂问题或紧迫的项目期限时。然而&#xff0c;为了保持高效和持久的工作热情&#xff0c;我还是积极寻求并使用了一…

INNODB和MyISAM有什么区别

InnoDB和MyISAM是MySQL数据库中两种常见的存储引擎&#xff0c;它们之间存在一些重要的区别。 事务支持&#xff1a;InnoDB支持ACID&#xff08;原子性、一致性、隔离性和持久性&#xff09;事务&#xff0c;这保证了数据的完整性和一致性。相比之下&#xff0c;MyISAM不支持事…