springCloud 整理(一) eureka feign"/>
springCloud 整理(一) eureka feign
springCloud 整理(一)
文章目录
- springCloud 整理(一)
- 1 springCloud
- 1.1 springcloud介绍
- 1.2 springboot 和springCloud 之间的关系
- 1.3 springCloud 主要框架
- 1.4 Spring Cloud和Dubbo对比
- 1.5 springCloud的版本
- 2 服务发现组件 Eureka
- 2.1 Eureka
- 2.2 Eureka服务端开发
- 2.3 Eureka 服务 注册
- 2.4 保护机制
- 3 Feign实现服务间的调用
- 3.1 案例构建
- 3.2 导入依赖
- 3.3 在启动类添加注解
- 3.4 编写接口
- 3.5 控制层
- 3.6 测试结果
- 3.7 运维的福音
1 springCloud
1.1 springcloud介绍
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
springcloud官方网站
1.2 springboot 和springCloud 之间的关系
Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;
Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;
Spring Boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring Boot来实现,可以不基于Spring Boot吗?不可以。
Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系。
1.3 springCloud 主要框架
- 服务发现–Netflix Eureka 南京话:依维柯
- 服务调用——Netflix Feign :
- 熔断器——Netflix Hystrix
- 服务网关——Netflix Zuul
- 分布式配置——Spring Cloud Config
- 消息总线 —— Spring Cloud Bus
1.4 Spring Cloud和Dubbo对比
Spring Cloud和Dubbo的对比有点不公平,Dubbo只是实现了服务治理,而Spring Cloud下面有17个子项目(可能还会新增)分别覆盖了微服务架构下的方方面面,服务治理只是其中的一个方面,一定程度来说,Dubbo只是Spring CloudNetflix中的一个子集。
Dubbo | springCloud | |
---|---|---|
服务注册中心 | Zookeeper | Netflix Eureka |
服务调用方式 | RPC | REST API |
服务网关 | 无 | Netflix Zuul |
熔断器 | 不完善 | Netflix Hystrix |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
1.5 springCloud的版本
Spring Boot | Spring Cloud |
---|---|
1.2.x | Angel版本 |
1.3.x | Brixton版本 |
1.4.x | Camden版本 |
1.5.x | Dalston版本、Edgware版本 |
2.0.x | Finchley版本 |
2 服务发现组件 Eureka
2.1 Eureka
Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含两个组件:
-
Eureka Server
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样eurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
-
Eureka Client
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就别一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90
秒)。
2.2 Eureka服务端开发
- 引入依赖 父工程pom.xml 定义spingCould版本
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring‐cloud‐dependencies</artifactId><version>Finchley.M9</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
- 创建boot-eureka 模块
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
</dependencies>
- 添加配置文件
server:port: 6868
eureka:client:register-with-eureka: false #s是否将自己注册到服务中,本身就是服务不需要注册fetch-registry: false # 是否从服务器端获取注册信息service-url:defaultZone: http://127.0.0.1:${server.port}/eureka/
4)编写启动类
package com.liu.eureka;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloudflix.eureka.server.EnableEurekaServer;/*** springCloud 祖册发现服务中心就搞定了*/
@SpringBootApplication
@EnableEurekaServer // eureka 服务
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class,args);}}
5)运行启动类,测试 localhost:6868
2.3 Eureka 服务 注册
将微服务模块注册到Eureka 服务中心,这样我们的微服务就能互相之间调用了
1)添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
- 添加配置文件
eureka:client:service-url:defaultZone: http://127.0.0.1:6868/eureka/instance:prefer-ip-address: true #跨域访问
3)启动类中添加
@EnableEurekaClient //说明是客户端需要被发现的微服务
4) 通过以上的三部曲,我们就很方便的在服务管理中发现我们注册的三个服务
这里我之前帖子中涉及的10个小模块都注册了,建议把常用的小模块 没事都谢谢,下次有需要直接搞下来
docker容器中的服务开启的服务: redis、mongo、es、mysql、es-head
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
894c19980c8d rabbitmq:management "docker-entrypoint..." 2 days ago Up About an hour 0.0.0.0:4369->4369/tcp, 0.0.0.0:5672->5672/tcp, 0.0.0.0:15671-15672->15671-15672/tcp, 0.0.0.0:25672->25672/tcp, 5671/tcp, 0.0.0.0:5671->5617/tcp liubijun_rabbitmq
89227b3809e8 mobz/elasticsearch-head:5 "/bin/sh -c 'grunt..." 2 days ago Up 12 minutes 0.0.0.0:9100->9100/tcp liubijun_es_head
c4de8f237ce0 elasticsearch:5.6.8 "/docker-entrypoin..." 2 days ago Up 13 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp liubijun_el
6f1fc5d13f54 mongo "docker-entrypoint..." 3 months ago Up 22 minutes 0.0.0.0:27017->27017/tcp liubijun_mongo
c34d96964e7e redis "docker-entrypoint..." 4 months ago Up About an hour 0.0.0.0:6379->6379/tcp liubijun_redis
0a816c1be4f2 mysql "docker-entrypoint..." 4 months ago Up About an hour 0.0.0.0:3306->3306/tcp, 33060/tcp liubijun_mysql
[root@localhost ~]#
注意:在服务名称命名的时候,别用下划线。要不然服务找不见,别怨我
2.4 保护机制
上面截图中,有红色报警,我查了资料是,一下原因引起的。不用太在意。
Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会将当前的实例注册信息保护起来,同时提示这个警告。保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。
3 Feign实现服务间的调用
Feign是简化Java HTTP客户端开发的工具(java-to-httpclient-binder),它的灵感来自于Retrofit、JAXRS-2.0和WebSocket。Feign的初衷是降低统一绑定Denominator到HTTP API的复杂度,不区分是否为restful
3.1 案例构建
我们在之前构建的boot-user 模块中调用boot-base模块中的接口数据。我们对于boot-base模块中的数据不需要任何修改,只需要在boot-user模块中,做如下调整:
3.2 导入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3.3 在启动类添加注解
@EnableDiscoveryClient
@EnableFeignClients
3.4 编写接口
package com.liu.user.client;import com.liumon.entity.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;/*** Created by Administrator on 2019/8/23 0023.*/
@FeignClient("boot-base")
public interface LabelClient {@RequestMapping(value = "/label",method = RequestMethod.GET)public Result findAll();}
注意: 如果path 路径提到@FeignClient(path="/label") ,@requestMapping 中可以不写路径
3.5 控制层
@Autowiredprivate LabelClient labelClient;@GetMapping("/label")public Result findLableAll(){Result result =labelClient.findAll();System.out.println("我进入该方法了");return result;}
3.6 测试结果
3.7 运维的福音
在springcloud 开发的项目中,被调用微服务启动多个,但是调用方可以,自动负载均衡调用注册到服务中心的微服务。不需要再Nginx中配置负载均衡了 。项目实施难度降低很多。
更多推荐
springCloud 整理(一) eureka feign
发布评论