【SpringCloud】09 Consul 与注册中心的总结
下载地址:Consul 1.8.3 https://www.consul.io/downloads
解压后放在目录中双击,然后在目录中开启CMD
输入 consul --version 查看版本信息:

输入 consul agent -dev 开启代理

访问本机地址:
http://localhost:8500/ui/dc1/services

发现拿Git-Bash一直找不到命令,才反应过来我是拿XShell来访问的
提供者注册Consul
1、新建提供者模块,模块名称:Provider-Payment-Consul-8006
2、导入Consul的依赖坐标:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <dependency> <groupId>cn.dzz.springcloud</groupId> <artifactId>API-Commons</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
3、编写Application.yml
server:
  port: 8006
spring:
  application:
    name: provider-payment-service
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
        hostname: 127.0.0.1
主启动编写:
package cn.dzz.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * @author DaiZhiZhou * @file SpringCloud-ATGG-2020 * @create 2020-08-26 18:53 */ @SpringBootApplication @EnableDiscoveryClient public class ProviderPaymentConsulServicePort8006 { public static void main(String[] args) { SpringApplication.run(ProviderPaymentConsulServicePort8006.class, args); } }
配置略微调整一下:
package cn.dzz.springcloud.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.UUID; /** * @author DaiZhiZhou * @file SpringCloud-ATGG-2020 * @create 2020-08-26 10:11 */ @RestController @Slf4j @RequestMapping("payment") public class ConsulPaymentController { @Value("${server.port}") private String serverPort; @RequestMapping("consul") public String paymentConsul(){ return "SpringCloud with Consul : " + serverPort + "\t" + UUID.randomUUID().toString(); } }
启动服务,访问接口:服务正常执行
http://localhost:8006/payment/consul SpringCloud with Consul : 8006 6dc654f4-fc2f-4744-b181-865539f143fd
查看8500Consul服务中心界面:
http://localhost:8500/ui/dc1/services

消费者服务注册Consul
1、新建消费者服务模块,模块名称:Consumer-Order-Consul-Port-80
2、更改POM:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <dependency> <groupId>cn.dzz.springcloud</groupId> <artifactId>API-Commons</artifactId> <version>${project.version}</version> <!--<version>1.0-SNAPSHOT</version>--> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
3、编写Application.yml
server:
  port: 80
spring:
  application:
    name: consul-consumer-order-service
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
4、编写启动类:
package cn.dzz.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * @author DaiZhiZhou * @file SpringCloud-ATGG-2020 * @create 2020-08-26 19:18 */ @SpringBootApplication @EnableDiscoveryClient public class ConsumerOrderConsulPort80Application { public static void main(String[] args) { SpringApplication.run(ConsumerOrderConsulPort80Application.class, args); } }
拷贝ZK过来的资源就行了
注意Controller更改一下:
package cn.dzz.springcloud.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; /** * @author ArkD42 * @file SpringCloud-ATGG-2020 * @create 2020年08月24日 22:47 */ @Slf4j @RestController @RequestMapping("consul/order") public class ConsulOrderController { @Resource private RestTemplate restTemplate; public static final String PAYMENT_URL = "http://consul-provider-payment-service"; @RequestMapping("consumer/payment") // consul/order/consumer/payment public String zookeeperPaymentInfo(){ return restTemplate.getForObject(PAYMENT_URL + "/payment/consul", String.class); } }
接口测试与服务中心结果:

视频讲到这里就介绍完了3种服务注册中心,如何将我们的服务注册到这些中心进行基本的管理
Eureka & Zookeeper & Consul
CAP概念:
Consistency 一致性
Availability 可用性
Partition tolerance 分区可容错性
CA 一致性 + 可用性 = RDBMS
CP 一致性 + 分区可容错性 = MongoDB、HBase、Redis
AP 可用性 + 分区可容错性 = CouchDB、Cassandra、DynamoDB
即这些特性,数据库不可能同时三者特性都能胜任
我们服务注册中心对应的CAP特性
CP:【Zookeeper / Consul】
AP: 【Eureka】
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号