image.png

一、问题

image.png
1、order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口? :::danger 获取地址信息的流程如下:

  • user-service服务实例启动后,将自己的信息注册到eureka-server(Eureka服务端)。这个叫服务注册
  • eureka-server保存服务名称到服务实例地址列表的映射关系
  • order-service根据服务名称,拉取实例地址列表。这个叫服务发现或服务拉取 ::: 2、有多个user-service实例地址,order-service调用时该如何选择? :::danger

  • order-service从实例列表中利用负载均衡算法选中一个实例地址

  • 向该实例地址发起远程调用 ::: 3、order-service如何得知某个user-service实例是否依然健康,是不是已经宕机? :::danger

  • user-service会每隔一段时间(默认30秒)向eureka-server发起请求,报告自己状态,称为心跳

  • 当超过一定时间没有发送心跳时,eureka-server会认为微服务实例故障,将该实例从服务列表中剔除
  • order-service拉取服务时,就能将故障实例排除了 ::: 注意:一个微服务,既可以是服务提供者,又可以是服务消费者,因此eureka将服务注册、服务发现等功能统一封装到了eureka-client端

    二、Eureka注册中心搭建步骤

    image.png
    image.png

    一、创建eureka-server服务

    1、在cloud-demo父工程下,创建一个子模块:

    image.png

    二、引入eureka依赖

    :::danger
    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server
    :::

    三、编写启动类

    @SpringBootApplication
    @EnableEurekaServer //开启Eureka注册服务
    public class EurekaApplication {
    public static void main(String[] args) {
    SpringApplication.run(EurekaApplication.class, args);
    }
    }

四、编写配置文件

编写一个application.yml文件,内容如下: server: port: 10086 spring: application: name: eureka-server eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka register-with-eureka: false # 不注册自己 fetch-registry: false #不拉取服务本eureka服务中的服务信息

五、服务注册(客户端)

1、导入依赖

org.springframework.cloud spring-cloud-starter-netflix-eureka-client

2、配置文件

在user-service中,修改application.yml文件,添加服务名称、eureka地址

spring: application: name: userservice eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka instance: # 在Eureka中显示服务的ip地址 ip-address: 127.0.0.1 # 配置服务器ip地址 prefer-ip-address: true # 更倾向于使用ip,而不是host名 instance-id: ${eureka.instance.ip-address}:${server.port} # 自定义实例的id

3、启动多个服务实例

  1. 首先,复制原来的user-service启动配置:

image.png

  1. image.png
  2. image.png
  3. image.png

    六、服务发现

    向eureka-server拉取user-service的信息,实现服务发现。

1、引入依赖

org.springframework.cloud spring-cloud-starter-netflix-eureka-client

2、配置文件

eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
instance: # 在Eureka中显示服务的ip地址
ip-address: 127.0.0.1 # 配置服务器ip地址
prefer-ip-address: true # 更倾向于使用ip,而不是host名
instance-id: ${eureka.instance.ip-address}:${server.port} # 自定义实例的id

3、服务拉取负载均衡

在order-service的OrderApplication中,给RestTemplate这个Bean添加一个 @LoadBalanced注解:

  1. /**
  2. * 注册RestTemplate
  3. * @return
  4. */
  5. @Bean
  6. @LoadBalanced //负载均衡策略
  7. public RestTemplate restTemplate(){
  8. return new RestTemplate();
  9. }

修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法。修改访问的url路径,用服务名代替ip、端口:
image.png
总结:
Eureka和Ribbon总结.md