服务调用出现的问题
- 服务消费者如何获取服务生产者的地址信息?
- 若有多个服务生产者,消费者如何选择?8081、8082、8083 硬代码编写的话 要写哪个?随机数感觉可以但是 生产者的健康状态如何感知?
- 消费者如何得知服务生产者的健康状态
Eureka 作用
注册中心(eureka-server) :记录和管理这些微服务
微服务(eureka-client) : 每一个服务启动时都会注册服务信息。
> 服务生产者 : 注册自己的信息到注册中心 并 每隔30秒向注册中心发送心跳
> 服务消费者 : 根据服务名称从注册中心拉取服务列表,基于服务列表做负载均衡、选中一个服务进行远程调用。
黑马图示:
动手实践 三步走
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
编写启动类 增加 @EnableEurekaServer 注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
编写 配置文件
server:
port: 10086
# 微服务名称
spring:
application:
name: eurekaserver
eureka:
client:
service-url: #eureka地址信息 eureka 相互作注册 集群通信使用。 eureka 之间做数据交流。
defaultZone : http://127.0.0.1:10086/eureka
成功示例
服务注册 (两步走)
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
编写配置文件
eureka:
client:
service-url: #eureka地址信息 eureka 相互作注册 集群通信使用。 eureka 之间做数据交流。
defaultZone : http://127.0.0.1:10086/eureka
spring:
application:
name: userservice
启动 app 发现已经成功注册
模拟多实例部署
具体操作步骤 :
填写 : -Dserver.port = 【端口号】 启动即可
多实例 注册结果截图
服务发现
根据服务名获取服务列表。
服务名代替 ip、端口
原url : String url = "http://localhost:8081/user/" + order.getUserId();
修改为
String url = "http://userservice/user/" + order.getUserId();
添加负载均衡注解。
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
示例结果截图 8081 / 8084 两台模拟实例都处理了请求