开发者学堂课程【微服务框架 Spring Cloud 快速入门:Ribbon 配置初步】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/614/detail/9354
Ribbon配置初步
内容介绍
一、 具体过程
二、 测试
三、 总结
一、具体过程
学习 Ribbon 时要考虑的思路:
GAV-maven 添加新的 maven 路标。
@EnableXXX,XXX与 Rubbon有关。
1、修改 pom.xml 文件
Ribbon 是客户端,所以应该找到
mincroservicecloud-consumer-dept-80修改 pom.xml 文件,添加 Ribbon 相关的内容。
在 80 的 pom.xml 中添加相应的 Ribbon 配置和 GAV 坐标,如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
// eureka 后没加 server 说明它是客户端。理由:Ribbon 需要和 eureka 整合,类似于 java 访问 mysql 数据库,中间必须加. JDBC 驱动包。 starter-ribbon 才是 ribbon 的自身,eureka 和starter-config 之间存在联系。
在书写代码时,形成先修改 pom.yml 的习惯,这样先保证架子的正确,再填写 role 。
2、修改 application.yml,追加 eureka 的服务注册地址
找到 mincroservicecloud-consumer-dept-80,80要先找到 eureka 才能返回微服务。之前80只有一个端口。现在要求80,客户端模式和访问路线改变了,不能直接寻找 mincroservicecloud-provider -dept-8001,要先通过mincroservicecloud-
eureka
-
7
001
,
mincroservicecloud-eureka -7002
,
mincroservicecloud-eureka -
7
003
代码如下:
Server:
Port
:
80
server:eureka:
client:
register-with-eureka:false
service-url:
defaultZone
:http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
//有 eureka client 端,自己不能注册。现在 eureka 不是单机版,是集群。这里全部用集群讲解,比如7001,7002,7003。
完成配置后,打开80,DeptConsumer80.App.java 是主启动类,在 DeptController. Consumer.java 中:
//在80后直接 DeptController_Consumer
@
R
estController
public class DeptController_Consumer
//restTemplate 没有业务逻辑,只通过 rest 调用访问。
@
A
utowired
private RestTemplate restTemplate;
Controller 只是外面的架子,发挥作用的是 RestTemplate。RestTemplate 来源于 ConfigBean.java中的 Public RestTemplate get RestTemplate()
//要求客户端通过 rest 访问微服务时自带负载均衡,通过配置@LoadBalanced 注解即可。Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端,负载均衡的工具。
@LoadBalanced
Public RestTemplate get RestTemplate()
以上,完成真正的通过微服务名字从 eureka 上找到并访问。
3、主启动类Deptconsumer80_App添加@EnableEurekaClient
现在需要和 eureka 整合,而且是在 Client 端。
@EnableEurekaClient
P
ublic
class
Deptconsumer80_App
{
Public ststic void main(String
[
] args)
{
S
pringApplication.run(Deptconsumer80_App.class,args);
}
}
4、修改 DeptController_consumer 客户端访问类
之前的代码书写是从简单到复杂,从类似于 ACOA 的调服务到真正的通过微服务:
private ststic final String
REST_URL_PREFIX=
http://localost:8001
;
这种写法是错误的。http://localost:8001; 是写死的端口地址加Ip,在spring Eureak网站中有 MICRSEVICECLOUD-DEPT 名字,所以这里的访问类是把 http://MICRSEVICECLOUD-DEPT改为微服务名。
//标准的微服务访问代码书写:
private ststic final String
REST_URL_PREFIX=http://MICRSEVICECLOUD-DEPT;
先启动3个 eureka 集群后,再启动microservicecloud-provider-dept-8001并注册进 eureka。如果注册成功,集群环境就没有问题。
5、启动 microservicecloud-consumer -dept-80消费端
测试能否通过微服务的真实名字获得访问。按照7001,7002,7003,8001微服务,80客服端的顺序 Run As。启动这五个微服务可能会耗光8G的内存。
二、测试
进入网站:http://localhost/consumer/dept/get/1
访问结果如下,表示这段代码通过修改后的微服务名可以获得访问。
刷新 eureka ,在 eureka7003.com7003中出现了以下结果。
表面上 rest 的地址还是http://localhost/consumer/dept/get/1但是现在不再使用写死的地址找8001调用。在 eureka 上查找到名字为 MICRSEVICECLOUD-DEPT 的微服务获得答案。在以下网站中演示都可以成功,这里不做具体演示。
http://localhost/consumer/dept/get/1
http://localhost/consumer/dept/list
http://localhost/consumer/dept/add?dname
=大数据部
三、总结
Ribbon 和 Eureka 整合后 Consumer可以直接调用服务而不用关心地址和端口号。
地址变成微服务名进行访问:
private ststic final String REST_URL_PREFIX=http://MICRSEVICEC
L
OUD-DEPT;