Eureka注册中心
1.问题:在上面代码中我们把http请求的url写死了,但是实际中ip可能变,且有可能一个集群提供了同一个服务,他们的ip不同,端口可能也不同,这个时候应该如何选择服务,如何获取服务地址,如何得知服务者的健康信息
2.解决流程:
(1)每个服务进入时都要向注册中心报备,当一个order-service需要调用user-service时,他会问注册中心提供user-service的url,得到这些信息以后,order-service通过负载均衡算法选择url访问。
那么如何确认服务的健康状态?user-service每过30秒发送一个心跳,若注册中心过期没收到,那么不再向其他服务提供这个url
一、搭建eureka服务
1.引入依赖
ps:注意这里compiler版本应该是8 ,涉及到兼容问题
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
2.编写启动类,添加注解
3.编写yml文件,编写配置
server:
port: 10086 #服务端口
spring:
application:
name:eurekaserver #eureka服务名称
eureka:
client:
service-url: #eureka地址信息
defaultZone: http://localhost:10086/eureka
二、将user-service等服务注册到注册中心
1.在user-service中加入eureka客户端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2. 在user-service中加入配置
ps:包括在eureka中注册的名字,以及写入eureka-service的地址等
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud-user?useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
application:
name: userservice #user服务名称
mybatis:
type-aliases-package: cn.itcast.user.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
eureka:
client:
service-url: #eureka地址信息
defaultZone: http://localhost:10086/eureka
3. 复制应用查看注册中心能否检测到
4.结果
三、服务发现
在前言中提到,注册中心会向服务消费者提供可用服务的url,那么消费者如何告诉注册中心我需要哪个服务呢?或者说如果不写死localhost:8080消费者如何利用服务中心调用服务呢?答案是通过服务名,即application name,使用name代替ip和端口,如图