Spring Cloud Alibaba微服务开发

news/2025/10/6 10:44:20/文章来源:https://www.cnblogs.com/dslw0820/p/19127380

Dubbo服务一般注册在ZooKeeper中,所以要先安装并启动好ZooKeeper。首先在官网下载Zookeeper3.8.3版本,下载后解压,然后打开刚刚解压的zookeeper安装目录,在该目录下创建一个空的data目录(与bin是同一级目录),然后打开conf目录,复制一份zoo_sample.cfg,重命名为zoo.cfg,修改里面的dataDir的值,设置为刚才创建的data目录的全路径,例如dataDir=C:\software\apache-zookeeper-3.8.3-bin\apache-zookeeper-3.8.3-bin\data
注意:必须用双斜杠,然后双击bin下的zkServer.cmd文件即可启动ZooKeeper,启动后ZooKeeper的端口号为2181。
7.2 Dubbo远端调用实践
本节创建一个服务提供者和一个服务调用者微服务项目,两者之间使用Dubbo进行远端调用,调用时就像调用本地服务一样简单。
7.2.1 创建服务提供者
先来创建服务提供者项目,供服务调用者调用。
(1)创建Spring Boot 3.0.2项目,命名为DubboProvider,再添加下列Dubbo、ZooKeeper有关的依赖,其中ZooKeeper用来注册Dubbo服务。Spring Boot集成Dubbo和ZooKeeper的代码如下:

org.apache.dubbo
dubbo-spring-boot-starter
3.2.2


org.apache.dubbo
dubbo-registry-zookeeper
3.2.2


zookeeper
org.apache.zookeeper
3.8.3


org.springframework.boot
spring-boot-starter-web

(2)applicaiton.yml配置代码如下:
server:
port: 8082

spring:
application:
name: DubboProvider

dubbo:
protocol:
name: dubbo
port: 23650
scan:
base-packages: com.sike.dubbo
registry:
address: zookeeper://127.0.0.1:2181
其中,Dubbo有关的配置分别是指定dubbo的协议名称,工作端口号,扫描包的名称,Dubbo方法的注册中心路径。
(3)创建Dubbo对外服务的接口和实现类。创建接口MyDubboService及实现类MyDubb-oServiceImpl,实现类MyDubboServiceImpl代码如下:
@DubboService
public class MyDubboServiceImpl implements MyDubboService {
@Override
public String getInfoFromDubbo() {
return "First Info from Dubbo";
}
}
其中,注解@DubboService表明该方法将以Dubbo的方式提供服务,该服务将注册到ZooKeeper上。
(4)启动类中添加@EnableDubbo注解,启用Dubbo。
(5)启动ZooKeeper,再启动项目,启动完成后,MyDubboService服务便注册到了ZooKeeper注册中心里面了。
7.2.2 创建服务调用者
创建好服务提供者项目后,接下来创建服务调用者项目。
(1)创建项目命名为DubboConsumer,导入跟DubboProvider项目相同的依赖,但application.yml配置稍有不同,具体配置信息代码如下:
server:
port: 8081

spring:
application:
name: DubboConsumer

dubbo:
application:
qos-enable: false #不开启dubbo运维服务
scan:
base-packages: com.sike.dubbo
cloud:
subscribed-services: DubboProvider
registry:
address: zookeeper://127.0.0.1:2181
其中,subscribed-services: DubboProvider作用是表示要调用哪个微服务项目中的Dubbo方法,其他配置信息作用跟服务提供者相同。
(2)创建接口MyDubboService,代码与服务提供者相同,这里暂时不需实现类。
(3)创建控制器DubboController,完成调用的业务逻辑。首先要使用@DubboReference注解注入要调用的接口,再在控制器方法中使用,代码如下:
@RestController
public class DubboController {
@DubboReference
private MyDubboService myDubboService;

@GetMapping("/getInfo")
public String getInfo(){return myDubboService.getInfoFromDubbo();
}

}
(4)启动项目,浏览器访问http://localhost:8081/getInfo,结果如图7-2所示。

