菜鸟的微服务之旅(3)---springCloud(2)

上文我们留下了一个小小的问题:就是如何实现服务之间的相互调用呢?

那本文我们就先将这部分功能实现过程记录下来,供大家参考。

之前,我们有讲过这么一句话--服务消费者在运行时会去注册中心获取服务列表,然后通过暴露的路径知道去哪里调用服务,就之前写的案例而言,当前我们的注册中心只有一个client的服务节点,要实现服务间的互相调用,起码要两个吧。那我们就先仿照client子项目来创建一个order服务,并将其注册到注册中心

一,创建springcloud-eureka-order项目(跟client大致一样)

在父工程下创建maven子模块springcloud-eureka-order服务端工程,该模块是一个基础的springboot工程。

1.添加依赖

pom.xml

2.编写配置文件

application.yml

设置好服务的端口号

3.创建order实体类

给出字段名,getter和setter方法就省略了。

3.创建order控制器,并模拟写一个通过id查询订单的方法

4.记得在引导类添加注解@EnableEurekaClient标明该类是一个Eureka客户端组件

这样一来我们的order服务就完成了。

二,重新编辑client服务,用来调用order服务

1.在引导类中,创建RestTemplate的Spring实例

RestTemplate是spring提供的用于访问rest服务的客户端实例,它提供了多种便捷访问远程HTTP服务的方法,能够大大提高客户端的编写效率。

2.创建客户端控制器,并调用order服务

模拟用户查询订单号为“1”的订单信息

restTemplate通过地址调用order服务

3.运行注册中心,订单服务,以及客户端服务应用

此时注册中心应该是这样子:

我们可以看到两个服务都已经注册进来了。

用postman测试下接口,发现已经可以通过客户端控制器调用order服务了

三,关于客户端的负载均衡(Ribbon)

在分布式架构中,服务器端负载均衡通常是用nginx实现分发请求的,而客户端的同一个实例部署在多个应用上时,也需要实现负载均衡。springcloud也提供了实现负载均衡的组件ribbon。

Ribbon会利用从Eureka读取到的服务信息列表,在调用服务实例的时候,以合理的方式(默认轮询)进行负载。

Ribbon的使用方法很简单,两步走:1在需要的实例化RestTemplate的方法上添加@LoadBalanced注解,2并在其执行方法中使用服务实例的名称即可。

添加注解@LoadBalanced

原本调用order服务访问路径(ip+port)

改变成访问服务实例名字

到了这里,基本上我们的order服务就实现了负载均衡,为了能够看到它轮询的效果,以下就创建一个服务监听类。通过调用的端口号来看其实现负载均衡的效果。

1.服务监听类如下,监听本地运行的端口号,就知道调用哪个端口的服务

2.在OrderController中调用获取端口号的方法,输出到控制台。

注册中心有两个不同端口的服务(启动7900服务后,修改.yml配置中端口号为7901,然后也启动)

执行四次请求时,控制台的输入如下:

这样子我们可能看到请求会按照一定的策略分发给不同端口的服务。

----本文读《微服务架构基础》有感,引用其内容作为笔记记录 供广大学者参考学习。如有侵权,请及时告知。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值