摘要:为了搭建基于Eureka的服务注册与发现系统,并结合RestTemplate和Ribbon实现服务消费者,请按照以下步骤操作:
为了搭建基于Eureka的服务注册与发现系统,并结合RestTemplate和Ribbon实现服务消费者,请按照以下步骤操作:
1. 创建eureka Server
步骤说明:Eureka Server作为服务注册中心,管理所有服务的注册与发现。
代码实现:
依赖配置(pom.xml):org.springframework.cloud
Spring-cloud-starter-netflix-eureka-server
启动类:java
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
配置文件(application.yml):yaml
server:
port: 8761
eureka:
client:
register-with-eureka: false # 不向自身注册
fetch-registry: false # 不获取注册信息
service-url:
defaultZone: http://localhost:8761/eureka/
2. 创建服务提供者(Service provider)
步骤说明:服务提供者向Eureka注册,并提供一个REST接口供消费者调用。
代码实现:
依赖配置(pom.xml):org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web
启动类:java
@SpringBootApplication
@EnableEurekaClient
public class ProviderApplication {
public static void main(String args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
yaml
spring:
application:
name: service-provider # 服务名称
server:
port: 8081 # 端口
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/ # Eureka地址
REST接口:java
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello {
return "Hello from Service Provider";
}
}
3. 创建服务消费者(Service Consumer)
步骤说明:消费者通过Eureka发现服务,并使用Ribbon实现负载均衡的调用。
代码实现:
依赖配置(pom.xml):org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web
spring-cloud-starter-netflix-ribbon
启动类:java
@SpringBootApplication
@EnableEurekaClient
public class ConsumerApplication {
public static void main(String args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
配置RestTemplate:java
@Configuration
public class AppConfig {
@Bean
@LoadBalanced // 启用负载均衡
public RestTemplate restTemplate {
return new RestTemplate;
}
}
调用服务提供者:java
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/invoke")
public String invokeProvider {
// 使用服务名称代替具体URL
String url = "http://service-provider/hello";
return restTemplate.getForObject(url, String.class);
}
}
yaml
spring:
application:
name: service-consumer # 消费者服务名称
server:
port: 8080 # 端口
4. 测试与验证
启动服务:Ø 启动Eureka Server(端口8761)
Ø 启动服务消费者(端口8080)
查看Eureka注册情况:访问 http://localhost:8761,确认服务提供者和消费者已注册。测试消费者调用:
访问 http://localhost:8080/invoke,应返回服务提供者的响应“Hello from Service Provider”。负载均衡测试:启动第二个服务提供者实例,修改端口为8082。多次访问消费者的接口,观察请求被轮流分配到两个提供者实例。
常见问题解决
服务未注册:检查Eureka Server地址是否正确,确保客户端和服务端配置的defaultZone一致。UnknownHostException:确保RestTemplate使用了@LoadBalanced,且服务名称拼写正确。负载均衡不生效:确认多个提供者实例使用不同的端口且成功注册,检查Ribbon配置或切换至Spring Cloud LoadBalancer。架构图
通过以上步骤,您已成功搭建了一个基于Eureka服务发现和Ribbon负载均衡的微服务系统。消费者通过服务名称调用提供者,实现了服务的动态发现与负载均衡。
来源:老客数据一点号