0
点赞
收藏
分享

微信扫一扫

Spring Cloud Alibaba 微服务生态基础实践

闲云困兽 2022-04-21 阅读 81

端口

server:

port: 8090

Spring配置

spring:

application:

name: user-consumer

cloud:

nacos:

discovery:

server-addr: 172.16.109.118:8848

enabled: true

调用微服务超时时间设置

ribbon:

ConnectTimeout: 5000

ReadTimeout: 5000

feign日志以什么级别监控哪个接口

logging:

level:

nacos.democonsumer.GoodService : debug

商品微服务地址

service:

url=http://goods-service/

  • 通过 Spring Cloud Alibaba原生注解 @EnableDiscoveryClient 开启服务发现功能,并向Spring注册一个RestTemplate Bean

@EnableDiscoveryClient

@SpringBootApplication

public class DemoConsumerApplication {

// 向Spring注册一个RestTemplate Bean

@Bean

// 负载均衡

@LoadBalanced

RestTemplate restTemplate(){

return new RestTemplate();

}

public static void main(String[] args) {

SpringApplication.run(DemoConsumerApplication.class, args);

}

}

  • 创建Restful测试接口,通过该测试接口可发现并调用Nacos中注册的商品信息微服务

/**

  • 用户消费者–调用nacos服务中心的商品信息微服务,并对外提供RestFul接口测试

*/

@RestController

@RequestMapping(“user/”)

public class UserConsumer {

@Autowired

private RestTemplate restTemplate;

@Value(“${service.url}”)

private String url;

@GetMapping(“/goods”)

public User getUserGoods() {

User user = new User();

// 调用商品微服务

Object response = restTemplate.getForEntity(url + “api/goods”, Object.class).getBody();

try {

user.setName(“jack”);

user.setGoods((List) response);

} catch (Exception e){

throw new RuntimeException(e.getMessage());

}

return user;

}

}

  • 运行服务消费者程序,并打开HttpClient工具进行测试 

