写在前面:这是一个微服务专题的文档包括了微服务常用的组件,如果你有疑问的地方,可以在整体文档中找到你想找的答案

注册中心

知识索引

  • 什么是注册中心
  • cap定理
  • 注册linux创建文件linux常用命令心对比
  • 服务注册
  • 服务调用

1 什么是注册中心

微服务服务互相调用时镜像是什么意思需要知道被调用服务的具体地址以及它是否健康(服务器是否有响应),这就要求注册中心必须拥有这两项能力:1.允许服务注册的能力,2.监控linux虚拟机服务的能力。如果只有一个注册中心,当它由于各种原因无法提供服务时我们的接口自动化系统也无法正常运行,所以要求注册中心有集群的能力,并且集群之间数据必须保证一致性,否则当注册中心由于主节点故障转移主机时由于主从节点的数据不一致可能会导致在服务调用时获取到错误的服务列表。所以它还必须具备高可用,一致性的集群能力。

2 Spring Clo工商银行ud支持的注册中心及对比

2.1 cap定理

CAP原则又称Clinux重启命令AP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多接口crc错误计数只能同时实现两linux系统点,不可能三者兼顾。

Consistency 一致性:所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)

Availability 可用性:在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)

Partition Tolerance 容错性:以实际效果而言,分区相当于对通镜像是什么意思信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。如果在某个分布式系统中数据无副本, 那么系统必然满足强一致性条件, 因为只有独一数据,不会出现数据不一致的情况,此时C和P两要素具备,但是如果系统发生了网络分区状况或者宕机,必然导致某些数据不可以访问,此时可用性条件就不能被满足,即Go在此情况下获得了CP系统,但是CAP不可同时满足。

2.2 注册中心对比

Nacos Eureka Consul Zookeeper
一致性协议Linux CP+AP AP CP CP
健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
linux是什么操作系统载均衡策略镜像文件 权重/metadata/Selector Ribbon Fabio
雪崩保护
自动注销实例 支持 支持 不支接口自动化 支持
访问协议 HTTP/DNS HTTP HTTP/DNS TCP
监听支持 支持 支持 支持 支持
多数据中心 支持 支持 支持 不支持
跨注册中心同步 支持 公司让员工下班发手机电量截图支持 支持 不支持
Spring微服务Cloudlinux命令集成 支持 支持 支持 支持
Dubbo集成 支持 不支持 不支持 支持
K8S集成 支持 不支持 支持 不支持

其中Eureka2.x版本已经宣布闭源,Nacos在后续Spring CloudAlibaba章节中会介镜像是什么意思绍,本篇我们主要通过Consul来演示注册中心的配置及使用。

3 Cons龚俊ul

3.1 Consul介绍

Consul Hash接口卡iCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,微服务的项目视频Consul 的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,工资超过5000怎么扣税不再需要依赖其他工具(比如 ZooKeeper 等)。使用起来镜像画面什么梗也较 为简单。Consul使接口文档Go 语言镜像人生编写,因此具有天然可移植性(支持Linuxwindows镜像Mac OS X);安装包仅包含一个可执镜像干部行文件,方便部署,与 Docker 等轻量级容器可无缝配合。

3.2 Consul安装(虚拟机模拟linux操作)

查看所有docker镜像

docker images

还不会微服务?5分钟教会你

拉取Consul镜像

docker pull consul # 默认拉取latest

还不会微服务?5分钟教会你

可以再次查看镜像已经存在工龄越长退休金越多吗Consul

还不会微服务?5分钟教会你

启动一个Con微服务面试题sul容器

docker run -d -p 8500:8500 --restart=always --name=consul consul:latest agent -server -bootstrap -ui -node=1 -client='0.0.0.0'

还不会微服务?5分钟教会你

查看启动的容器

还不会微服务?5分钟教会你

浏览器访问安装机器的8500端口

http://ip:8500

跳转到如下页面说明安装镜像画面什么梗成功

还不会微服务?5分钟教会你

4微服务的项目视频 服务注册

接下来我镜像投屏们开发一个简单的服务注册到注册中心。

4.1 创建maven项目

新建一个spring_cloud_demos项目并创建service_prlinux重启命令ovider模块,目录结构如下

还不会微服务?5分钟教会你

4.2 引入依赖

在父项目中引入spring-boot-starter-接口是什么parent

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.7.RELEASE</version>
</parent>

最终如下:

还不会微服务?5分钟教会你

在service_provider中镜像人生引入linux常用命令Consu龚俊l依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

最终如下:

还不会微服务?5分钟教会你

4.3 配置文件微服务是什么

server:
  port: 8001 #服务端口
spring:
  application:
    name: service-provider #服务名
  cloud:
    consul:
      host: 192.168.184.128 #注册中心地址
      port: 8500 #注册中心端口
      discovery:
        service-name: ${spring.application.name} #注册中心中该服务的服务名

4.4 编写代码

4.4.1 启动类

/**
 * Copyright (c) 2022 itmentu.com, All rights reserved.
 *
 * @Author: yang
 */
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProvicerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceProvicerApplication.class, args);
    }
}

代码说明:

1:@EnableDiscoveryClient表示发现注册中心,向注册中心注册服务
2:@SpringBootApplication见springboot章节

4.4.2 接口编写

/**
 * Copyright (c) 2022 itmentu.com, All rights reserved.
 *
 * @Author: yang
 */
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello!";
    }
}

4.4.3 运行启动类

运行后控制台看到如下内容说明启动成功:

还不会微服务?5分钟教会你

同时查看注册中心页面中该服务已经注册成功

还不会微服务?5分钟教会你

5 服务调用

5.1 创建子工商银行模块service_con微服务和分布式的区别sumer

还不会微服务?5分钟教会你

5.2 引入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

5.3 配置文件

server:
  port: 8001 #服务端口
spring:
  application:
    name: service-provider #服务名
  cloud:
    consul:
      host: 192.168.184.128 #注册中心地址
      port: 8500 #注册中心端口
      discovery:
        service-name: ${spring.application.name} #注册中心中该服务的服务名
        register: false #不注册到注册中心

说明:

1:由于消费者不需要注册到注册中心,所以spring.cloud.consul.discovery.register为false

5.4 编写代码

5.4.1 启动类

/**
 * Copyright (c) 2022 itmentu.com, All rights reserved.
 *
 * @Author: yang
 */
@SpringBootApplication
public class ServiceConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceConsumerApplication.class, args);
    }
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

代码说明:

1:注册一个RestTemplate到spring容器中以便使用

5.4.2 接口编写

@RestController
@RequestMapping("/consumer")
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private DiscoveryClient discoveryClient;
    @GetMapping("/hello")
    public String hello(){
        //1、获取注册中心中注册的service-provider实例列表
        List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("service-provider");
        //2、获取实例
        ServiceInstance serviceInstance = serviceInstanceList.get(0);
        //3、根据实例的信息拼接的请求地址
        String url = serviceInstance.getUri()+ "/hello";
        //4、发送请求
        return restTemplate.getForObject(url,String.class);
    }
}

代码说明:

1:DiscoveryClient用于获取注册中心中对应服务的实例
2:serviceInstance.getUri()表示实例中的地址包括ip端口
3:RestTemplate用于进行rest方式的http请求

5.4.3 运行启动类并访问接口

浏览器访问

http://localhost:8002/consumer/hello

可以看到

还不会微服务?5分钟教会你

说明我们已linux系统安装经成功通过consumer访问到了service工龄越长退休金越多吗_provider/hello接口并响应数据