1、服务注册与发现
1.1、consul
1.1.1 是什么
官网: Consul by HashiCorp
spring-cloud-consul: Spring Cloud Consul :: Spring Cloud Consul
gitHub 官网 :GitHub - hashicorp/consul: Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.
1.1.2 能干什么

1.1.3 怎么用

1.1.3.1 官网下载地址
安装网页:Install Consul | Consul | HashiCorp Developer
windows版本:
下载链接:Install | Consul | HashiCorp Developer
windows版本只有一个exe文件,进入对应的文件夹,通过cmd命令,在cmd命令面板中心开发模式运行:consul agent -dev

访问:http://localhost:8500

1.1.4、discovery
1.1.4.1 服务提供者
1.1.4.1.1 引入maven依赖
参考链接:Quick Start :: Spring Cloud Consul
<!--SpringCloud consul discovery -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>1.1.4.1.2 yml 配置
参考链接: Service Discovery with Consul :: Spring Cloud Consul
####Spring Cloud Consul for Service Discovery
spring:
  cloud:
    consul:
      discovery:
        instance-id: custom-service-id
        serviceName: myprefix-${spring.application.name}1.1.4.1.3 修改启动类
@EnableDiscoveryClient
public class Main8001
{
    public static void main(String[] args)
    {
        SpringApplication.run(Main8001.class,args);
    }
}consul 发现结果:

1.1.4.2 服务消费者
1.1.4.2.1 引入maven 依赖
<!--SpringCloud consul discovery -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>1.1.4.2.2 yml 配置
spring:
  application:
    name: cloud-consumer-order
  ####Spring Cloud Consul for Service Discovery
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        prefer-ip-address: true #优先使用服务ip进行注册
        service-name: ${spring.application.name}1.1.4.2.3 修改启动类
@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul为注册中心时注册服务
public class Main80
{
    public static void main(String[] args)
    {
        SpringApplication.run(Main80.class,args);
    }
}1.1.4.2.4 修改服务提供者链接
@RestController
public class OrderController
{
    //硬编码
    //public static final String PaymentSrv_URL = "http://localhost:8001";
    //服务注册中心上的微服务名称
    public static final String PaymentSrv_URL = "http://cloud-payment-service";
}1.1.4.2.5 修改RestTemplateConfig
@Configuration
public class RestTemplateConfig
{
    //添加负载均衡 LoadBalanced    
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate()
    {
        return new RestTemplate();
    }
}结果:

1.2、nacos
1.2.1 是什么

官网:Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网
gitHub 官网:GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
1.2.2 能干什么
Nacos 提供了四大功能:
- 服务发现和服务健康检查
- 动态配置管理
- 动态域名解析服务
- 服务和元数据管理
1.2.3 怎么用
1.2.3.1 官网下载地址
官网安装地址:Nacos 快速开始 | Nacos 官网
windows 启动: 进行对应的bin目录 ,在cmd 下执行 startup.cmd -m standalone

访问:http://localhost:8848/nacos

1.2.4 discovery
1.2.4.1 服务提供者
1.2.4.1.1 改POM
<!--添加 nacos-discovery-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>1.2.4.1.2 改YML
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        service:  ${spring.application.name}1.2.4.1.3 改启动类
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan({"com.hc.cloud.mapper"})
public class Payment {
    public static void main(String[] args) {
        SpringApplication.run(Payment.class, args);
    }
}1.2.4.1.4 改业务类
@RestController
public class PayAlibabaController
{
    @Value("${server.port}")
    private String serverPort;
    @GetMapping(value = "/pay/nacos/{id}")
    public String getPayInfo(@PathVariable("id") Integer id)
    {
        return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
    }
}1.2.4.2 服务消费者
1.2.4.2.1 改POM
<!--nacos-discovery-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--loadbalancer-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>1.2.4.2.2 改YML
service-url:
  nacos-user-service: http://payment1.2.4.2.3 修改启动类
@SpringBootApplication
@EnableDiscoveryClient
public class Main80 {
    public static void main(String[] args) {
        SpringApplication.run(Main80.class, args);
    }
}1.2.4.2.4 修改RestTemplate
@Configuration
public class RestTemplateConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}1.2.4.2.5 修改业务类
@RestController
public class PaymentController {
    @Resource
    private RestTemplate restTemplate;
    @Value("${service-url.nacos-user-service}")
    private String paymentUrl;
    @GetMapping("/consumer/consul/payment/get/all")
    public ResultData<List<PayVo>> getAllPayments() {
        return restTemplate.getForObject(paymentUrl + "/pay/get/all",  ResultData.class);
    }
}1.3、zookeeper
1.3.1 是什么

1.3.2 能干什么
-  
  - 统一命名服务
- 统一配置管理
- 统一集群管理
- 服务器节点动态上下线
- 软负载均衡
 
