1、服务消费者和提供者
提供者:提供服务的一方
消费者:调用服务的一方
一个服务既可以是提供者也可以是消费者。
2、Eureka注册中心
2.1、Eureka的作用
-
消费者如何获取服务提供者具体信息?
服务提供者启动时向eureka注册自己的信息
eureka保存这些信息
消费者根据服务名称向eureka拉取提供者信息
-
如果有多个服务提供者,消费者该如何选择?
服务消费者利用负载均衡算法,从服务列表中挑选一个
-
消费者如何感知服务提供者健康状态?
服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
eureka会更新记录服务列表信息,心跳不正常会被剔除
消费者就可以拉取到最新的信息
3、EurekaServer搭建
3.1创建模块eureka-server
3.2 添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
3.3 添加启动类和配置文件
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
server:
port: 10086 #服务端口
spring:
application:
name: eureka-server #eureka的服务名称
eureka:
client:
service-url: #eureaka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
spring.application.name是eureka作为一个spring项目有自己的名字eureka-server。
eureka.client是当前服务作为一个客户端,把自己也注册到eureka-server上面。如果有多个eureka-server可以互相发现。
3.3 访问
http://localhost:10086/
可以看到eureka-server自己也注册到了eureka中。
4、服务注册到Eureka
4.1 添加依赖和配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
注意这里添加的是client
配置添加的和之前一样,作为客户端指定服务端的地址。
eureka:
client:
service-url: #eureaka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
4.2 运行
运行后可以看到新加了2个服务。如果没有看到,检查是不是pom添加依赖后没点加载。
我们可以右键启动项,复制一个配置,设置不同的端口和名称,用来启动2次。
5、服务发现
服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡
我们尝试在order-service服务中获取服务列表。
5.1新增http请求配置
这里的@LoadBalanced是为了在一个服务有多个节点的时候,做负载均衡。
@Configuration
public class RestTmplateConfiguration {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
5.2 请求代码
@Resource
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
Order order = orderMapper.findById(orderId);
String url = "http://user-service/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);
order.setUser(user);
return order;
}