1、Zookeeper服务注册与发现
1.1、注册中心Zookeeper
1.2、服务提供者
1.3、服务消费者
2、Consul服务注册与发现
2.1、简介
2.2、主要特点
2.3、在docker上安装启动consul
3、服务提供者
4、服务消费者
5、三者的异同点
关闭linux的防火墙:
systemctl stop firewalld
systemctl status firewalld
使用docker启动Zookeeper:(docker的操作可以看这篇:Docker基础入门学习笔记)
#拉取Zookeeper镜像
docker pull zookeeper
#启动Zookeeper
docker run --name zk01 -p 2181:2181 --restart always -d zookeeper
服务节点是临时节点还是持久节点?
zookeeper也是有心跳机制,在一定时间能如果一直没心跳返回,Zookeeper就会把服务节点剔除掉。所以在Zookeeper上的服务节点是临时节点。
为了区分,中间空个8003。
<!--因为接下来不会用到数据库,所以不导入数据库相关的依赖(防止没配置而报错)-->
<!--替换掉eureka依赖,其他直接复制8001-->
<!--SpringBoot整合Zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!-- <exclusions>-->
<!--先排除自带的zookeeper3.5.3-->
<!-- <exclusion>-->
<!-- <groupId>org.apache.zookeeper</groupId>-->
<!-- <artifactId>zookeeper</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
</dependency>
<!--添加zookeeper3.4.9版本(引入对应版本的依赖)-->
<!-- <dependency>-->
<!-- <groupId>org.apache.zookeeper</groupId>-->
<!-- <artifactId>zookeeper</artifactId>-->
<!-- <version>3.4.9</version>-->
<!-- </dependency>-->
#端口号
server:
port: 8004
spring:
application:
#服务别名——注册到zookeeper注册中心的名称
name: cloud-provider-payment
cloud:
zookeeper:
connect-string: 10.211.55.17:2181 #linux的ip加暴露的端口号
@EnableDiscoveryClient //该注解用于向使用consul或者Zookeeper作为注册中心时注册服务
@SpringBootApplication
public class PaymentMain8004 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8004.class, args);
}
}
@Slf4j
@RestController
public class PaymentController {
@Value("${server.port}") //获取端口号
private String serverPort;
@RequestMapping("/payment/zk")
public String paymentzk(){
return "springcloud with zookeeper:" + serverPort + "\t" + UUID.randomUUID().toString();
}
}
#查看正在运行的容器(查看Zookeeper容器的id)
docker ps
#进入zookeeper容器
docker exec -it 容器ID /bin/bash
#退出容器(或者按快捷键ctrl+P+Q退出)
exit
#启动容器
docker start 容器ID
#关闭容器
docker stop 容器ID
http://localhost:8004/payment/zk
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced //负载均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
@RestController
@Slf4j
public class OrderZKController {
public static final String INVOKE_URL = "http://cloud-provider-payment";
@Resource
private RestTemplate restTemplate;
@RequestMapping("/consumer/payment/zk")
public String paymentInfo(){
String result = restTemplate.getForObject(INVOKE_URL + "/payment/zk", String.class);
return result;
}
}
http://localhost/consumer/payment/zk
Consul官网:https://www.consul.io/
Consul中文文档:https://www.springcloud.cc/spring-cloud-consul.html
Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格。Consul需要一个数据平面,并支持代理和本机集成模型。Consul附带了一个简单的内置代理,因此一切都可以直接使用,还支持Envoy等第三方代理集成。
Consul旨在对DevOps社区和应用程序开发人员友好,使其非常适合现代,灵活的基础架构。
#拉取consul镜像
docker pull consul
#启动consul
docker run -d -p 8500:8500/tcp --name myConsul consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0
然后在浏览器输入http://http://10.211.55.17/:8500
(linux的IP地址加上冒号8500)
<!--SpringCloud consul-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
server:
port: 8006
spring:
application:
name: consul-provider-payment
cloud:
consul:
host: 10.211.55.17 #用linux的ip地址(consul在本机就填localhost)
port: 8500
discovery:
service-name: ${spring.application.name}
主启动类(与8004相同)
controller
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}") //获取端口号
private String serverPort;
@RequestMapping("/payment/consul")
public String paymentConsul(){
return "springcloud with zookeeper:" + serverPort + "\t" + UUID.randomUUID().toString();
}
}
6.启动项目
http://localhost:8006/payment/consul
@RestController
@Slf4j
public class OrderConsulController {
public static final String INVOKE_URL = "http://consul-provider-payment";
@Resource
private RestTemplate restTemplate;
@RequestMapping("/consumer/payment/consul")
public String paymentInfo(){
String result = restTemplate.getForObject(INVOKE_URL + "/payment/consul", String.class);
return result;
}
}
http://localhost/consumer/payment/consul
CAP:(只能二选一)
A:可用性
C:一致性
P:分区容错性(微服务架构必须保证有P)
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/mingyuli/article/details/122027459
内容来源于网络,如有侵权,请联系作者删除!