springboot服务的注册发现与调⽤
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/l⽂件(或application.properties,两者作⽤是⼀样的,但.yml⽂件为树形结构,更容易理解)。添加如下配置。
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);
}
}
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/l创建如下配置。
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: 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);
}
}
在这个demo中,我创建了⼀个名叫mailservice的服务,在启动后,可以在Eureka管理界⾯看到该服务。
调⽤/eureka/apps/MAILSERVICE也可以看到该服务的详细信息。
可以看到,该服务已经成功注册到Eureka中了。
3 使⽤服务发现来查服务
服务注册成功后,我们可以使⽤另外的服务客户端来查和调⽤该服务mailservice,⽽不⽤知道该服务的位置。现在我们创建另⼀个服务,让这两个服务互相调⽤。
为了实现这个⽬的,我们需要引⼊客户端库。能够实现服务查和调⽤功能的在Spring Cloud中有三个客户端,分别为:
Spring DiscoveryClient.
RestTemplate
Netflix Feign。
下⾯我们使⽤Feign来实现服务调⽤。
3.1 创建Feign项⽬
和上⾯创建的mailservice相⽐,多了⼀个feign依赖。
<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>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论