1.3.3 怎么用
下载页面地址:Apache ZooKeeper
zookeeper Getting Started Guide : ZooKeeper: Because Coordinating Distributed Systems is a Zoo
1.3.3.1 单机版配置
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
#解决 8080绑定异常
#org.apache.zookeeper.server.admin.AdminServer$AdminServerException: Problem starting AdminServer on address 0.0.0.0, port 8080 and command URL /commands
#Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8080
admin.serverPort=88881.3.3.2 集群版配置
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
admin.serverPort=88881.3.4 zookeeper 使用
1.3.4.1 服务器启动
#启动服务器
bin/zkServer.sh start
#客户端连接
bin/zkCli.sh -server 127.0.0.1:21811.3.4.2 改pom
<!-- spring-cloud-zookeeper -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--选择对应zookeeper 服务的版本,这里选择的zookeeper版本为3.9.1-->
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.9.1</version>
</dependency>1.3.4.3 改yaml
#对应的服务上,在common上配置不生效
spring:
  application:
    name: consumer
  cloud:
    zookeeper:
      connect-string: 192.168.10.131:2181
      discovery:
        enabled: true
        root: /services
        register: true
        
service-url:
  zk-user-service: http://payment1.3.4.4 改启动类
//添加 EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class Main80 {
    public static void main(String[] args) {
        SpringApplication.run(Main80.class, args);
    }
}1.3.4.5 改config
@Configuration
public class RestTemplateConfig {
    //添加LoadBalanced
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
1.3.4.6 改业务类
@RestController
public class PaymentController {
    @Resource
    private RestTemplate restTemplate;
    @Value("${service-url.zk-user-service}")
    private String paymentUrl;
    @GetMapping("/consumer/consul/payment/get/all")
    public ResultData<List<PayVo>> getAllPayments() {
        return restTemplate.getForObject(paymentUrl + "/pay/get/all",  ResultData.class);
    }
}启动服务即可看到注册结果

请求正常

1.4、euraka
过时
1.5 注册中心比较
| Nacos | Eureka | Consul | CoreDNS | ZooKeeper | |
| 一致性协议 | CP+AP | AP | CP | - | CP | 
| 健康检查 | TCP/HTTP/MYSQL/Client Beat | Client Beat | TCP/HTTP/gRPC/Cmd | - | Keep Alive | 
| 负载均衡策略 | 权重/metadata/Selector | Ribbon | Fabio | RoundRobin | - | 
| 雪崩保护 | 有 | 有 | 无 | 无 | 无 | 
| 自动注销实例 | 支持 | 支持 | 支持 | 不支持 | 支持 | 
| 访问协议 | HTTP/DNS | HTTP | HTTP/DNS | DNS | TCP | 
| 监听支持 | 支持 | 支持 | 支持 | 不支持 | 支持 | 
| 多数据中心 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 
| 跨注册中心同步 | 支持 | 不支持 | 支持 | 不支持 | 不支持 | 
| Spring Cloud集成 | 支持 | 支持 | 支持 | 不支持 | 支持 | 
| Dubbo集成 | 支持 | 不支持 | 支持 | 不支持 | 支持 | 
| Kubernetes集成 | 支持 | 不支持 | 支持 | 支持 | 不支持 | 
2、配置中心
2.1 作用
统一集中管理,微服务的配置文件
2.2 各配置中心
2.2.1 consul
2.2.1.1 配置pom
<!--SpringCloud consul config-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>2.2.1.2 配置yml

#在resource 下添加bootstrap.yml
# 配置bootstrap.yml
spring:
    ###配置项目名    
  application:      
    name: cloud-payment-service    
    ####Spring Cloud Consul for Service Discovery
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
      config:
        profile-separator: '-' # default value is ",",we update '-'
        format: YAML
#application.yml
server:
  port: 8001
# ==========applicationName + druid-mysql8 driver===================
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
    username: root
    password: 123456
  profiles:
    active: dev # 多环境配置加载内容dev/prod,不写就是默认default配置
# ========================mybatis===================
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.atguigu.cloud.entities
  configuration:
    map-underscore-to-camel-case: true2.2.1.3 consul yaml 配置格式
# consul 配置文件格式
# config/cloud-payment-service/data
#       /cloud-payment-service-dev/data
#       /cloud-payment-service-prod/data
#文件夹时,以/结尾
2.2.2 spring cloud conf
2.2.3 nacos
2.2.3.1 配置POM
<!--bootstrap-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--nacos-config-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>2.2.3.2 配置yml
#bootstrap.yml
# nacos配置
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
        #指定IP地址
        ip: 127.0.0.1
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
#application.yml
server:
  port: 3377
spring:
  profiles:
    active: dev # 表示开发环境
       #active: prod # 表示生产环境
       #active: test # 表示测试环境2.2.3.3 nacos yaml配置格式
# nacos端配置文件DataId的命名规则是:
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 本案例的DataID是:nacos-config-client-dev.yaml

















