Home 注册中心 - Eureka
Post
Cancel

注册中心 - Eureka

引入注册中心之前先引入提供者与消费者概念

提供者与消费者

服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)

服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

提供者与消费者是相对的,一个服务既可以是提供者也可以是消费者

Eureka

若提供者有多个,消费者如何获取提供者信息,如何得知提供者的健康状态

在启动时,微服务向 Eureka 注册服务信息,消费者可通过 Eureka 拉取提供者信息,然后远程调用。微服务会每 30s 向 Eureka 说明自己还活着,Eureka 会更新记录服务列表信息,剔除不健康服务器

如果有多个服务提供者,消费者利用负载均衡算法,从服务列表中挑选一个

搭建

新建一个 Maven Module,引入依赖

1
2
3
4
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

编写启动类

1
2
3
4
5
6
7
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

配置文件

1
2
3
4
5
6
7
8
9
server:
  port: 7995
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:7995/eureka

注册服务

引入依赖

1
2
3
4
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

编写配置

1
2
3
4
5
6
7
spring:
  application:
    name: userService
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:7995/eureka

服务使用

上例注册

1
2
3
4
5
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

修改调用的域名为服务名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.查询用户
        // String url = "http://localhost:8081/user/" + order.getUserId();
        String url = "http://userService/user/" + order.getUserId();
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装用户信息
        order.setUser(user);
        // 4.返回
        return order;
    }
}
This post is licensed under CC BY 4.0 by the author.

GoLand 切片

GoLand 面向对象