在上一篇文章讲了服务的注册和发现。在微服务架构中业务都会被拆分成一个独立的服务服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式一种是ribbon+restTemplate另一种是feign。在这一篇文章首先讲解下基于ribbon+rest。
一、ribbon简介
Ribbon is a client side load balancer which gives you a lot of control
over the behaviour of HTTP and TCP clients. Feign already uses Ribbon,
so if you are using @FeignClient then this section also applies.
-----摘自官网
ribbon是一个负载均衡客户端可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。
ribbon 已经默认实现了这些配置bean
IClientConfig ribbonClientConfig: DefaultClientConfigImpl
IRule ribbonRule: ZoneAvoidanceRule
IPing ribbonPing: NoOpPing
ServerList ribbonServerList: ConfigurationBasedServerList
ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter
ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer
二、准备工作
这一篇文章基于上一篇文章的工程启动eureka-server 工程启动service-hi工程它的端口为8762将service-hi的配置文件的端口改为8763,并启动了解springcloud架构可以加求求三五三六二四七二五九这时你会发现service-hi在eureka-server注册了2个实例这就相当于一个小的集群。
三、建一个服务消费者
重新新建一个spring-boot工程取名为service-ribbon;
在它的pom.xml继承了父pom文件并引入了以下依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.forezp</groupId> <artifactId>service-ribbon</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>service-ribbon</name> <description>Demo project for Spring Boot</description> <parent> <groupId>com.forezp</groupId> <artifactId>sc-f-chapter2</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> </dependencies> </project>
在工程的配置文件指定服务的注册中心地址为http://localhost:8761/eureka/程序名称为 service-ribbon程序端口为8764。配置文件application.yml如下
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8764 spring: application: name: service-ribbon
在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。
@SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient public class ServiceRibbonApplication { public static void main(String[] args) { SpringApplication.run( ServiceRibbonApplication.class, args ); } @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } }
写一个测试类HelloService通过之前注入ioc容器的restTemplate来消费service-hi服务的“/hi”接口在这里我们直接用的程序名替代了具体的url地址在ribbon中它会根据服务名来选择具体的服务实例根据服务实例在请求的时候会用具体的url替换掉服务名代码如下
@Service public class HelloService { @Autowired RestTemplate restTemplate; public String hiService(String name) { return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class); } }
写一个controller在controller中用调用HelloService 的方法代码如下
@RestController public class HelloControler { @Autowired HelloService helloService; @GetMapping(value = "/hi") public String hi(@RequestParam String name) { return helloService.hiService( name ); } }
在浏览器上多次访问http://localhost:8764/hi?name=forezp浏览器交替显示
hi forezp,i am from port:8762
hi forezp,i am from port:8763
这说明当我们通过调用restTemplate.getForObject(“http://SERVICE-HI/hi?name=”+name,String.class)方法时已经做了负载均衡访问了不同的端口的服务实例。
四、此时的架构
- 一个服务注册中心eureka server,端口为8761
- service-hi工程跑了两个实例端口分别为8762,8763分别向服务注册中心注册
- sercvice-ribbon端口为8764,向服务注册中心注册
- 当sercvice-ribbon通过restTemplate调用service-hi的hi接口时因为用ribbon进行了负载均衡会轮流的调用service-hi8762和8763 两个端口的hi接口.
相关推荐
通过这个简单的教程,我们可以理解Spring Cloud如何帮助我们构建微服务架构,以及Ribbon如何作为客户端负载均衡器工作。这个过程中,我们还接触到了服务发现、声明式API调用等关键概念。对于初学者来说,这是一个很...
通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,...
本项目名为"简易的SpringCloud分布式微服务项目",它旨在提供一个简单易懂的入门示例,帮助开发者理解如何利用SpringCloud实现微服务的搭建和管理。 1. **微服务概念**:微服务是一种软件开发方法,它提倡将单一...
第二课: 服务消费者(rest+ribbon) 第三课: 服务消费者(Feign) 第四课: 断路器(Hystrix) 第五课: 路由网关(zuul) 第六课: 分布式配置中心(Spring Cloud Config) 第七课: 高可用的分布式配置中心(Spring ...
SpringCloud 是一个基于 Java 的微服务开发框架,用于简化分布式系统构建的一系列工具集合。它提供了包括服务发现、配置管理、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群...
根据书籍《Java微服务架构实践》提供源码,通过SpringCloud实现微服务:Eureka+Ribbon+Feign+Zuul
在分布式系统中,Spring Cloud是实现微服务架构的重要框架,它提供了一系列工具和服务来帮助开发者构建、配置和管理微服务。Eureka是Spring Cloud中的一个关键组件,它用于服务发现,而Ribbon则是客户端负载均衡器。...
该压缩包文件“基于SpringCloud分布式微服务+微信小程序实现短视频社交app设计源码.zip”包含了一套完整的短视频社交应用的开发源码,利用了SpringCloud框架构建分布式微服务架构,并与微信小程序相结合,提供了...
Spring Cloud是基于Spring Boot实现的一系列工具集合,用于构建分布式系统中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等。在本项目中,我们...
在Spring Cloud生态系统中,Ribbon...通过这个Ribbon方式的示例,你可以深入理解Spring Cloud服务消费者如何通过Eureka找到服务提供者,并使用Ribbon进行客户端负载均衡。这有助于你构建更加健壮、可扩展的微服务架构。
SpringCloud是微服务架构中的一个流行框架,它提供了一套完整的解决方案,用于构建分布式系统,如服务发现、负载均衡、断路器等。Eureka是SpringCloud中的服务发现组件,而Ribbon是客户端负载均衡器。本文将详细介绍...
本文将深入探讨标题" Ideal版SpringCloud框架参考---分布式微服务架构参考"所涵盖的关键知识点,并结合描述中的组件进行详细解析。 首先,Eureka是Spring Cloud中的服务注册与发现组件。它允许微服务实例向中心...
Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具集,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线等)中快速构建一些常见模式的能力。Spring Cloud Netflix...
史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本) 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)(Finchley版本) 史上最简单的SpringCloud教程 | 第四篇:断路器...
通过以上介绍,我们可以看出Spring Cloud为构建微服务架构提供了丰富的工具和组件,它简化了开发过程,同时也带来了复杂性的挑战。开发者需要理解每个组件的工作原理,并根据实际需求进行选型和配置,以实现高效、...
在构建分布式系统架构时,Spring Cloud是一个非常关键的框架,它提供了一系列的工具和服务来帮助开发者轻松地创建和管理微服务。"整合spring cloud微服务,搭建一个分布式系统架构"这个主题涵盖了多个方面,让我们...
spring-cloud微服务框架demo,可以完整运行。这里面包含的组件和内容有: spring cloud eureka,服务注册和服务发现 spring cloud config,动态配置项 ribbon,客户端负载均衡 feign, hystrix,熔断 turbine Spring ...
在现代软件开发中,Spring Boot 和 Spring Cloud 的组合已经成为构建微服务架构的首选方案。本文将深入探讨这两个框架的集成应用,以及它们如何帮助开发者实现高效、可扩展的分布式系统。 Spring Boot 是一个基于 ...
SpringBlade是一个全面的、基于Spring Boot和Spring Cloud的分布式微服务架构,旨在提供一个高效、易用、功能丰富的开发平台。在这个v3.7.0版本中,它集成了许多现代开发工具和技术,帮助开发者快速构建复杂的企业级...
总结来说,基于SpringCloud和Docker的分布式微服务架构设计,不仅解决了传统单体架构的局限性,还通过微服务的高度解耦和容器化部署,极大提升了应用的灵活性和可维护性。这套架构设计为当前和未来应用架构的发展...