Consul服务注册与发现
- Consul简介
- 安装并运行Consul
- 服务提供者
- 服务消费者
- 三个注册中心异同点
Consul简介
功能:
- 服务发现
- 健康检测
- KV存储
- 多数据中心
- 可视化Web界面
安装并运行Consul
- 官网下载并解压
- 使用开发者模式启动,cmd窗口进入软件路径运行 consul agent-dev
- 访问Consul的首页:http://localhost:8500
服务提供者
-
新建Module支付服务 provider8006
-
改pom
新添consul依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> <version>2.2.1.RELEASE</version> </dependency>
-
写配置
server.port=8006 spring.application.name=consul-provider-payment #consul注册中心地址 spring.cloud.consul.host=localhost spring.cloud.consul.port=8500 #hostname:127.0.0.1 spring.cloud.consul.discovery.service-name=${spring.application.name}
-
主启动类
主启动类上添加 @EnableDiscoveryClient 注解
-
业务类controller
@RestController public class PaymentConsulController { @Value("${server.port}") private String serverPort; @RequestMapping("/payment/consul") public String paymentConsul(){ return "spring cloud with consul:"+serverPort+"\t"+ UUID.randomUUID().toString(); } }
-
验证测试
启动主启动类,查看consul后台界面,显示服务提供者注册进consul:
服务消费者
-
新建module,消费服务order80 cloud-consumerConsul-order80
-
改pom
-
写配置
-
主启动类
-
配置Bean
新建配置类:
@Configuration public class ApplicationContextConfig { @Bean @LoadBalanced //赋予了RestTemplate负载均衡的能力 public RestTemplate restTemplate(){ return new RestTemplate(); } }
-
Controller
@RestController public class OrderConsulController { public static final String INVOKE_URL = "http://consul-provider-payment"; @Autowired private RestTemplate restTemplate; @RequestMapping("/consumer/consul/") public String paymentInfo(){ return restTemplate.getForObject(INVOKE_URL+"/payment/consul",String.class); } }
-
测试
查看consul后台界面:
三个注册中心异同点
CAP
- C:Consisitency(强一致性)
- A:Availability(可用性)
- P:Partition tolerance(分区容错性)
- CAP理论关注粒度是数据,而不是整体系统设计的策略
AP(Eureka)
CP(Zookeeper,Consul)