【server】3、注册中心与配置中心

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://payment
1.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=8888
1.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=8888

1.3.4 zookeeper 使用

1.3.4.1 服务器启动
#启动服务器
bin/zkServer.sh start
#客户端连接
bin/zkCli.sh -server 127.0.0.1:2181
1.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://payment
1.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: true
2.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

2.2.4 apollo

  • 22
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lxtx-0510

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

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

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

打赏作者

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

抵扣说明:

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

余额充值