spring cloud(上)

1.实验目的
了解Spring Cloud的概念和特点
掌握Spring Cloud Eureka的使用
掌握Spring Cloud Ribbon的使用

2.实验环境 已经搭建好的java环境
实验内容即完成情况 4.1 :1.搭建Maven父工程
在Eclipse中,创建一个Maven父工程microservice-springcloud,并在工程的pom.xml文件中添加Spring Cloud的版本依赖等信息。
在这里插入图片描述
在这里插入图片描述
修改pom.xml文件
在这里插入图片描述

在这里插入图片描述
1.搭建服务端工程
在父工程microservice-springcloud中,创建Maven模块microservice-eureka-server作为服务端工程

在这里插入图片描述
在这里插入图片描述

(1)添加依赖。在pom.xml文件中添加Eureka Server的依赖
在这里插入图片描述

(2)编写配置文件。在配置文件中增加端口号等配置信息。
在这里插入图片描述
注册中心地址可以写为 http://localhost:8761/eureka/
上述代码中,首先配置了端口号为8761,所有服务的实例都需要向此端口注册。接下来配置实例名为localhost,由于本项目是一个注册中心,是不需要向自己注册和检索服务的,所以register-with-eureka和fetch-registry都需要设置为false.最后defaultZone中的地址是注册中心的地址。
(3)修改服务端java代码。在项目的引导类上添加注解@EnableEurekaServer,该注解用于声明标注类是一个Eureka Server,
在这里插入图片描述
(4)启动应用,查看信息。完成上述配置后,启动应用程序并在浏览器中访问地址http://localhost:8761/即可看到Eureka的信息面板

在这里插入图片描述
2.搭建客户端工程
在父工程microservice-springcloud中,创建maven子模块microservice-eureka-user作为客户端工程,该模块也是一个基础的Spring boot工程,其主要代码的实现过程如下。
(1)添加依赖。在pom.xml文件中添加依赖Eureka依赖

在这里插入图片描述
(2)编写配置文件。在配置文件中添加Eureka服务实例的端口号、服务端地址等信息

在这里插入图片描述
(3)修改客户端java代码。在项目的引导类上添加注解@EnableEurekaClient,该注解用于声明标注类是一个Eureka客户端组件

在这里插入图片描述
(4)启动应用,查看信息。完成上述配置后,分别启动服务端工程和客户端工程,在浏览器访问地址http://localhost:8761/后,我们可以看从Eureka的信息面板中看到注册的服务信息。

在这里插入图片描述
从上图中可以看到,服务已经成功注册到了注册中心,注册后的服务就可以被其他服务调用了。
需要注意的是,在本地调试基于Eureka的程序时,可能会在注册信息页面中出现红色警告信息
出现有关这样的警告信息EMERGENCY!EUREKA MAY BE INCORRECTLY CLAIMINGS INSTANCES ARE UP WHEN THEY’RE NOT.RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
在这里插入图片描述
是因为本地调试时触发了Eureka Server的自我保护机制。该机制会使注册中心所维护的实例不是很准确,所以本地开发时,可以在Eureka Server应用的配置文件中使用eureka.server.enable-self-preservation=false参数来关闭保护机制,以确保注册中心可以将不可用的实例正确删除。
4.2如何实现服务间的调用?
1.搭建订单服务工程
在父工程microservice-springcloud中,创建Maven子模块microservice-eureka-order,其主要代码的实现过程如下:
(1)在pom.xml中,添加spring-cloud-starter-eureka依赖

在这里插入图片描述
(2)编写配置文件。在配置文件中添加Eureka服务实例的端口号、服务端地址等信息
在这里插入图片描述
(3)编写启动类
在这里插入图片描述
(4)创建订单实体类。创建com.itheima.springcloud.po包,并在包中创建订单实体类Order
在这里插入图片描述
在这里插入图片描述
(5)创建订单控制器类。创建com.itheima.springcloud.controller包,并在包中创建订单控制器类OrderController。在该类中模拟编写一个通过id查询订单的方法。
在这里插入图片描述
(6)在引导类中添加@EnableEurekaClient注解。

2.编写用户服务功能
(1)在microservice-eureka-user工程的引导类中,创建RestTemplate的Spring实例,其代码如下

在这里插入图片描述
在上述代码中,RestTemplate是Spring提供用于访问Rest服务的客户端实例,它提供了多种便捷访问的远程Http服务的方法,能够大大提高客户端的编写效率。
(2)创建用户控制器类,并在类中编写查询方法
在这里插入图片描述
3.启动服务应用,测试服务调用
分别启动服务注册中心应用、订单服务应用和用户服务应用,此时Eureka信息页面的显示信息如图:
在这里插入图片描述
当通过浏览器访问地址http://localhost:8000/findOrdersByUser/1(1表示用户id)后,浏览器的显示效果如图:
在这里插入图片描述
通过访问用户服务,已经成功查询到了与用户相关的订单信息。
4.3 客户端负载均衡
在Eureka中使用Ribbon十分简单,只需要在实例化RestTemplate的方法上添加@LoadBalanced注解,并在其执行方法中使用服务实例的名称即可。具体实现过程如下:
(1)添加@LoadBalanced注解。在microservice-eureka-user工程的引导类中的restTemplate()方法上添加@LoadBalanced注解,其代码如下:
在这里插入图片描述

在上述代码中,RestTemplate被@LoadBalanced注解后,就具有了负载均衡的能力。
(2)使用服务实例名称。在用户服务实例的查询方法中,使用服务提供者(订单服务)的实例名称来执行已注册服务列表中实例的方法。
在这里插入图片描述
从上述代码中可以看出 ,getForObject()方法中的URL中使用的已经不是“主机地址+端口号”的形式,而使用的是注册中心中的订单服务实例名称。
(3)创建监听器类。为了演示负载均衡的实现效果,这里在microservice-eureka-order工程中创建一个用于监听服务实例端口的工具类ServiceInfoUtil,其实现代码如下。
在这里插入图片描述
上述工具类实现了ApplicationListener接口,该接口在Spring3.0中添加了泛型来声明所需要监听的事件类型,其中EmbeddedServletContainerInitializedEvent主要用于获取运行服务器的本地端口号。
(4)添加输出语句。在订单控制器类OrderController的查询订单方法中,增加一行执行输出当前实例端口号的语句。具体如下:

在这里插入图片描述
(5)启动服务,测试应用。分别启动注册中心、用户服务和订单服务,然后修改订单服务的端口号(如7901),再次启动一个订单服务后,Eureka信息页面的注册信息如图所示:
在这里插入图片描述

当通过浏览器连续4次访问地址http://localhost:8000/findOrdersByUser/1后,两个应用的Eclipse控制台的输出结果如图:

在这里插入图片描述
在这里插入图片描述
在浏览器连续访问4次后,用户服务实例通过Ribbon分别调用了2次端口为7900和7901的订单服务实例,这说明已成功通过Ribbon实现了客户端的负载均衡。其实Ribbon在工作主要分为两步:第一步先选择Eureka Server,它会优先选择在同一个区域且负载较少的Server;第二步会根据用户指定的策略(如轮询、随机等)从Server取到的注册服务列表中选择一个地址。本案例中,Ribbon所使用的策略就是轮询。
总结
未完待续!多多点赞转发哦!如果有更好的学习心得欢迎留言评论
来者不拒 …

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值