SpringCloud利用eureka注册中心注册服务实现动态获取服务

eureka官网:https://github.com/Netflix/eureka

eureka注册中心:

一、启动eureka

eureka也是一个服务,所以也要为eureka创建一个module,只是这个module的大部分功能spring已经为我们写好了,我们只需要引入依赖稍加配置就行了。

在cloud-demo中新建一个module,命名为eureka-server(随意命名)

1、pom中添加eureka依赖

<dependencies>
    <!-- Eureka服务端 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

2、创建程序运行主类

package cn.itcast;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class);
    }
}

3、配置

在application.yml中配置相关数据

server:
  port: 10086
spring:
  application:
    name: eureka-server
  • 服务运行端口

  • 服务名(必须,无论是eureka还是其他服务都要有服务名,且唯一)

启动项目,访问http://localhost:10086/即可进入以下页面(eureka主页):

VizIgS.md.png

  • 此时eureka注册中心服务器端已重新启动,

  • 但注册中心是至关重要的,如果注册中心宕机则一切服务之间的交互都不能正常运作,所以我们要给注册中心配置集群,当为eureka搭建集群时,每一个eureka即是一个服务端,又是一个客户端,每一个eureka都要讲自己作为服务注册到其他eureka中,所以此时eureka又是客户端。

  • 作为客户端就要配置所要注册到哪个eureka服务,就要配置那个eureka服务的地址。

  • 所以eureka要将自己注册到自己中

以下配置:

eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka

上述配置的是service-url的值,她的值是一个键值对形式,defaultZone是键,http://localhost:10086/eureka是值。

localhost可以改成所需要的ip

再次启动eureka,刷新页面

VFStxS.md.png

我们可以看到eureka中已经出现了相应服务。

总结

  • 1、pom文件引入依赖
<dependencies>
    <!-- Eureka服务端 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>
  • 2、创建启动类,添加eureka注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class);
    }
}
  • 3、配置application.yml
    server:
    port: 10086
    
    spring:
    application:
      name: eureka-server
    
    eureka:
    client:
      service-url:
        defaultZone: http://localhost:10086/eureka
    

二、将其他服务注册到注册中心eureka中

1、pom文件中添加依赖(eureka的client依赖)

<!--eureka-client 注册中心 客户端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2、启动类上添加注解 @EnableDiscoveryClient

@EnableDiscoveryClient
@SpringBootApplication
@MapperScan("cn.itcast.user.mapper")
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class);
    }
}

3、配置application.yml(服务名,要注册的地址)

spring:
  application:
    name: consumer-service
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka

运行(可以先运行eureka,再运行其他服务,启动eureka会报错,因为启动的时候扫描到yml中的注册配置,但是此时注册中心eureka还没有启动起来,无法将自己注册到自己中,所以会报错。启动之后就不会报错了)

访问http://localhost:10086/

刚开始可能访问到之后没有显示注册了其他服务,要等一会儿才能看到里面已经将其他服务注册进去

VF9ifx.md.png

将服务注册到注册中心后,就可以动态获取服务了(不用固定url端口等,想要的服务直接去注册中心获取,让注册中心给)

三、从注册中心取服务

将user-service和consumer-service注册到注册中心过后,就能从注册中心取服务

在consumer-demo中ConsumerController里,将DiscoveryClient注入到spring中

@Autowired
private DiscoveryClient discoveryClient;
//import org.springframework.cloud.client.discovery.DiscoveryClient;

在方法中获取

//根据服务id获取实例
List<ServiceInstance> instances = discoveryClient.getInstances("user-service");
//从实例中获取ip和端口
ServiceInstance serviceInstance = instances.get(0);
String url = "http://"+ serviceInstance.getHost() + ":" + serviceInstance.getPort() +"/user/" + id;
User user = restTemplate.getForObject(url,User.class);

VAotIS.md.png

insist,on the road
-------------本文结束感谢您的阅读-------------