一、Consul是什么?
Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发。
提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。
它具有很多优点。包括:基于raft协议,比较简洁;支持健康检查,同时支持HTTP和DNS协议.支持跨数据中心的WAN集群提供图形界面跨平台,支持Linux、Mac、Windows。
二、Consul能做什么
consul可以提供以下功能:
服务发现:提供HTTP和DNS两种发现方式。
健康监测:支持多种协议,HTTP、TCP、Docker、Shell脚本定制化。
存储方式:key , Value的存储方式。
多数据中心:Consul支持多数据中心。
权限:可以配置权限控制,根据角色不同,权限不同
提供可视化界面等。
三、安装Consul
https://www.consul.io/downloads.html下载安装包,注意:如果在某个浏览器不能打开,换个浏览器在试试。
下载好之后是一个单独的consul.exe文件,直接双击安装,一直点下一步即可。
安装好之后,查看consul安装信息
注意:要切换到consul.exe同级命令才会生效,否则报不是内部命令。
启动consul,在consul.exe 同级 输入 consul agent -dev。出现以下内容说明启动成功。
在浏览器中输入 http://localhost:8500/ 会出现以下界面。
四、代码整合Consul
服务提供者
1.在pom.xml添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
2.在application.yml添加相应配置
server:
port: 8006 #端口
spring:
application:
#访问名称
name: consul-provider-payment
cloud:
consul:
#服务地址
host: localhost
#服务端口
port: 8500
discovery:
service-name: ${spring.application.name}
3.编写测试服务提供者
@RestController
//@Slf4j //日志
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@RequestMapping(value = "/payment/consul")
public String paymentConsul() {
return "springCloud with consul: " + serverPort + "\t" + UUID.randomUUID().toString();
}
}
服务消费者
1.在pom.xml文件好添加依赖,消费者这个依赖可加可不加。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
2.在application.xml文件添加配置
server:
port: 80
spring:
application:
name: consul-consumer-order
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
3.编写RestTemplate工具类,RestTemplate包含了HttpClient的使用
@Configuration
public class ApplicationContextConfig {
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
4.编写测试方法
@RestController
@RequestMapping("consumer")
public class OrderController {
// consul服务中心的服务名称
public static final String INVOKE_URL = "http://consul-provider-payment";
@Resource
private RestTemplate restTemplate;
@GetMapping(value = "/payment/consul")
public String paymentInfo() {
String result = restTemplate.getForObject(INVOKE_URL + "/payment/consul", String.class);
return result;
}
}
5.浏览器访问http://localhost/consumer/payment/consul 出现以下界面,表示成功。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/77191.html