Spring Cloud系列教程之初体验

简介

为初次接触Spring Cloud的同学准备的系列教程,从应用场景、编码实战等方面介绍其中的各个组件。

Spring Cloud是一套完整的微服务解决方案,是一系列不同功能的微服务框架的集合。

Spring Cloud基于Spring Boot,简化了分布式系统的开发,集成了服务发现、配置管理、消息总线、负载均衡、断路器、数据监控等各种服务治理能力。比如sleuth提供了全链路追踪能力,Netflix套件提供了hystrix熔断器、zuul网关等众多的治理组件。config组件提供了动态配置能力,bus组件支持使用RabbitMQ、kafka、Activemq等消息队列,实现分布式服务之间的事件通信。

Spring Cloud高可用架构

基础组件1-Eureka server

这个是微服务的通讯录(注册中心),既然是微服务,那么在调用别的微服务的时候肯定需要其他微服务的地址、端口等信息,而这些信息都有Eureka Server来管理。

而Eureka Server的启动比较简单,作为一个Spring boot类型的项目来启动。

对于习惯了Dubbo开发的同学来说,在使用Spring Cloud时遇到的第一个不习惯的地方就是,注册中心Eureka不是一个像Zookeeper那样独立运行的中间件,而是可以用Springboot来启动运行,有点类似于嵌入式的tomcat,这是Spring Cloud体系的一大特点,除了注册中心还有网关Zuul也是类似的启动方式。

欢迎工作一到五年的Java工程师朋友们加入Java架构开发:828697593

本群提供免费的学习指导 架构资料 以及免费的解答

不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导

同时大家可以多多关注一下小编 纯干货 大家一起学习进步

基本的server

  1. 引入pom文件
 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. 增加启动类注解
@EnableEurekaServer
@SpringBootApplication
public class PlatformEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(PlatformEurekaApplication.class, args);
}
}
  1. 配置yml文件
  • 默认yml
server:
port: 7001 #(eureka 默认端口为:8761)
spring:
application:
name: platform-eureka #服务名
eureka:
instance:
#服务失效时间,Eureka多长时间没收到服务的renew操作,就剔除该服务,默认90秒
leaseExpirationDurationInSeconds: 15
ip-address: ${spring.cloud.client.ip-address}
hostname: ${eureka.instance.ip-address}
instanceId: ${eureka.instance.ip-address}:${server.port}
preferIpAddress: true #将IP注册到Eureka Server上
client:
#是否注册自身到eureka服务器,因为当前这个应用就是eureka服务器,没必要注册自身,所以这里是false
registerWithEureka: false
fetchRegistry: false #表示是否从eureka服务器获取注册信息
serviceUrl:
#是设置eureka服务器所在的地址,查询服务和注册服务都需要依赖这个地址(注意:地址最后面的 /eureka/ 这个是固定值)
defaultZone: http://${eureka.instance.ip-address}:${server.port}/eureka/
server:
#设为false,关闭自我保护,开发测试环境需要频繁启动注册实例,需要关闭自我保护功能,以免请求跑到旧实例中,生成环境需要开启自我保护功能
enableSelfPreservation: false
#eureka server清理无效节点的时间间隔,默认60000毫秒,即60秒
eviction-interval-timer-in-ms: 5000
# 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
eureka.server.evictionIntervalTimerInMs: 20000
  • dev.yml
eureka:
instance:
ip-address: 127.0.0.1
# Spring Cloud应用监控与管理Actuator
management:
endpoints:
enabled-by-default: true
web:
exposure:
include: "*"

增加安全监控 http://xxx/Actuator

  1. 修改pom
 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 修改yml
# Spring Cloud应用监控与管理Actuator
management:
endpoints:
enabled-by-default: true
web:
exposure:
include: "*"

增加安全认证

  1. 引入安全模块的pom
 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. 修改yml文件
security:
basic:
enabled: true # 开启基于HTTP basic的认证
user:
name: user # 配置登录的账号是user
password: password123 #配置登录的密码是password123

基础组件2-Eureka client之服务提供者

服务提供者要作为Eureka的客户端在注册中心注册为服务提供者,这里重点是注册自己的名字和服务地址。

  1. 引入pom
 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 默认yml
server:
port: ${server.port}
spring:
application:
name: platform-user
eureka:
instance:
ip-address: ${spring.cloud.client.ip-address}
hostname: ${eureka.instance.ip-address}
instanceId: ${eureka.instance.ip-address}:${server.port}
prefer-ip-address: true
registry.default-open-for-traffic-count: ${eureka.instance.registry.default-open-for-traffic-count}
registry.expected-number-of-renews-per-min: ${eureka.instance.registry.expected-number-of-renews-per-min}
client:
enabled: true
serviceUrl:
defaultZone: ${eureka.client.serviceUrl.defaultZone}
  1. dev.yml
server:
port: 7081
spring:
profiles: dev
eureka:
instance:
ip-address: 127.0.0.1
registry.default-open-for-traffic-count: 1
registry.expected-number-of-renews-per-min: 1
client:
serviceUrl:
defaultZone: http://127.0.0.1:7001/eureka/
management:
endpoints:
enabled-by-default: true
web:
exposure:
include: "*"
  1. 增加注解
@EnableDiscoveryClient
@SpringBootApplication
@EnableTransactionManagement
@MapperScan("com.itcast.mapper")
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}

注意:

从Spring Cloud Edgware开始,@EnableDiscoveryClient 或@EnableEurekaClient 可省略。只需加上相关依赖,并进行相应配置,即可将微服务注册到服务发现组件上。

@EnableDiscoveryClient和@EnableEurekaClient共同点就是:都是能够让注册中心能够发现,扫描到改服务。

不同点:@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。

基础组件3-Eureka client之服务消费者

通过注册中心查找自己需要的服务地址,就想提供名字查电话一样。

与服务提供者的编写方式基本一致。为了后面增加网关支持的方便,这里面的服务消费者本身也是服务提供者。

基础组件4-Feign

在消费者中使用,简化Http API的调用,使消费者调用服务提供者就想调用本地接口一样方便。

Spring Cloud对原生Feign进行了整合。

  1. 引入pom
 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 增加注解
  2. @EnableFeignClients
  3. 按照服务提供者对应服务协议编写对应接口(不用实现)
@FeignClient(name = "PLATFORM-USER")
public interface UserService {
/***
* 用户信息查询
*/
@GetMapping(value = "/user/search")
public String searchUser(@RequestParam("userName") String userName);
}
  1. 像本地方法一样调用
 @Autowired
private UserService userService;
// 业务代码
strJson = userService.searchUser(orderInfo.getUserName());

基础组件5-Hystrix

Feign中已经支持Hystrix,当服务提供者出现故障时,Hystrix会自动切换到备胎方案。

  1. 增加fallback参数
  2. @FeignClient(name = "PLATFORM-USER", fallback = UserServiceFallbackImpl.class)
  3. 实现备胎代码
@Component
//@Service
public class UserServiceFallbackImpl implements UserService {
private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceFallbackImpl.class);
@Override
public String searchUser(String userName){
LOGGER.error("用户信息查询接口调用异常:searchUser");
return JsonUtils.toText(ResponseUtils.failure("调用用户信息查询接口服务异常!"));
}
}

竟然都看到最后了,给小编点个关注吧,小编还会持续更新的,只收藏不点关注的都是在耍流氓!

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();