Spring Cloud微服务实战(五)-应用通信

简介: 订单服务源码https://github.com/Wasabi1234/SpringCloud_OrderDemo商品服务源码https://github.

1 HTTP vs RPC

img_89d0214f37d2623f59ddc93c4fde896d.png

img_7c1143cec9b1b674db8fe93b5d722bc8.png

5-2 RestTemplate的三种使用方式


img_505954a5dbd7fd838d7bf9b27c3ed8e0.png

img_3fc8c8ec5af6c8dd0514869a79894732.png

img_985b843c1d3c9049b4fce6cd277f8940.png

3 负载均衡器:Ribbion

img_0ae78e127b71563645a77fd3b4e82ba8.png

img_e61ad0c5702011a69f26f7df38b4c4ec.png

4 追踪源码自定义负载均衡策略

img_ffe5d73f039aee3fa856ce824558ac97.png
command+option+B进入其实现类

img_3743b45b399faa651da8781cbb379d3a.png
再跟进到 LoadBalancerClient 中

img_87d34e7a6ed044b1ca80f103293d90ae.png

img_2db4bec9e339b1e46b14dd2a6d640bd4.png

img_6c8dfb259f7f470a9ad7afab574e3a85.png
RibbonLoadBalancerClient#choose()

img_12bed7a01fb55f66a49eed4ed1162c7a.png
RibbonLoadBalancerClient#getServer(ILoadBalancer loadBalancer)

img_89257f76883ecf758d8175c0a8527a77.png

img_3fc59be0fc9a77da7bd595236505d1b1.png
ILoadBalancer

img_2e7808adcf8edb8a3eb360641023eb29.png
RibbonLoadBalancerClient#getServer(ILoadBalancer loadBalancer)

img_03412d3c924ca01caca98b1dac333e65.png

img_0aa87b7723fc757167820aa2f32541d3.png
ILoadBalancer#getAllServers(),并进入

启动两个 Product 服务


img_d32eb01359b6f8188d2f8d0db073aac8.png
product#1

img_2c44f3be9826c91cfee569084f808093.png
product#2

再 debug 启动 Order 服务


img_a9f78e443dc3495694fd2ee917831d0e.png

img_bb8526496fdc734a17a1ee2b9fc4ca0a.png
三个服务成功注册
img_430977bc18f9108b10c5a3a1343abf58.png
在此打断点,并 debug 运行

img_3ff5acc924edb069d75df90ce885048e.png

img_ca78984e975d1c1125c99007efe11908.png
获取服务列表
  • 再看看其负载均衡策略
    img_b9ccff8a8ff272c764d069603a753c5d.png

    img_734618031e04992f62690461a54a1d41.png
    可见默认即轮询

    负载均衡请求
    img_fb26b86420d573d4c6ed5be1bebbf353.png
    请求到2

    img_9845ba4fb972d7d61d48029205665d8c.png
    请求到1

    的确是轮询请求
    img_beb4861396c0532b625098a800e7b8ec.png

    img_2bc8d9a0d62d80049857d33599172272.png
    通过启动日志也可看出具体使用的策略

    为了检验是否为轮询,在此打断点
    img_bcc6fa4bcc22cc2640d0c0e4d36ef520.png

    img_1fb8e2e5d791bb4c07ebdc401541d743.png
    符合预期,确实为轮询

    如果希望使用其他负载均衡规则该咋办呢,看官网文档
    img_905d394a86034b39ac2f383de3e99aab.png

    img_b81380c57c112cde065949fb3d813c7f.png
    如希望用随机规则替代默认的轮询规则

    img_395e374adacce07b2187e3ce596934ff.png
    配置全路径名

    img_4519eb427cb092d97a07de09c118e68a.png
    成功替换默认规则

    5-5 Feign的使用
    Feign是一个声明式的Web服务客户端。这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并使用Spring Web中默认使用的HttpMessageConverters。Spring Cloud集成Ribbon和Eureka以在使用Feign时提供负载均衡的http客户端。
img_20d86a31c7c7b90d8a513b8474c76f93.png

