
服务消费者该如何获取服务提供者的地址信息?
- 服务提供者启动时向eureka注册自己的信息
eureka保存这些信息
消费者根据服务名称向eureka拉取提供者信息如果有多个服务提供者,消费者该如何选择?(多个User-Service)
- 服务消费者利用负载均衡算法,从服务列表中挑选一个
消费者如何得知服务提供者的健康状态?
- 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
eureka会更新记录服务列表信息,心跳不正常会被剔除
消费者就可以拉取到最新的信息



<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
dependencies>
package cn.itcast.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.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服务时,这些Eureka会互相做注册,为了数据交流,这里配的是Eureka集群的地址
defaultZone: http://127.0.0.1:10086/eureka/

将user-service和order-service服务都按照以下方式注册到Eureka上
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/ # 新增注册到eureka
2.2 增加服务名
spring:
application:
name: userservice # 新增服务名







public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.定义url
// String url = "http://localhost:8081/user/"+order.getUserId();
String url = "http://userservice/user/"+order.getUserId(); //修改为服务名
// 3.发送http请求
User user = restTemplate.getForObject(url, User.class);
// 4.封装user
order.setUser(user);
// 5.返回
return order;
}
必须添加该注解,否则会产生异常java.net.UnknownHostException: userservice;当只有一个userservice服务时,也会产生该异常
@SpringBootConfiguration
public class WebConfiguration {
@LoadBalanced //负载均衡
@Bean //相当于@Controller,@Service等
public RestTemplate restTemplate(){
return new RestTemplate();
}
}



