Version: Next
集群Eureka构建
Eureka 集群原理
问题
微服务RPC远程服务调用最核心的什么?
- 高可用:如果只有单点注册中心服务器,一旦宕机,则整个服务环境崩溃
解决:
- 将注册中心集群化
- 集群中的节点:相互注册:相互守望
新建 Eureka 集群节点
参照
cloud-eureka-server7001
,建一个cloud-eureka-server7002
- pom:dependencies 直接复制 7001 的
修改映射文件:host文件,mac 系统为
/etc/hosts
添加
127.0.0.1 eureka7001.com127.0.0.1 eureka7002.com
修改
7001
与7002
微服务的application.yaml
内容
7001
server:
port: 7001
eureka:
instance:
# hostname: localhost #eureka服务端的实例名称
hostname: eureka7001.com # 集群环境下,在hosts文件配置了自己地址的名字
client:
# false表示不向注册中心注册自己
register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要检索服务
fetch-registry: false
service-url:
# 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
# 单机
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# 集群:使用定义在 hosts 里的名称,注册到对方节点
defaultZone: http://eureka7002.com:7002/eureka/
7002
server:
port: 7002
eureka:
instance:
# hostname: localhost #eureka服务端的实例名称
hostname: eureka7002.com # 集群环境下,在hosts文件配置了自己地址的名字
client:
# false表示不向注册中心注册自己
register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要检索服务
fetch-registry: false
service-url:
# 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
# 单机
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# 集群:使用定义在 hosts 里的名称,注册到对方节点
defaultZone: http://eureka7001.com:7001/eureka/
提示
如果使用更多节点,则在 defaultZone
位置,使用 ,
将地址隔开
写主启动类,加上
@SpringBootApplication
和@EnableEurekaServer
@SpringBootApplication@EnableEurekaServerpublic class EurekaMain7002 {public static void main(String[] args) {SpringApplication.run(EurekaMain7002.class, args);}}
测试
- 依次启动
7001
和7002
项目- 访问
localhost:7001
和localhost:7002
,互相可以看到
支付服务注册到Eureka集群
修改
cloud-provider-payment8001
的application.yaml
defaultZone
部分,同时写上两个 Eureka 节点的地址即可server:port: 8081spring:application:name: cloud-payment-servicedatasource:username: rootpassword: rooturl: jdbc:mysql://localhost:3306/springcloud?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourcemybatis:mapper-locations: classpath:mapper/*.xmlconfiguration:map-underscore-to-camel-case: true #驼峰映射log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #调试打印SQLeureka:client:#表示是否将自己注册进EurekaServer默认为trueregister-with-eureka: true#是否从EurekaServer抓取已有的注册消息,默认为true,单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡fetch-registry: trueservice-url:#集群版defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/#单机版 入驻到这个地址(就是注册中心地址)# defaultZone: http://127.0.0.1:7001/eureka/
订单服务注册到Eureka集群
同理,修改YAML文件就可以,略
测试
- 启动
7001
、7002
- 启动
cloud-provider-payment8001
- 启动
cloud-consumer-order80
- 访问
http://127.0.0.1:80/consumer/payment/get/4
能够看到正确的响应 JSON 即可