Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。
域和地区
Eureka服务器没有后端存储,但是注册表中的服务实例都必须发送心跳线以保持其注册更新(因此可以在内存中完成)。客户端还具有eureka注册的内存缓存(因此,他们不必为注册表提供每个服务请求)。
默认情况下,每个Eureka服务器也是Eureka客户端,并且需要(至少一个)服务URL来定位对等体。如果您不提供该服务将运行和工作,但它将淋浴您的日志与大量的噪音无法注册对等体。
独立模式(只运行一个eureka)
只要存在某种监视器或弹性运行时间(例如Cloud Foundry),两个缓存(客户机和服务器)和心跳的组合使独立的Eureka服务器对故障具有相当的弹性。在独立模式下,您可能更喜欢关闭客户端行为,因此不会继续尝试并且无法访问其对等体。例:
application.yml(Standalone Eureka Server)
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
请注意,serviceUrl指向与本地实例相同的主机。
同行意识(运行多个eureka)
通过运行多个实例并请求他们相互注册,可以使Eureka更具弹性和可用性。实际上,这是默认的行为,所以你需要做的只是为对方添加一个有效的serviceUrl,例如
application.yml(Two Peer Aware Eureka Servers)
spring:
profiles: peer1
eureka:
instance:
hostname: peer1
client:
serviceUrl:
defaultZone: http://peer2/eureka/
---
spring:
profiles: peer2
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1/eureka/
在这个例子中,我们有一个YAML文件可以用于通过在不同的Spring配置文件中运行,在2台主机(peer1和peer2)上运行相同的服务器。您可以使用此配置来测试单个主机上的对等体感知(通过操作/etc/hosts来解析主机名,在生产中没有太多价值)。事实上,如果您在一台知道自己的主机名的机器上运行(默认情况下使用java.net.InetAddress查找),则不需要eureka.instance.hostname。
您可以向系统添加多个对等体,只要它们彼此直接相连,就可以将它们之间的注册同步。
application.yml(Three Peer Aware Eureka Servers)
eureka:
client:
serviceUrl:
defaultZone: http://peer1/eureka/,http://peer2/eureka/,http://peer3/eureka/
---
spring:
profiles: peer1
eureka:
instance:
hostname: peer1
---
spring:
profiles: peer2
eureka:
instance:
hostname: peer2
---
spring:
profiles: peer3
eureka:
instance:
hostname: peer3
喜欢IP地址
在某些情况下,Eureka最好广告服务的IP地址,而不是主机名。将eureka.instance.preferIpAddress设置为true,当应用程序向eureka注册时,它将使用其IP地址而不是其主机名。
了解了
为方便以后组建开发,我们新建主工程
以下是使用idea创建 euraka server 的部分过程
等待maven下载…
下载完之后
@EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
server:
port: 9090
eureka:
instance:
hostname: 127.0.0.1
client:
registerWithEureka: false #false 表示自己不需要向注册中心注册自己
fetchRegistry: false #false 表示自己就是注册中心,职责就是维护服务,并不需要去检索服务
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port} #独立
#defaultZone: http://IP:9001/eureka/,http://IP:9002/eureka/ #集群
启动 EurekaApplication
此时一个 eureka 服务器已经搭建成功
No instances available 没有可用的实例 表示还没有 服务注册上来