图7-2 浏览器访问http://localhost:8081/getInfo
可见,服务调用者项目成功地获取了服务提供者返回的数据,远端调用成功。
7.2.3 Dubbo中的负载均衡
如果服务提供者有两个或以上的实例,则Dubbo 默认采用随机(random)的方式进行服务消费者的负载均衡。在复制 DubboProvider 项目为 DubboProvider2 并修改配置后,需将 Dubbo 端口号修改为 23651。同时,在 MyDubboServiceImpl 中修改输出内容,以便测试时确定 Dubbo 实际调用的是哪个微服务(实际业务中多个实例功能相同)。修改后的方法如下:
public class MyDubboServiceImpl implements MyDubboService {
@Override
public String getInfoFromDubbo() {
return "Second Info from Dubbo";
}
}
启动DubboProvider2项目,浏览器访问http://localhost:8081/getInfo,浏览器将不规律地分别出现图7-2和图7-3所示的界面。

图7-3 浏览器访问http://localhost:8081/getInfo
7.2.4 Dubbo负载均衡策略
通过在服务提供者项目的Dubbo方法的实现类上的@DubboService注解中添加loadbalance参数及值的方式可以更改Dubbo的负载均衡策略,常见的负载均衡值如下,每个值代表一种负载均衡策略
(1)random,随机。随机访问集群中节点,访问概率和权重有关,所以还可以再配置一个weight的参数及值,表示权重,默认。
(2)roundrobin,轮询。访问频率和权重有关,集群中每个项目部署的服务器的性能可能是不同,性能好的服务器权重应该高一些,实际配置时还需要再配置一个weight的参数及值,如果各个项目的权重相同,则是真正意义上的轮询。
(3)leastactive,活跃数相同的随机,不同的活跃数高的放前面。
(4)consistenthash,一致性Hash。相同参数请求总是发到一个提供者。
【示例7-1】修改Dubbo的负载均衡策略为轮询。
修改服务提供者项目DubboProvider及DubboProvider2的MyDubboServiceImpl类代码如下:
@DubboService(loadbalance = "roundrobin",weight = 1)
public class MyDubboServiceImpl implements MyDubboService {
@Override
public String getInfoFromDubbo() {
return "Second Info from Dubbo";
}
}
注意:@DubboService注解中添加了参数loadbalance = "roundrobin"表示更改负载均衡方式为轮询,weight = 1表示权重,两个项目的权重相同,访问频率均等。
重新启动服务提供者项目DubboProvider及DubboProvider2,浏览器访问浏览器访问http://localhost:8081/getInfo,浏览器规律地交替轮流出现图7-4和图7-5所示的界面。

图7-4 浏览器访问http://localhost:8081/getInfo

图7-5 浏览器访问http://localhost:8081/getInfo

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

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

相关文章

OI 各种东西的板子

