提供者与消费者


服务该如何获取服务提供者的地址信息?
如果有多个提供者,消费者该如何选择?
消费者如何得知服务提供者的健康状态?

服务该如何获取服务提供者的地址信息?
如果有多个提供者,消费者该如何选择?
消费者如何得知服务提供者的健康状态?
在Eureka架构中,微服务角色有两类:
EurekaServer:服务端,注册中心
EurekaClient:客户端

<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
@EnableEurekaServer注解server:
port: 7070 #自定义端口
spring:
application:
name: eureka-server #微服务名称
eureka:
client:
register-with-eureka: true #是否将自己注册到eureka中
fetch-registry: true #服务发现,是否从eureka中获取注册信息
service-url:
#地址信息,eureka自己也是个微服务,将自己也注册到eureka中,多个用逗号隔开
defaultZone: http://127.0.0.1:7070/eureka

<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
spring:
application:
name: user-service #order-service
eureka:
client:
register-with-eureka: true #是否将自己注册到eureka中
fetch-registry: true #服务发现,是否从eureka中获取注册信息
service-url:
#地址信息,eureka自己也是个微服务,将自己也注册到eureka中,多个用逗号隔开
defaultZone: http://127.0.0.1:7070/eureka





可以看到此时就有两条记录
package com.xn2001.order.service;
import com.xn2001.order.mapper.OrderMapper;
import com.xn2001.order.pojo.Order;
import com.xn2001.order.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
//2 利用RestTemplate发起Http请求,查询用户
//2.1url路径
String url = "http://user-service/user/"+order.getUserId();
//2.2发送http请求,实现远程调用,getForObject get请求
User user = restTemplate.getForObject(url, User.class);
//3.封装user到Order
order.setUser(user);
// 4.返回
return order;
}
}
/**
* 创建RestTemplate并注入spring容器
* @return
*/
@Bean
@LoadBalanced //负载均衡注解
public RestTemplate restTemplate(){
return new RestTemplate();
}

此时idea的日志会出现两条信息,两个user-service服务轮询操作