简述:Eureka 是天生集群的,搭建配置相当简单:不论你有多少的机器部署,只要相互之间指定对方的注册中心地址就可以了,而多个 Eureka Server 之间是通过复制的方式完成注册服务的同步,遵循AP原则。
优点:
缺点:
1.Eureka属于应用内的注册方式,对应用的侵入性太强,且只支持Java应用。
eureka集群注册中心的搭建以及测试:
搭建三个注册中心(也可以多个或者两个,因为eureka集群是p2p的,并不是选举模式,故可随意增加数量且搭建简单)
简而言之,首先搭建父项目springcloud用于统一管理包,然后创建springcloud_eureka的顶级项目,在该项目下创建三个注册中心eureka1、eureka2、eureka3以及测试用的生产者项目provider以及消费者项目consumer,测试注册中心是否正常。
整体目录结构如下:
2.然后在springcloud-eureka项目下创建三个注册中心项目,并在pom文件中添加以下配置,同时对于三个注册中心的application配置需要稍微修改其中几个配置项:
Pom文件添加以下依赖:
Application.yml配置文件添加以下:
server:
port: 8761
eureka:
instance:
# 配置主机名,请在【Host】文件中进行主机名与本机ip的映射配置
hostname: eureka-server1
# 显示 ip 地址,代替显示主机名
prefer-ip-address: true
# 所注册服务实例名称的显示形式
instance-id: ${eureka.instance.hostname}:${server.port}
# 每隔 3 秒发一次心跳包
lease-renewal-interval-in-seconds: 3
# 如果 15 秒没有发送心跳包,就让 eureka 把自己从服务列表中移除
lease-expiration-duration-in-seconds: 15
client:
service-url:
# 想要搭建 eureka 集群,需要将自己注册到其它的 eureka 中
# 因此这里需要配置其它 eureka 地址,多个地址以英文逗号分隔
defaultZone: http://eureka-server2:8762/eureka,http://eureka-server3:8763/eureka
# 是否将自己的路径注册到 eureka 上
register-with-eureka: true
# 是否需要从 eureka 中抓取路径
fetch-registry: true
server:
# 关闭 eureka 自我保护,当注册的服务未及时发送心跳时,自动移除服务
enable-self-preservation: false
# eureka 检查服务是否存在的时间间隔(毫秒)
eviction-interval-timer-in-ms: 5000
dashboard:
enabled: true
# eureka 监控页面路径 默认访问: http://地址:端口
path: "/"
# 集群需要使用相同的 application 名称
spring:
application:
name: eureka-server-cluster
#actuator——springboot四大核心程序监控器配置
# actuator 监控配置
management:
#actuator端口 如果不配置做默认使用上面8080端口
server:
port: 7761
info:
env:
enabled: true
endpoints:
web:
exposure:
#默认值访问health,info端点 用*可以包含全部端点
include: "*"
#修改访问路径 2.0之前默认是/; 2.0默认是/actuator可以通过这个属性值修改
base-path: /actuator
endpoint:
shutdown:
enabled: true #打开shutdown端点
health:
show-details: always #获得健康检查中所有指标的详细信息
info:
app.name: eureka注册中心1机
app.model: eureka
app.desc: eureka集群中的第一台机
company.name: dogquan
build.version: eureka 3.1.2
启动类记得添加;@EnableEurekaServer
关于eureka-server1 需要在host文件中进行映射,同理其它两个中心。类比eureka1中心的创建,相继可创建集群中其它两个中心,创建完后先后启动三个注册中心,访问地址http://eureka-server1:8761即可访问到eureka监控中心的相关信息。包括注册的消费者,提供者以及集群的其它两个注册中心。
3.最后在springcloud-eureka项目下相继又创建生产者provider以及consumer消费者项目进行测试注册中心的可用性(消费者又可以是生产者,两者基于服务的供给相互切换身份):
生产者:
Pom文件中添加以下依赖:
Application.yml配置文件添加以下配置:
server:
port: 8200
eureka:
instance:
# 配置主机名,请在【Host】文件中进行主机名与本机ip的映射配置
hostname: provider_service
# 显示 ip 地址,代替显示主机名
prefer-ip-address: true
# 所注册服务实例名称的显示形式
instance-id: ${eureka.instance.hostname}:${server.port}
# 每隔 3 秒发一次心跳包
lease-renewal-interval-in-seconds: 3
# 如果 15 秒没有发送心跳包,就让 eureka 把自己从服务列表中移除
lease-expiration-duration-in-seconds: 15
client:
service-url:
# 将当前 springboot 服务注册到所有的 eureka 中,多个地址以英文逗号分隔
defaultZone: http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka,http://eureka-server3:8763/eureka
# 是否将自己的路径注册到 eureka 上
register-with-eureka: true
# 是否需要从 eureka 中抓取路径
fetch-registry: true
# 集群需要使用相同的 application 名称
spring:
application:
name: provider-App
创建controller层并添加以下代码:
@RequestMapping("/provider")
@RestController
public class ProviderController {
@RequestMapping("/getdata/{id}")
public Map GetData(@PathVariable("id") int id) {
Map result = new HashMap();
result.put("status",0);
result.put("msg","success");
result.put("get_id_value",id);
result.put("version", UUID.randomUUID().toString());
return result;
}
}
在启动类Provider上记得添加:@EnableEurekaClient
@EnableEurekaClient
@SpringBootApplication
public class Provider {
public static void main(String[] args) {
SpringApplication.run(Provider.class,args);
}
}
消费者:
Pom文件添加以下依赖:
Application.yml配置中添加以下:
server:
port: 8100
eureka:
instance:
# 配置主机名,请在【Host】文件中进行主机名与本机ip的映射配置
hostname: consumer_service
# 显示 ip 地址,代替显示主机名
prefer-ip-address: true
# 所注册服务实例名称的显示形式
instance-id: ${eureka.instance.hostname}:${server.port}
# 每隔 3 秒发一次心跳包
lease-renewal-interval-in-seconds: 3
# 如果 15 秒没有发送心跳包,就让 eureka 把自己从服务列表中移除
lease-expiration-duration-in-seconds: 15
client:
service-url:
# 将当前 springboot 服务注册到所有的 eureka 中,多个地址以英文逗号分隔
defaultZone: http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka,http://eureka-server3:8763/eureka
# 是否将自己的路径注册到 eureka 上
register-with-eureka: true
# 是否需要从 eureka 中抓取路径
fetch-registry: true
# 集群需要使用相同的 application 名称
spring:
application:
name: consumer-App
增加restTemplateConfig用于简化调用rest接口方式(主要方便测试):
@Configuration
public class RestTemplateConfig {
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
// RestTemplate 简化了调用 Restful 接口的开发方式
return new RestTemplate();
}
}
增加controller层:
@RequestMapping("/consumer")
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/getdata/{id}")
public Map GetData(@PathVariable("id") int id) {
//使用服务在 eureka 上注册的 application 名称代替 ip 和端口号
String url = "http://PROVIDER-APP/provider/getdata/" + id;
Map result = restTemplate.getForObject(url, Map.class);
return result;
}
}
同理生产者,在启动类中亦需要记得:@EnableEurekaClient
最后访问浏览器中访问生产者请求地址或者消费者请求地址,成功访问即可。
备注:actuator组件为程序监控,相关配置见于eureka注册服务的配置文件application,同时需要在pom文件中添加以下依赖:
org.springframework.boot spring-boot-starter-actuator
每一个服务都可添加该组件,主要用于监控程序的相关信息,可以在eureka的监控页面对应的info看到自定义的info信息(配置在application配置文件,详情请自行;同时,注意生产环境中如果有使用该组件一定要做相关的权限访问控制,不然会暴露系统内部各种信息,信息泄漏的风险极大。相关学习地址:Spring boot——Actuator 详解_actuator springboot_奋斗喝咖啡的博客-CSDN博客)