当前位置: 首页 > 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.jsqmd.com/news/9059/

相关文章:

  • OI 各种东西的板子
  • 价值弥漫:AI元人文的场域革命与共生之路
  • 阿里云为何,一个邮箱绑定了两个账号 - 教程
  • 做题记录 #1
  • 深入解析:【设计模式-3.5】结构型——装饰器模式
  • 阿爸阿爸
  • Python 数据分析与可视化实战:从数据清洗到图表呈现 - 指南
  • 深度学习优化器算法巧思速览
  • 完整教程:LangChain完全指南:从入门到精通,打造AI应用开发新范式
  • 在Windows下使用lucky实现TLS/SSL证书自动化
  • 【深度学习优化算法】02:凸性 - 详解
  • 调了很久的代码总结
  • 在Windows上搭建 EasyTier 公共服务器
  • Transformer模型开发从0到1——原理深入与项目实践
  • 鸿蒙OS基于UniApp的区块链钱包创建实践:打造支持鸿蒙生态的Web3应用#三方框架 #Uniapp
  • CF700E
  • 价值弥漫:“AI元人文”的场域革命与共生之路
  • k8s之pod概念
  • 鸿蒙版Taro 搭建开发环境 - 教程
  • CF 1055 Div.1+Div.2
  • LUCKY STUN穿透在Windows上使用UPnP工具为BT客户端自动添加内外端口号不同的映射规则
  • 2026 NOI 做题记录(五)
  • ARC 207 (Div.1)
  • “齐俊杰投资智能体”更新完了9月份的资料
  • 联想电脑护眼卫士与系统颜色配置(X-Rite)冲突 | 显示设置频繁变换色阶 - 解决方案 - 指南
  • (转载)无人机飞行模式全面解析
  • InstructGPT 论文略读:三步走,让大模型真正听懂人话
  • LVS+Keepalived高可用群集 - 指南
  • luogu P1020 [NOIP 1999 提高组] 导弹拦截
  • RabbitMQ 离线安装