如何加入Feign

  1. 要在您的项目中包含Feign,请使用组org.springframework.cloud和工件ID spring-cloud-starter-feign的启动器


    img_85d64e0ed06cf2cbb546d375f4a636d4.png
  2. 在启动类添加注解@EnableFeignClients
    可以在@EnableFeignClients属性defaultConfiguration中以与上述相似的方式指定默认配置。不同之处在于,此配置将适用于所有feigh客户端。


    img_ad9e0ea0ce20e105d7ec811cb618ad12.png

    调用商品服务的目标接口


    img_3636a6f46c68340d31276a573187777d.png
  3. 声明调用的服务接口方法
  • @FeignClient
    name属性为某所需调用的某个服务的接口
    @FeignClient注释中,String值(以上“存储”)是一个任意的客户端名称,用于创建Ribbon负载平衡器,还可以使用url属性(绝对值或只是主机名)指定URL。应用程序上下文中的bean的名称是该接口的完全限定名称。要指定自己的别名值,可以使用@FeignClient注释的qualifier值。
    img_b666d10d3d5a1a9abe740cdc78f940d0.png
    添加@FeignClient注解

5-6 获取商品列表(Feign)
5-7 扣库存(Feign)
5-8 整合接口打通下单流程(Feign)
5-9 项目改造成多模块
5-10 同步or异步
5-11 RabbitMQ的安装
5-12 微服务,Docker和DevOps

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
6月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
6月前
|
负载均衡 算法 Java
【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
1. 什么是服务治理? SpringCloud封装了Netfix开发的Eureka模块来实现服务治理 在传统pc的远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册
403 0
|
6月前
|
算法 Java 微服务
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
微服务架构是What?? 微服务架构是一种架构模式,它提出将单一应用程序划分为一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务允许在其独立的进程中,服务于服务间采用轻量级的通信机制互相协作(通常是Http协议的RESTful API或RPC协议)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建
624 126
|
6月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
471 8
|
6月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
1150 2
Spring Boot 3.x 微服务架构实战指南
|
7月前
|
监控 Java 数据库
从零学 Dropwizard:手把手搭轻量 Java 微服务,告别 Spring 臃肿
Dropwizard 整合 Jetty、Jersey 等成熟组件,开箱即用,无需复杂配置。轻量高效,启动快,资源占用少,内置监控、健康检查与安全防护,搭配 Docker 部署便捷,是构建生产级 Java 微服务的极简利器。
789 117
|
7月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
435 1
|
7月前
|
数据可视化 Java BI
将 Spring 微服务与 BI 工具集成:最佳实践
本文探讨了 Spring 微服务与商业智能(BI)工具集成的潜力与实践。随着微服务架构和数据分析需求的增长,Spring Boot 和 Spring Cloud 提供了构建可扩展、弹性服务的框架,而 BI 工具则增强了数据可视化与实时分析能力。文章介绍了 Spring 微服务的核心概念、BI 工具在企业中的作用,并深入分析了两者集成带来的优势,如实时数据处理、个性化报告、数据聚合与安全保障。同时,文中还总结了集成过程中的最佳实践,包括事件驱动架构、集中配置管理、数据安全控制、模块化设计与持续优化策略,旨在帮助企业构建高效、智能的数据驱动系统。
372 1
将 Spring 微服务与 BI 工具集成:最佳实践
|
7月前
|
存储 安全 Java
管理 Spring 微服务中的分布式会话
在微服务架构中,管理分布式会话是确保用户体验一致性和系统可扩展性的关键挑战。本文探讨了在 Spring 框架下实现分布式会话管理的多种方法,包括集中式会话存储和客户端会话存储(如 Cookie),并分析了它们的优缺点。同时,文章还涵盖了与分布式会话相关的安全考虑,如数据加密、令牌验证、安全 Cookie 政策以及服务间身份验证。此外,文中强调了分布式会话在提升系统可扩展性、增强可用性、实现数据一致性及优化资源利用方面的显著优势。通过合理选择会话管理策略,结合 Spring 提供的强大工具,开发人员可以在保证系统鲁棒性的同时,提供无缝的用户体验。
153 0
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
下一篇
开通oss服务