高可用性ユーレカレジストリを構築するための1、(クライアントはユーレカクラスターを呼び出します)
ユーレカ高可用性は実際にあなたが相互に登録されたサービスレジストリのグループ、高可用性の効果を達成するために、互いに同期を達成するために、サービスのリストを形成することができるように、他のサービスレジストリを自分に自身をサービスとして登録します。構成プロパティまたはYMLファイルをその:
##あなたは自分のレジストリに自身を登録する必要があるかどうか(クラスタが必要なときに真です)
eureka.client.register-と-ユーレカ=真
##、または必要な情報サービスを取得する必要が
eureka.client.fetch-レジストリ=真
アイデア:ユーレカは、相互にデータの同期を達成するために、お互いに登録したグループ登録センターを形成するために、高可用性の効果を達成するために、相互登録主義の原則を使用してクラスタを構築します。私はあなたを持っていることを、あなたは私を持っています。コードは以下の通りであります:
(1)server1的properties文件中:
##服务端口
server.port=8100
##注册中心ip地址
eureka.instance.hostname: 127.0.0.1
##服务名称
spring.application.name=app-eureka
##注册地址
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:9100/eureka/
##因为自己是注册中心,是否需要将自己注册给自己的注册中心(集群的时候是需要为true)
eureka.client.register-with-eureka=true
##因为自己是注册中心,不需要去检索服务信息
eureka.client.fetch-registry=true
(2)server2的properties文件中:
##服务端口
server.port=9100
##注册中心ip地址
eureka.instance.hostname: 127.0.0.1
##服务名称
spring.application.name=app-eureka
##注册地址
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:8100/eureka/
##因为自己是注册中心,是否需要将自己注册给自己的注册中心(集群的时候是需要为true)
eureka.client.register-with-eureka=true
##因为自己是注册中心,不需要去检索服务信息
eureka.client.fetch-registry=true
注意:多台server的服务名称必须一致!!!!
結果は以下の通りであります:
登録時に、サービスプロバイダや消費者は、ファイルまたはYMLにそれらのプロパティで複数のレジストリを設定する必要があります
##のメンバーが現在ユーレカに登録されたサービスアドレスを提供
eureka.client.serviceUrl.defaultZone =のhttp:// localhostを:8100 /ユーレカは、http:// localhostを:9100 /ユーレカ
結果は以下の通りであります:
質問:なぜ、単一のサーバ上のサービス情報を登録している、それはサービスではないのですか?
登録プロセスにのみデータに対応する優れたサービスレジストリサービス情報を保証しますので。登録データセンターがダウンした場合、自動的に別のサーバーへのデータ転送を同期させます。
五、SpringCloudユーレカ自己保護メカニズム
1、EurekaClient(注册中心客户端)、EurekaServer(注册中心服务端),产生自我保护机制的原因:为了防止EurekaClient可以正常运行,但是与EurekaServer网络不通的情况下,EurekaServer不会将EurekaClient剔除。
自我保护机制:默认情况下,EurekaClient定时向EurekaServer发送心跳包,如果EurekaServer在一定的时间内(默认90秒)没有收到EurekaClient发送心跳包,便会直接从服务注册列表中剔除该服务。但是在短时间内丢失了大量的服务实例心跳,这时候EurekaServer会开启自我保护机制,不会去剔除该服务。
自我保护机制中,为什么Eureka不会剔除该服务呢? 是为了防止EurekaClient是可以正常访问,但是只是EurekaClient与EurekaServer之间网络访问不通,防止误剔除。
在什么环境下开启自我保护机制?建议本地环境禁止自我保护机制,生产环境开启自我保护机制。
禁止自我保护机制的方法:
(1)在EurekaServer的yml或properties文件中添加相关配置:
##测试关闭自我保护机制,保证不可用服务及时剔除
eureka.server.enable-self-preservation=false
eureka.server.eviction-interval-timer-in-ms=2000
(2)客户端的yml或properties文件中添加如下配置:
##心跳简则与持续时间,测试时将值设置小些,保证服务关闭后注册中心能及时剔除服务
##eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
eureka.instance.lease-renewal-interval-in-seconds=1
##eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除
eureka.instance.lease-expiration-duration-in-seconds=2
如果服务真的宕机或人为关闭时,应手动从Eureka中剔除该服务的信息,本地调用应该重试机制,保证接口网络延迟幂等性、做好服务器的降级功能(给客户端返回url提示)。
六、Consul、Eureka、Zookeeper、Redis注册中心对比
1、注册中心的作用:服务治理、服务注册与发现,能够实现负载均衡,管理服务与服务之间的依赖关系。
2、springcloud中支持三种注册中心:Eureka、Zookeeper、Consul。
Zookeeper:分布式协调工具,可以实现注册中心,采用zk的临时节点类型。临时节点和生命周期是关联的,服务断开连接之后,该节点会自动删除。