线段树 const int _mxn=1e5+5; int n; ll a[_mxn]; struct segtree {typedef ll dat_type;struct node{int l,r;dat_type dat;dat_type add;int len(){return r-l+1;}}tr[_mxn<<2];inline int ls(int p){return …

价值弥漫:AI元人文的场域革命与共生之路

价值弥漫:"AI元人文"的场域革命与共生之路 一、引言:从"价值对齐"到"价值弥漫"的范式迁移 在AI伦理的探索中,我们长期受困于"价值对齐"的范式——试图将一套预设的、静态的…

武穴市住房和城乡建设局网站网页设计网站页面代码

目录 1 算法的评价 2 算法复杂度 2.1 时间复杂度&#xff08;Time Complexity&#xff09; 2.1.1 如何计算时间复杂度&#xff1a; 2.1.2 常见的时间复杂度类别与示例 2.2 空间复杂度 2.2.1 如何计算空间复杂度 2.2.2 常见的空间复杂度与示例 3 时间复杂度和空间复杂度…

泵网站建设平乡企业做网站

文章目录 数据库操作--开启Durid 监控整合Druid 到Spring-Boot官方文档基本介绍Durid 基本使用代码实现 Durid 监控功能-SQL 监控需求:SQL 监控数据SQL 监控数据-测试页面 Durid 监控功能-Web 关联监控需求:Web 关联监控配置-Web 应用、URI 监控重启项目 Durid 监控功能-SQL 防…

阿里云为何,一个邮箱绑定了两个账号 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

做题记录 #1

A. P5721 分治 FFT Problem Link Y5 下课程里分治结构有放 Antichain, Tree 两道 Poly 题,故进行了一个学习。 半在线卷积。虽然没学过这个东西,但是其思想是比较经典的。半在线要求每一个 \(f_i\) 由 \(f_{1-i-1}\)…

深入解析:【设计模式-3.5】结构型——装饰器模式

深入解析:【设计模式-3.5】结构型——装饰器模式pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

阿爸阿爸

10.6 口胡: QOJ833. Cells Blocking

Python 数据分析与可视化实战:从数据清洗到图表呈现 - 指南

Python 数据分析与可视化实战:从数据清洗到图表呈现 - 指南2025-10-06 10:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

深度学习优化器算法巧思速览

这一篇博文想写很久了,一直没有下笔,核心原因也是有一些待办的思路在攻关验证。 我们先从一个核心的问题出发, 1. 为什么要研究优化器算法? 它的关联问题:训练为什么要调参,调的是什么参? 如果就这个问题去问各…

完整教程:LangChain完全指南:从入门到精通,打造AI应用开发新范式

完整教程:LangChain完全指南:从入门到精通,打造AI应用开发新范式pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &quo…

在Windows下使用lucky实现TLS/SSL证书自动化

在Windows下使用lucky实现TLS/SSL证书自动化2024.06.06 TLS和SSL TLS 是传输层安全性协议 (Transport Layer Security) 的缩写 他的前身是 SSL 即安全套接层 (Secure Sockets Layer) 其目的是保障在互联网通信时数据…

NDK开发与实践(入门篇微课视频版)

本书旨在通过深入的理论与丰富的实战案例,引领读者系统学习NDK开发技术。NDK技术以其高安全性、卓越性能和高度复用性,成为现代应用开发的关键技术之一。本书从基本概念出发,全面介绍了NDK开发所需的核心基础知识,…

【深度学习优化算法】02:凸性 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

温州通业建设工程有限公司网站深圳网站建站的公司

Git学习笔记 文章目录 Git学习笔记一、版本控制二、Linux基础命令三、Git的环境配置四、Git的基本理论&#xff08;核心&#xff09;五、Git项目的搭建六、Git文件操作七、使用码云八、IDEA集成git九、Git分支 一、版本控制 什么是版本控制 版本控制&#xff08;Revision contr…

调了很久的代码总结

凡是在循环前面加了特判的东西,都要检查一下循环内部要不要判。 可以再读一遍题来调代码。

在Windows上搭建 EasyTier 公共服务器

在Windows上搭建 EasyTier 公共服务器2024.10.01 关于本教程 本教程将介绍如何在Windows上搭建 EasyTier 公共服务器 以帮助那些无公网的节点进行连接 值得注意的是EasyTier是不区分客户端和服务端的 其本身同时承载 服…

Transformer模型开发从0到1——原理深入与项目实践

本书分为5篇共17章。Transformer模型基础篇(第1~5章)重点介绍Transformer模型框架。把Transformer模型掰开,从最基础的输入出发,按照模型框架,一点一点走进Transformer模型的内部,直到最终的模型输出;Transform…

常州品牌网站建设免费文字变形logo设计

在软件工程中&#xff0c;设计模式是为了解决常见的软件设计问题而形成的一套经典解决方案。这些模式不仅能够帮助开发者提高设计的灵活性和代码的重用性&#xff0c;还能使问题的解决方案更加清晰、易于理解。《设计模式精解&#xff0d;GoF 23种设计模式》一书中所列举的23种…

毕业设计 网站开发简单吗蘑菇街网站模板

最近偶尔有用户反馈某些 HTTP 接口出现超时问题&#xff0c;而 web 服务端的 Trace 监控没有出现 http 返回值为 503 等异常情况。出现这种情况一般是web容器出现问题&#xff0c;客户端连 Arthas是Alibaba开源的Java诊断工具&#xff0c;深受开发者喜爱。 Github&#xff1a;h…