【SpringCloud微服务实践】注册与发现(Eureka)

注册与发现(Eureka)

注册与发现初实践,注册中心采用SpringCloud全家桶中的Eureka,并配合RestTemplate从Euraka调用微服务。

在前置章节的电影票-用户服务组的基础上升级,摒弃硬编码微服务地址的方案,使用eureka实现微服务的动态发现与调用。

创建注册中心

  1. 引入Eureka Server依赖

新建一个SpringCloud项目,并预装Eureka Server工具包,当然也可以手动在pom文件中引入,记得一定要是带starter的(基于本文采用的2021.0.6版本的spring-cloud):

<dependency>
	<groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. 在启动类上添加@EnableEurekaServer,声明是Eureka服务器
  2. 在配置文件中配置Eureka信息
    • server.port:配置服务器端口
    • eureka.instance:实例配置(单体可以不配)
      • appname:实例名称
      • app-group-name:实例组名,通常为同一个服务下的不同实例所共享
      • hostname:域名,不设置时默认为主机名
      • prefer-ip-address:展示ip地址
    • euraka.client:客户端配置
      • service-url:注册中心的服务地址
      • fetch-registry:获取注册表,作为注册中心无需开启
      • register-with-eureka:是否注册,不做集群可以不注册
server:
  port: 8848
eureka:
  instance:
    appname: eureka-server
    app-group-name: example-1
    hostname: localhost
    prefer-ip-address: true

  client:
    service-url:
      defaultZone: http://localhost:8848/eureka
    fetch-registry: false
    register-with-eureka: true

一个简单的Eureka注册中心到这里就完成了,接着我们把用户微服务注册道 Eureka中

微服务注册

  1. 引入Eureka Client依赖,记得要带starter的:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 在启动类上添加@EnableEurekaClient,声明是Eureka客户端
  2. 配置文件中配置客户端信息:
    • spring应用名一定要配,它将作为登记在Eureka中的服务名,到时候是根据服务名解析网络地址
    • 实例名建议配,一个注册多个实例的时候方便区分
    • 其它前头提过了不再赘述
spring:
  application:
  name: user-service

eureka:
  client:
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:8848/eureka
  instance:
    appname: user-service-1  # 不定义的话默认为应用名application.name
    prefer-ip-address: true

单单作为Eureka的服务提供者到此也完成,接着升级服务消费者ticket

调用微服务

  1. 和提供者一样,引入Eureka Client依赖
  2. eureka相关的配置类似,不再复述;此外把待调用的user服务的信息也写进配置文件吧
api:
  user-service:
    name: user-service  # 服务名
    url: http://127:0:0:1:8081/user/  # 之前章节用的直接调用地址
  1. 重点在于服务发现和调用

获取服务列表

一个服务注册到Eureka中后,Eureka会在自己的注册表中,按服务的名称与服务的真实域名+端口做一一映射,即user-service运行在http://localhost:8081上,登记的是服务名user-service,RestTemplate拿到Eureka的服务注册表后,调用user-service时,请求的是http://user-service,此时会根据注册表把实际的请求路径中user-service解析为查到的实际的localhost:8080,相当于做了一个代理;如果这个服务并未注册或者RestTemplate没有拿到注册表,就只能原路请求,自然请求不到。

获取注册表很简单,在我们的ResTemplate的Bean上加个@LoadBalanced注解即可:

@Bean
@LoadBalanced
public RestTemplate rest() {
    
    
	return new RestTemplate();
}

@LoadBalanced加了之后,即做到了服务发现又做到了负载均衡

调用远程服务

此时调整我们UserApi中的baseUrl即可:

//@Value("${api.user-service.url}")
@Value("http://${api.user-service.name}/user/")
private String baseUrl;

到这一步,作为消费者的ticket也就完成了,接下来运行三个项目

成果

浏览器访问Eureka服务器的地址http://localhost:8848
此时可以看到包括Eureka在内(之前让Eureka把自己也注册了),总共有3个健康的服务实例:
在这里插入图片描述

此时请求之前的http://localhost:8080/ticket/canibuy?price=200&id=3接口

{
    
    
    "code": 200,
    "msg": "余额充足",
    "data": {
    
    
        "id": 3,
        "username": "user3",
        "name": "用户3",
        "age": 23,
        "balance": 300.0
    }
}

成功拿到结果!我们通过Eureka+Restemplate成功的实现了微服务的动态发现和调用,至此我们已经正式入门微服务架构。


入门章节采用了Restempl ate+eureka,是因为它们足够经典。在本系列后面,将主要采用openFeign+nacos构建微服务。

猜你喜欢

转载自blog.csdn.net/m0_51810668/article/details/130613299
今日推荐