Spring Boot Eureka搭建(stand-alone && 同伴意识)

Eureka服务注册中心

服务发现是基于微服务架构中的一个重要原则。Eureka既是服务端也是客户端。Eureka服务端可以部署成为高可用,每一个服务器都会复制注册的服务状态到其他服务器。

Eureka环境搭建

Eureka的搭建使用Spring Boot框架,首先在pom.xml中引入需要的依赖。

这里SpringBoot使用的是2.0.6版本

<!-- Spring Boot 父引用,有此配置当前应用才算是Spring Boot应用,该配置会继承大量的Spring Boot插件 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

Spring Cloud使用Finchley.RELEASE版本

<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud-task.version>2.0.0.RELEASE</spring-cloud-task.version>
		<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
		<logback-gelf.version>2.0.0</logback-gelf.version>
	</properties>

spring-cloud-starter-netflix-eureka-server使用的是2.0.2.RELEASE版本。

        <!-- 依赖 Spring Cloud Netflix Eureka Server -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
			<version>2.0.2.RELEASE</version>
		</dependency>

然后再应用启动类上加上注解@EnableEurekaServer。

启动后通过服务端管理页面查看注册的基本信息http://IP:PORT(默认8761)。

单机环境搭建

application.yml配置如下

server:
  port: 8761

spring:
  application:
    name: register-center

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    # 测试时关闭自我保护机制,保证不可用服务及时剔除
    enable-self-preservation: false
    # 剔除失效服务间隔,默认60000
    eviction-interval-timer-in-ms: 3000




# registerWithEureka、fetchRegistry两个参数是禁用把自己当成Eureka客户端的。
# registerWithEureka:false.取消向注册中心注册
# fetchRegistry:false.取消向注册中心获取注册信息(服务、实例信息)

启动时直接启动即可,默认加载的是application.yml配置文件。

高可用环境搭建-同伴意识

Eureka可以运行多个实例,来保证高可靠和高可用,让他们彼此注册。这是默认的行为,所以你需要做的只是为对方添加一个有效的serviceUrl。以两个peer构成一个集群为例,有效配置如下:

创建application-eureka1.yml,配置如下:

server:
  port: 8761

spring:
  application:
    name: register-center
  profiles: eureka1

eureka:
  instance:
    # 配置通过主机名方式注册
    hostname: eureka1
  client:
    service-url:
      defaultZone: http://eureka2:8762/eureka/
    register-with-eureka: true
    fetch-registry: true
  server:
    # 关闭保护机制,默认true
    enable-self-preservation: false
    # 剔除失效服务间隔,默认60000
    eviction-interval-timer-in-ms: 3000

创建application-eureka2.yml,配置如下:

server:
  port: 8762

spring:
  application:
    name: register-center
  profiles: eureka2

eureka:
  instance:
    # 配置通过主机名方式注册
    hostname: eureka2
  client:
    service-url:
      defaultZone: http://eureka1:8761/eureka/
    register-with-eureka: true
    fetch-registry: true
  server:
    # 关闭保护机制,默认true
    enable-self-preservation: false
    # 剔除失效服务间隔,默认60000
    eviction-interval-timer-in-ms: 3000

建议使用域名,上述两个配置都是使用的域名,因此需要先配置hosts:

127.0.0.1 eureka1
127.0.0.1 eureka2

按照如上配置,实现两个注册中心实例相互注册,你中有我,我中有你。

启动Eureka-IDEA方式

配置启动项如下后,再启动各个实例。

启动Eureka-生产环境命令行方式

java -jar xxx.jar --spring.profiles.active=8761

java -jar xxx.jar --spring.profiles.active=8762

分别访问eureka1:8761/,eureka2:8762/,可以在registered-replicas看到都相互注册了,available-replicas可用分片中可以看到相应的节点,停止一个另一个还可以工作。若available-replicas没有相应节点,则是因为eureka.client.register-with-eureka/eureka.client.fetch-registry为false。

启动应用实例

从上图中也可以看到启动了服务网关实例,通过两个注册中心实例中的任意一个都能看到,说明其已经成功注册到注册中心集群中。

注意:若第一个启动的eureka实例报错,这种情况可能是正常的,因为第一个启动的找不到注册中心去注册。等待一段时间,等到他要注册的eureka实例启动了,如果他能够连接注册上去且不会继续报错就是正常的。

 

参考文章:

https://cloud.tencent.com/developer/article/1328027

https://cloud.tencent.com/developer/article/1081556

https://yq.aliyun.com/articles/693077

服务下线相关参考:

eureka开发时快速剔除失效服务:https://blog.csdn.net/haveqing/article/details/88406592

eureka的几种主动下线服务方式:https://blog.csdn.net/xiaobao5214/article/details/81263445

eureka如何剔除服务:https://jingyan.baidu.com/article/ca00d56c09d971e99eebcfd6.html

eureka强制下线:https://blog.csdn.net/u012394095/article/details/80996172

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LuckyJiang.2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值