免费制作个人简历的网站,企业网关官网,最近国家新闻,中国古风网站模板ok#xff0c;在上篇文章中我们讲了在Spring cloud中使用Zuul网关#xff0c;这篇文章我们将Spring Cloud的五大核心组件的Ribbon和Feign分别创建一个微服务模块。
题外话#xff0c;本篇博客就是配置子模块#xff0c;或者说是微服务#xff0c;然后将微服务正式启动之前…ok在上篇文章中我们讲了在Spring cloud中使用Zuul网关这篇文章我们将Spring Cloud的五大核心组件的Ribbon和Feign分别创建一个微服务模块。
题外话本篇博客就是配置子模块或者说是微服务然后将微服务正式启动之前将所有的服务注册到Eureka注册中心去方便我们查看我们的微服务是否正式启动文章更加偏向刚刚接触Spring Cloud的开发者如果你对这些步骤已经很熟练了实际上这篇博客对你来说就是一篇水文罢了。我之所以写这篇是考虑到刚刚学习的开发者或者说让我自己的基础更加稳健毕竟从0-1总要一个过程吧等将最后一个组件完成之后我将采用这个基本搭建好的框架进行Spring Cloud中运行案例了也就是正式使用Spring Cloud的组件了现在只是开胃菜罢了。如果你对本系列文章感兴趣不妨点个关注或者赞支持一下博主码字不易鼓励一下博主。
在我们正式开始搭建之前我们先了解一下这两个组件是啥可以用来干啥
Ribbon
Ribbon是Netflix开源的一个客户端负载均衡器它可以将请求分发到多个服务实例中以提高系统的可用性和性能。Ribbon可以与各种服务发现机制集成如Eureka、Consul等通过定期从服务注册中心获取服务实例列表并根据一定的负载均衡策略选择目标服务实例。Ribbon还提供了丰富的配置选项可以根据实际需求进行定制。
例子假设有一个微服务架构的电影推荐系统其中包含多个电影信息服务的实例。通过使用Ribbon可以实现对这些实例的负载均衡。当用户请求电影信息时Ribbon会根据配置的负载均衡策略选择一个可用的电影信息服务实例并将请求转发给它。这样可以提高系统的可用性和性能。
Ribbon的优点包括 灵活性Ribbon提供了丰富的配置选项可以根据实际需求进行定制如负载均衡策略、超时设置等。 可扩展性Ribbon可以与各种服务发现机制集成适用于不同的微服务架构。 高可用性Ribbon可以自动检测不可用的服务实例并剔除它们确保请求只发送到可用的实例上。 缺点 配置复杂R的ibbon配置相对复杂需要了解和理解各种负载均衡策略和配置选项。 客户端依赖Ribbon需要作为客户端的一部分进行集成增加了客户端的复杂性。 Feign
Feign是另一个Netflix开源的组件它简化了基于HTTP的服务间通信的开发。Feign通过定义接口的方式让开发者可以像调用本地方法一样调用远程服务。Feign会根据接口定义自动生成请求的URL、参数、请求方法等信息并通过集成Ribbon实现负载均衡。Feign还支持请求和响应的编解码可以方便地处理各种数据格式。
例子 假设有一个微服务架构的电商系统其中包含多个服务如用户服务、订单服务等。通过使用Feign可以方便地调用其他服务的接口。例如在用户服务中需要调用订单服务来创建订单。通过定义一个Feign接口可以直接调用订单服务的创建订单接口Feign会自动处理请求的URL、参数等并通过Ribbon实现负载均衡将请求转发给可用的订单服务实例。
Feign的优点包括 简化开发Feign通过接口定义自动生成请求的URL、参数、请求方法等信息减少了手动编写HTTP请求的工作量。 集成负载均衡Feign集成了Ribbon可以通过配置实现负载均衡自动选择可用的服务实例。 请求和响应的编解码Feign支持请求和响应的编解码可以方便地处理各种数据格式。 Feign存在的一些缺点 功能有限Feign主要用于简化HTTP请求对于复杂的服务调用场景可能不够灵活。 学习成本虽然Feign简化了开发过程但需要了解和理解其使用方式和配置选项。 ok对以上知识点进行相关了解后咱们开始分别搭建这两个模块的微服务。
我搭建好了的模块如下图所示 这篇博客我就不在一步一步带你去创建模块了如果还是不知道怎么搭建父子模块的请参照上一篇博客。
eureka-client
目录结构
pom.xml
?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringCloud/artifactIdgroupIdcom.miaow/groupIdversion0.0.1-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdeureka-client/artifactIddescriptioneureka客户端使用/descriptionnameeureka-client/name!-- FIXME change it to the projects website --urlhttp://www.example.com/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactIdversion2.2.1.RELEASE/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdtypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement/project
application.yml
server:port: 3124spring:application:name: eureka-client# eureka客户端注册到Eureka注册中心切记需要启动eureka服务
eureka:client:service-url:defaultZone: http://localhost:1000/eurekaEurekaClientApplication
SpringBootApplication
EnableDiscoveryClient
public class EurekaClientApplication
{public static void main( String[] args ){SpringApplication.run(EurekaClientApplication.class);}
}DcController
RestController
public class DcController {AutowiredDiscoveryClient discoveryClient;GetMapping(/dc)public String dc() {String services Services: discoveryClient.getServices();System.out.println(services);return services;}
}以下这图是我启动所有服务并注册到注册中心的。仅供参考。
Ribbon
申明本模块目前只做了引入依赖并未实际使用Ribbon只是创建了初步微服务并实现将服务注册到Eureka中去。在后续将一步一步使用Ribbon的。敬请期待 目录结构
pom.xml
?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringCloud/artifactIdgroupIdcom.miaow/groupIdversion0.0.1-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdribbon/artifactIdnameRibbon/name!-- FIXME change it to the projects website --urlhttp://www.example.com/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope/dependency!--添加eureka客户端--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-ribbon/artifactId/dependency/dependencies/project
application.yml
server:port: 2381
spring:application:name: ribbon-demo# eureka客户端注册到Eureka注册中心切记需要启动eureka服务
eureka:client:service-url:defaultZone: http://localhost:1000/eurekaRibbonApplication
SpringBootApplication
EnableEurekaClient
public class RibbonApplication {public static void main(String[] args) {SpringApplication.run(RibbonApplication.class);}
}Feign
目录结构
pom.xml
?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringCloud/artifactIdgroupIdcom.miaow/groupIdversion0.0.1-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdfeign/artifactIdnamefeign/name!-- FIXME change it to the projects website --urlhttp://www.example.com/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope/dependency!--添加eureka客户端--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency/dependencies
/project
application.yml
server:port: 2380
spring:application:name: feign-demo# eureka客户端注册到Eureka注册中心切记需要启动eureka服务
eureka:client:service-url:defaultZone: http://localhost:1000/eureka
FeignApplication
SpringBootApplication
EnableEurekaClient
public class FeignApplication
{public static void main( String[] args ){SpringApplication.run(FeignApplication.class);}
}将服务启动
我们进入Eureka 服务管理界面查看已注册的服务
http://localhost:1000/ 通过上图我们发现我们启动的服务和端口号分别注册成功了至此我们的Ribbon和Feign模块就搭建好了并且服务已经注册到注册中心去了。
至此我们已经搭建了四个Spring Cloud的核心组件了。 EurekaEureka是一个服务注册和发现组件它提供了服务注册、服务发现和服务治理的功能。通过Eureka微服务可以自动注册和发现其他微服务从而实现服务之间的通信和协作。 ZuulZuul是一个API网关组件它可以与Eureka集成提供了对微服务的路由、负载均衡、请求过滤和请求转发的功能。通过Zuul开发人员可以将所有的微服务请求都通过一个入口点进行管理和保护。 RibbonRibbon是一个客户端负载均衡组件它可以与Eureka集成实现对微服务实例的负载均衡和故障转移。通过Ribbon微服务可以自动选择可用的实例并将请求分发到这些实例上。 FeignFeign是一个声明式的HTTP客户端组件它可以与Ribbon和Eureka集成简化微服务之间的HTTP通信。通过Feign开发人员可以使用注解来定义HTTP请求和响应的格式从而实现对微服务之间的调用。 HystrixHystrix是一个容错和断路器组件它可以与Ribbon和Feign集成提供了对微服务的容错和故障保护的功能。通过Hystrix开发人员可以定义断路器的行为从而实现对微服务的故障隔离和恢复。