Eureka和Ribbon简介

本文介绍了在前后端分离架构中,SpringCloud如何利用Eureka作为服务注册中心来管理微服务的元数据,包括EurekaServer的搭建、服务的注册与发现。此外,还探讨了Ribbon与Feign在实现客户端负载均衡中的应用,详细阐述了它们的工作原理和配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Eureka注册中心
在前后端分离架构中,服务层被拆分成了很多的微服务,微服务的信息如何管理?Spring Cloud中提供服务注册中心来管理微服务信息。
为什么要用注册中心? 1、微服务数量众多,要进行远程调用就需要知道服务端的ip地址和端口,注册中心帮助我们管理这些服务的ip和 端口。 2、微服务会实时上报自己的状态,注册中心统一管理这些微服务的状态,将存在问题的服务踢出服务列表,客户端获取到可用的服务进行调用。

Eureka Server搭建
创建xc-govern-center工程。
需要引入相关依赖,在启动类上用@EnableEurekaServer标识此服务为Eureka服务。
application.yml

 server: 
	 port: 50101 #服务端口 
 spring: 
 	application: 
 		name: xc‐govern‐center #指定服务名 
 eureka: 
 	client: 
 		registerWithEureka: false #服务注册,是否将自己注册到Eureka服务中 
 		fetchRegistry: false #服务发现,是否从Eureka中获取注册信息 
 		serviceUrl: #Eureka客户端与Eureka服务端的交互地址,高可用状态配置对方的地址,单机状态配置自己(如果 不配置则默认本机8761端口) 
 			defaultZone: http://localhost:50101/eureka/ 
 	server: 
 		enable‐self‐preservation: false #是否开启自我保护模式 
 		eviction‐interval‐timer‐in‐ms: 60000 #服务注册表清理间隔(单位毫秒,默认是60*1000)

服务注册
需要引入相关依赖,在启动类上添加注解 @EnableDiscoveryClient ,表示它是一个Eureka的客户端。
各个服务的application.yml里增加如下配置:

eureka: 
	client: 
		registerWithEureka: true #服务注册开关 
		fetchRegistry: true #服务发现开关 
		serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址,多个中间用逗号分隔 
			defaultZone: ${EUREKA_SERVER:http://localhost:50101/eureka/} 
	instance: 
		prefer‐ip‐address: true #将自己的ip地址注册到Eureka服务中 
		ip‐address: ${IP_ADDRESS:127.0.0.1} 
		instance‐id: ${spring.application.name}:${server.port} #指定实例id

Feign远程调用。

Ribbon负载均衡。Ribbon和微服务(客户端)在同一台服务器上。
在这里插入图片描述
Spring Cloud引入Ribbon配合 restTemplate 实现客户端负载均衡。
在客户端添加Ribbon依赖:

<dependency> 
	<groupId>org.springframework.cloud</groupId> 
	<artifactId>spring‐cloud‐starter‐ribbon</artifactId> 
</dependency> 
<dependency> 
	<groupId>com.squareup.okhttp3</groupId> 
	<artifactId>okhttp</artifactId> 
</dependency>

定义RestTemplate,使用@LoadBalanced注解

@Bean 
@LoadBalanced 
public RestTemplate restTemplate() { 
	return new RestTemplate(new OkHttp3ClientHttpRequestFactory()); 
}
//负载均衡调用 
@Test 
public void testRibbon() { 
	//服务id 
	String serviceId = "XC‐SERVICE‐MANAGE‐CMS"; 
	for(int i=0;i<10;i++){ 
		//通过服务id调用 
		ResponseEntity<CmsPage> forEntity = restTemplate.getForEntity("http://" + serviceId + "/cms/page/get/5a754adf6abb500ad05688d9", CmsPage.class); 
		CmsPage cmsPage = forEntity.getBody(); 
		System.out.println(cmsPage); 
	} 
}

添加@LoadBalanced注解后,restTemplate会走LoadBalancerInterceptor拦截器,此拦截器中会通过 RibbonLoadBalancerClient查询服务地址,可以在此类打断点观察每次调用的服务地址和端口,两个cms服务会轮流被调用。
在这里插入图片描述
Spring Cloud也可以引入 Feign并且集成了Ribbon实现客户端负载均衡调用。

<dependency> 
	<groupId>org.springframework.cloud</groupId> 
	<artifactId>spring‐cloud‐starter‐openfeign</artifactId> 
</dependency> 
<dependency> 
	<groupId>com.netflix.feign</groupId> 
	<artifactId>feign‐okhttp</artifactId> 
</dependency>
@FeignClient(value = XcServiceList.XC_SERVICE_MANAGE_CMS) 
public interface CmsPageClient { 
	@GetMapping("/cms/page/get/{id}") 
	public CmsPage findById(@PathVariable("id") String id); 
}

启动类添加@EnableFeignClients注解。
Feign工作原理如下:
1、 启动类添加@EnableFeignClients注解,Spring会扫描标记了@FeignClient注解的接口,并生成此接口的代理对象。
2、 @FeignClient(value = XcServiceList.XC_SERVICE_MANAGE_CMS)即指定了cms的服务名称,Feign会从注册中心获取cms服务列表,并通过负载均衡算法进行服务调用。
3、在接口方法中使用注解@GetMapping("/cms/page/get/{id}"),指定调用的url,Feign将根据url进行远程调用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值