springcloud下的微服务-服务注册与发现

微服务是一种架构模式,一种分布式的架构风格,将一个庞大的单体应用拆分成若干个“微小”的服务,服务间通过进程通讯完成原本在单体应用中的调用。
其中必要的六个基本技术为:
1、服务注册与发现;2、进程间通信;3、负载均衡;4、分布式配置中心;5、熔断器;6、网关路由。

看官方文档是最好的
http://cloud.spring.io/spring-cloud-static/Finchley.M9/multi/multi_spring-cloud.html

网上已经有很多很全面的讲解了,所以本文大致是作为各篇文章知识点的汇集
为什么需要服务注册与发现,具体可以看下面文章(一定要看,会加深了解)
永不失联!如何实现微服务架构中的服务发现?
英语原文:Service Discovery in a Microservices Architecture

目前来说,比较常见的服务注册的产品有eureka,consul,zookeeper和etcd,如下
这里写图片描述
分布式领域CAP理论,
Consistency(一致性), 数据一致更新,所有数据变动都是同步的
Availability(可用性), 好的响应性能
Partition tolerance(分区容忍性) 可靠性
定理:任何分布式系统只可同时满足二点,没法三者兼顾

参考服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka

服务注册有两种模式
客户端服务发现模式
这里写图片描述

服务器端服务发现模式
这里写图片描述

同样在上面链接中有详解讲解
两种模式的对比
这里写图片描述

目前来说,大部分服务发现的实现都采取了客户端模式
(参考浅谈服务发现

springcloud-eureka

要注意的一点是,Spring Cloud 是有多个版本的,就在本文写的时候就有如下版本
这里写图片描述
不同版本的依赖是不同的,如在Dalston中,eureka client 依赖为spring-cloud-starter-eureka
而在Finchley中依赖为spring-cloud-starter-netflix-eureka-client,如果你看了网上的教程发现有的注解无法注入,那么大多数都是版本问题

官网你可以看到各个版本及其官方文档
https://projects.spring.io/spring-cloud/

  <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.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>
    </properties>
 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

而在springboot创建的时候,我创建的时候是默认选取了Finchley.BUILD-SNAPSHOT
并且导入的依赖为spring-cloud-starter-netflix-eureka-client,所以版本一定要注意

在所有示例中,均使用springboot1.5.2版本,springcloud使用Dalston.RELEASE

Eureka是客户端服务发现模式,并且是自注册的

Springcloud 整合了eureka,下面的几个网站可以让你很好地入门Springcloud-eureka
https://www.cnblogs.com/woshimrf/p/springclout-eureka.html(springcloud 版本为Dalston)

https://blog.csdn.net/forezp/article/details/69696915

http://www.cnblogs.com/cjsblog/p/7986628.html

值得注意的是

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

registerWithEureka: false和fetchRegistry: false来表明这是一个来eureka server

如果看到
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

说明Eureka已经进入了保护模式,保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据

详见:http://www.itmuch.com/spring-cloud-sum-eureka/

如果引入的是spring-cloud-starter-netflix-eureka-client,那么将会自动注册到Eureka Server,只要你配置了Eureka Server

并且@EnableEurekaClient和@EnableDiscoveryClient都是可以的

spring-cloud-consul

在windows下载consul
consul怎么在windows下安装
cmd 输入consul agent -dev打开consul

打开http://localhost:8500,看到如下界面
这里写图片描述

引入依赖(在新创建项目时选择consul-discovery即可)

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
   </dependencies>
</dependencyManagement>

启动类上加入注解@EnableDiscoveryClient,开启consul服务发现

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ConsulHiApplication {

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

    @RequestMapping("/hi")
    public String home() {
        return "hi ,i'm miya";
    }
}

application.yml指定consul服务的端口为8500

spring:
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        healthCheckPath: ${management.contextPath}/health
        healthCheckInterval: 15s
        instance-id: consul-hi
  application:
    name: consul-hi

server:
  port: 8502

打开http://localhost:8500,看到consul-hi已经注册了
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值