Spring Cloud(一):使用Eureka进行服务注册与发现

作为分布式架构开发的一种选择,Spring Cloud利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud是各类框架的集合,这一点和Spring Boot是一样的,因为Spring Cloud就是基于Spring Boot搭建的,Spring Boot可以单独构建项目,而Spring Boot却不能脱离Spring Boot。

Spring Cloud和Dubbo比起来,可以类比为Spring Security和Shiro,一个是各个方面都很到位,包含多种服务集成,另一个则是单点突出。目前市面上,微服务的框架很多,Spring Cloud适合中小型互联网公司,因为大公司有自己的微服务治理方案,小公司和传统企业则不需要Spring Cloud来进行服务治理,因为学习成本高、架构用不上,更适合用Dubbo、Kubernetes这些框架。因为近几年微服务架构和Docker容器概念火热,所以我觉得学习Spring Cloud长远上看可能会更有发展前景。

Eureka则是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。

SpringCloud系列作为我个人的学习记录,难免有错误和遗漏,欢迎指出ヾ(๑╹◡╹)ノ"

  • 创建服务中心

和创建普通的SpringBoot项目一样,不过在引入模块的时候注意添加SpringCloud所需要的模块

勾选后生成的项目依赖包含

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  • 添加注解和配置

在启动类上添加@EnableEurekaServer注解,表示这是Eureka的服务端

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

然后是配置yml文件

spring:
  application:
    name: eureka-server
server:
  port: 8761
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone:
        http://localhost:${server.port}/eureka

eureka.client.register-with-eureka :表示是否将自己注册到Eureka Server,默认为true
eureka.client.fetch-registry :表示是否从Eureka Server获取注册信息,默认为true
eureka.client。service-url.defaultZone : 表示服务实例地址,默认http://localhost:8761/eureka

这里有个大坑,就是default Zone这个属性提示不出来,我一度以为是jar包导错了还是语法写的有问题,甚至以为SpringBoot2.0后的版本和1.0的版本配置有差别,最后查了资料发现,发现是Eureka不认识这个属性。。。其他的属性是提前做了处理,按照驼峰或横线来识别。service-url的属性是Map,只要按照k-v格式配置就行,如果直接忽略defaultZone这个前置,就会报Failed to bind properties under 'eureka.client.service-url' to java.util.Map这个错误。

  • 启动服务

运行启动文件,访问http://localhost:8761/可以看到如下界面,No instances available表示没有服务

  • 创建客户端并注册服务

同样创建一个SpringBoot项目,勾选的是Eureka Discovery模块,生成后依赖如下

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

在启动文件上添加@EnableEurekaClient注解

@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

然后是配置文件

spring:
  application:
    name: eureka-client
server:
  port: 8762
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

defaultZone指向server端的地址

启动服务可以看见服务成功注册了

  • Eureka集群

实际生产环境中,为了保证系统的安全性和稳定性,服务注册中心需要两台及以上,保证服务的正常运行。使用集群就是保证高可用的一种解决方案,集群搭建的原理就是通过相互注册,也就是配置其他可用的service-url来进行高可用部署。

假设有三台服务器,那么拷贝三份server端,修改yml文件如下,即一个url指向其余两个url来保证服务注册中心的使用不会因为一台机器宕机而出现问题。

---
spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2/eureka/,http://peer3/eureka/

---
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1/eureka/,http://peer3/eureka/

---
spring:
  profiles: peer3
eureka:
  instance:
    hostname: peer3
  client:
    serviceUrl:
      defaultZone: http://peer1/eureka/,http://peer2/eureka/

demo地址:GitHub - hong52ni/SpringCloud-Demo-Aggregate: SpringCloud整合案例

扫码关注我的微信公众号:Java架构师进阶编程  获取最新面试题,电子书

专注分享Java技术干货,包括JVM、SpringBoot、SpringCloud、数据库、架构设计、面试题、电子书等,期待你的关注!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

方木丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值