当前位置: 首页 > news >正文

Spring Cloud Alibaba微服务开发

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.hskmm.com/?act=detail&tid=25336

相关文章:

  • OI 各种东西的板子
  • 价值弥漫:AI元人文的场域革命与共生之路
  • 做题记录 #1
  • 阿爸阿爸
  • 深度学习优化器算法巧思速览
  • 完整教程:LangChain完全指南:从入门到精通,打造AI应用开发新范式
  • NDK开发与实践(入门篇微课视频版)
  • 调了很久的代码总结
  • CF700E
  • 价值弥漫:“AI元人文”的场域革命与共生之路
  • k8s之pod概念
  • CF 1055 Div.1+Div.2
  • 2026 NOI 做题记录(五)
  • ARC 207 (Div.1)
  • “齐俊杰投资智能体”更新完了9月份的资料
  • LVS+Keepalived高可用群集 - 指南
  • luogu P1020 [NOIP 1999 提高组] 导弹拦截
  • RabbitMQ 离线安装
  • Nginx 离线安装
  • docker 离线安装
  • uniapp 转回tabbar页面
  • 第十一届中国大学生程序设计竞赛网络预选赛 魔塔
  • JDK 离线安装
  • minio 离线安装
  • HbuilderX 将 h5转成uniapp的一些记录.19127294
  • 银行同业存单产品的筛选方法
  • deepseek 私有部署文档
  • MySQL运维及开发规范
  • 短视频平台差异视角下开源AI智能名片链动2+1模式S2B2C商城小代码的适配性研究——以抖音与快手为例
  • 异步读写mysql依赖pymysql (asyncio/ aiomysql)