[](()3.4 Nacos小结

  • Spring Cloud Alibaba 的Nacos组件可以完美取代Eureka做为微服务发现及注册的基础框架。

  • 通过Nacos特性大图中,我们还可以了解到,Nacos除了服务发现的框架,还能做到配置管理,DNS服务等功能。 

[](()四、Sentinel的基础实践


[](()4.1 安装Sentinel监控

  • 通过[https://github.com/alibaba/Sentinel/releases](()下载jar包

下载服务端

wget https://github.com/alibaba/Sentinel/releases/download/v1.8.0/sentinel- dashboard-1.8.0.jar

启动服务(默认端口为8080)

java -jar sentinel-dashboard-1.8.0.jar

  • 登录控制台,默认用户名与密码为sentinel 

[](()4.2 通过Sentinel对微服务提供方进行流量控制

  • 对原有商品信息微服务提供者增加Sentinel依赖

com.alibaba.cloud

spring-cloud-starter-alibaba-sentinel

  • 修改项目配置文件application.yml增加Sentinel控制台地址

server:

port: 8083

spring:

application:

name: goods-service

cloud:

nacos服务注册

nacos:

discovery:

server-addr: 172.16.109.118:8848

sentinel服务

sentinel:

transport:

dashboard: 172.16.109.118:8080

  • 运行微服务程序,通过Nacos控制台观察微服务注册信息 

  • 我们再通过HttpClient工具访问一下微服务的Api端口,并进入Sentinel控制台进行监控:在控制台中,我们发现了服务名称,及该服务下的各种规则设置菜单。 

[](()4.2.1 通过JMeter模拟高并发流量

  • 设置20000个并发请求 

  • 设置HTTP请求地址: 

  • 设置报告输出 

  • 启动JMeter,观察Sentinel控制台,可以看到QPS的实时状况。 

[](()4.2.2 设置流控规则进行流量控制

  • 对Sentinel控制台中服务的资源增加流量控制规则 

  • 给微服务接口的QPS设置阈值 

  • 再次启动JMeter进行高并发测试,在控制台中进行观察,可以看到服务接口的QPS被限制在阈值以下。 

  • JMeter结果列表中可以观察到异常信息。 

[](()4.2.3 设置降级规则进行流量控制

  • 对Sentinel控制台中服务的资源增加熔断降级规则 
  • 在实时监控界面可以看到请求被拒绝,证明熔断降级规则生效 

  • 在JMeter结果表格中也出现了大量失败的调用请求 

[](()4.3 通过Sentinel对微服务调用方进行流量控制

  • Sentinel流程控制组件除了可以在微服务端进行必要的流量控制外,也可以在服务调用方的客户端进行控。,

  • 微服务调用方加入OpenFeign组件

<-- pom.xml -->

org.springframework.cloud

spring-cloud-starter-openfeign

2.2.5.RELEASE

  • 项目配置

server:

port: 8090

spring:

application:

name: user-consumer

cloud:

nacos:

discovery:

server-addr: 172.16.109.118:8848

sentinel服务

sentinel:

transport:

dashboard: 172.16.109.118:8080

调用微服务超时时间设置

ribbon:

ConnectTimeout: 5000

ReadTimeout: 5000

feign日志以什么级别监控哪个接口

logging:

level:

nacos.democonsumer.GoodService : debug

启用sentinel

feign:

sentinel:

enabled: true

  • 主启动类增加注解

/**

  • 主启动类

*/

// 启用Feign组件

@EnableFeignClients

@EnableDiscoveryClient

@SpringBootApplication

public class DemoConsumerApplication {

public static void main(String[] args) {

SpringApplication.run(DemoConsumerApplication.class, args);

}

}

  • 参照Nacos中注册的服务名,在服务调用者程序中映射微服务接口, 并通过@FeignClient调用微服务,同时定义服务熔断时如何处理(fallback) [图片上传失败…(image-fb969-1600308219546)]

/**

  • 映射商品微服务接口

*/

@Component

// 增加服务容错处理,指定服务熔断时处理的类名

@FeignClient(value=“goods-service”,fallback =FallBackService.class )

public interface GoodService {

@GetMapping(value=“/api/goods”)

List getGoods();

}

/**

  • 服务熔断处理:返回空值

*/

@Component

public class FallBackService implements GoodService {

private final static Logger logger= LoggerFactory.getLogger(FallBackService.class) ;

@Override

public List getGoods() {

logger.info(“服务已熔断…”);

return new ArrayList<>();

}

}

  • 服务调用者调用程序无需变化

/**

  • 用户消费者–调用nacos服务中心的商品服务,并对外提供RestFul接口测试

*/

@RestController

@RequestMapping(“user/”)

public class UserConsumer {

// 注入商品微服务接品

@Autowired

private GoodService goodService;

@GetMapping(“/goods”)

public User getUserGoods() {

User user = new User();

// 通过GoodsService接口调用商品微服务

try {

List goods = goodService.getGoods();

user.setName(“jack”);

user.setGoods(goods);

} catch (Exception e){

throw new RuntimeException(e.getMessage());

}

return user;

}

难道这样就够了吗?不,远远不够!

提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。

备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记

我为什么要写这篇文章呢,其实我觉得学习是不能停下脚步的,在网络上和大家一起分享,一起讨论,不单单可以遇到更多一样的人,还可以扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。

今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

image.png

用商品微服务

try {

List goods = goodService.getGoods();

user.setName(“jack”);

user.setGoods(goods);

} catch (Exception e){

throw new RuntimeException(e.getMessage());

}

return user;

}

难道这样就够了吗?不,远远不够!

提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。

备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记

我为什么要写这篇文章呢,其实我觉得学习是不能停下脚步的,在网络上和大家一起分享,一起讨论,不单单可以遇到更多一样的人,还可以扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。

今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!

[外链图片转存中…(img-YQCMwrOz-1650439268251)]

[外链图片转存中…(img-Vfi7u4Tq-1650439268252)]

[外链图片转存中…(img-x5ZWNbnR-1650439268253)]

举报

相关推荐

0 条评论