spring boot 服务的注册发现与调用

感谢博主
1、构建Eureka服务
众所周知,在微服务里面,业务系统之间有复杂的调用关系,他们之间需要有一个注册中心来管理。也就是服务发现代理,它应该能起到如下作用:

普通服务能使用服务发现代理进行注册。
服务客户端能通过服务发现代理查找所需的服务信息。
多个服务发现代理间能共享服务的注册信息。
服务发现代理能检测服务的健康信息。

在Spring Cloud中,有多个组件可以起到服务发现代理的作用,但一般比较常用、较专业、可用性较高的是Eureka,Eureka分为Server和Client,Server是注册中心,Client是注册/调用方,接下来我们构建Eureka Server来启动一个服务发现代理。
1.1 Idea创建Eureka项目

  1. 新建项目,选择Spring boot项目。
  2. 选择Eureka Server。
    在这里插入图片描述
    如图所示,Idea会自动帮你创建Eureka项目并生成pom文件,如果不想用自动生成的话,可以手动设置pom文件,引入如下包。
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

1.2 添加配置文件
接下来,需要创建src/main/resources/application.yml文件(或application.properties,两者作用是一样的,但.yml文件为树形结构,更容易理解)。添加如下配置。

server:
  port: 8761 #Eureka服务监听端口

eureka:
  client:
    registerWithEureka: false #不要使用Eureka服务注册
    fetchRegistry: false #不要在本地缓存注册表信息
  #server:
  #  waitTimeInMsWhenSyncEmpty: 5 #在服务器接收请求之前等待的初始时间

registerWithEureka属性的含义是通过Eureka服务来注册自身,这里设置为false时因为它本身就是Eureka服务,不需要进行注册。fetchRegistry是在客户端本地缓存注册表信息。waitTimeInMsWhenSyncEmpty属性比较重要。Eureka会等待5min才会通告任何通过它注册的服务,所以本地运行可以注释此行,以加快速度。

每次服务注册时,需要等待30s,才会成功显示在Eureka服务中,因为Eureka需要从服务接收3次连续的心跳包ping,才能确认此服务是健康的。
1.3 通过注解启动
最后一步是在启动类中添加@EnableEurekaServer注解,就可以让此应用程序成为一个Eureka服务。

@SpringBootApplication
@EnableEurekaServer
public class EurekaserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaserverApplication.class, args);
    }

}

启动后,访问http://localhost:8761/便可看到Eureka界面。
在这里插入图片描述

2 创建服务提供方

2.1 创建Spring Web、Eureka Client应用

  1. 通过Idea创建项目
    选择Spring Web和Eureka Discovery,Idea会自动创建该类型的项目。
    在这里插入图片描述
    2. 通过pom创建
        <dependency>
              <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
          </dependency>
    
```

2.2 创建配置文件
在src/main/java/resources/application.yml创建如下配置。

spring:
  application:
    name: mailservice #在Eureka中注册的服务名称,将在服务查找时使用
server:
  port: 8080
eureka:
  instance:
    prefer-ip-address: true #注册服务的ip
  client:
    register-with-eureka: true #使用Eureka注册服务
    fetch-registry: true #在本地缓存注册表
    service-url:
      defaultZone: http://localhost:8761/eureka #Eureka服务位置

eureka.instance.prefer-ip-address的值设置为true,是将本服务的Ip注册到Eureka,而不是域名,一般建议使用ip,因为在使用容器部署时,容器本身不具有DNS记录,服务就没办法正确解析地址。基于云的微服务本身是短暂和无状态的,所以使用ip地址更适合。
service-url属性的值是一个map,因为单个Eureka并不能保证高可用,所以一般会为客户端提供一个Eureka服务列表,在单个Eureka服务宕机时选择另外的进行使用。

通过注解 @EnableDiscoveryClient 进行服务注册

@SpringBootApplication
@EnableDiscoveryClient
public class ApiGatewayBootcwenaoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ApiGatewayBootcwenaoApplication.class, args);
    }
}

2.3 启动服务
在这个demo中,我创建了一个名叫mailservice的服务,在启动后,可以在Eureka管理界面看到该服务。
在这里插入图片描述
调用/eureka/apps/MAILSERVICE也可以看到该服务的详细信息。
在这里插入图片描述
可以看到,该服务已经成功注册到Eureka中了。
3 使用服务发现来查找服务
服务注册成功后,我们可以使用另外的服务客户端来查找和调用该服务mailservice,而不用知道该服务的位置。现在我们创建另一个服务,让这两个服务互相调用。

为了实现这个目的,我们需要引入客户端库。能够实现服务查找和调用功能的在Spring Cloud中有三个客户端,分别为:

Spring DiscoveryClient.
RestTemplate
Netflix Feign。

下面我们使用Feign来实现服务调用。
3.1 创建Feign项目
和上面创建的mailservice相比,多了一个feign依赖。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值