Spring Cloud微服务-基于Eureka的feign调用(1)
全文概览
本章是为后续的深度学习做准备工作
主要包含以下内容
开发三个简单应用,包括:注册中心、服务提供方、服务消费方,后续研究和实战都在这三个应用基础上进行;
SpringCloud主要框架
服务发现——Netflix Eureka
服务调用——Netflix Feign
熔断器——Netflix Hystrix
服务网关——Netflix Zuul
分布式配置——Spring Cloud Config
消息总线 —— Spring Cloud Bus
版本列表
- JDK:1.8;
- spring boot:2.0.1.RELEASE;
- spring cloud:Finchley.M9;
服务发现组件 Eureka
Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目
spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含两个组件:
Eureka Server和Eureka Client。
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注
册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点
的信息可以在界面中直观的看到。
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也
就别一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会
向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有
接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90
秒)。
Eureka注册中心
(1)创建eureka模块
(2)引入依赖 父工程pom.xml定义Spring Boot与Spring Cloud版本
eureka模块pom.xml引入eureka-server
(3)添加application.yml
(4)编写启动类
创建包com.qiang.eureka ,包下建立启动类EurekaServer或EurekaApplication
*注意注解:@EnableEurekaServer
(5)启动运行启动类,然后在浏览器地址栏输入 http://localhost:6868/ 运行效果如下:
主界面中system status为系统信息 General Info为一般信息
Instances currently registered with Eureka为注册到的所有微服务列表
我们现在就将一些微服务都注册到Eureka中,这样所有的微服务之间都可以互相调用了。
提供者微服务开发
(1)创建provider模块,引入eureka-client依赖
(2)添加application.yml
(3)编写Controller层,随便写点东西.
(4)编写启动类ProviderApplication
*注意注解:@EnableEurekaClient
(5)启动运行启动类,此时刷新http://localhost:6868/,然后就会发现,这个微服务已经被注册至服务中心了
然后我们试着运行provider模块的接口:localhost:12003/admin/findAll/5/1,运行效果如下
嗯,运行成功,高兴吗^_^
接着我们写一个消费者,这里需讲述清楚几点
1、不管消费者还是提供者,他们都是一个微服务,他们都“各自为政”
2、当微服务之间需要互相调用接口时,他们才会有消费者与提供者的“身份”
3、被调用接口的所属微服务为“提供者”,反之为“消费者”
4、只有当服务都注册进Eureka注册中心时,才能相互调用,或者说相互“发现”服务
消费者微服务开发
(1)创建feign模块,引入eureka-client依赖与openfeign依赖
(2)添加application.yml
(3)编写启动类FeignApplication
*注意注解:@EnableDiscoveryClient 发现服务
@EnableFeignClients 使用feign发现服务
此时可不写@EnableEurekaClient,上面两个注解会实现将此服务注册进服务中心
但是eureka-client依赖一定要引入
(4)在feign模块添加client包,包下创建接口PClient(ProviderClient)
@FeignClient注解用于指定从哪个服务中调用功能 ,注意 里面的名称与被调用的服务
名保持一致,并且不能包含下划线。
@RequestMapping注解用于对被调用的微服务进行地址映射。注意 @PathVariable注
解一定要指定参数名称,否则出错
(5)编写FeignController
(6)启动运行类,此时再次刷新http://localhost:6868,会发现feign微服务已经被注册进去
然后我们试着运行feign模块的接口:localhost:12001/feign/admin/findAll/5/1,运行效果如下
成功√