SpringCloud整合consul实现服务注册中心
consul简介
consul是一套开源的分布式服务发现和配置管理系统由GO语言编写。
consul的主要功能有:服务发现、运行状况检查、KV 存储、安全服务通信、多数据中心等功能。每个功能都可以根据需要单独使用,也可以一起使用以构建完整的服务网格。本次介绍服务发现功能
consul环境准备
- 参考官网下载并安装
https://learn.hashicorp.com/tutorials/consul/get-started-install
,官网已经讲的很详细了,我的consul安装在了阿里云服务器上 - 启动consul
IP地址一定要是私有IP否则会报错 consul agent -dev -ui -node=consul-dev -client=IP地址
- 访问:
http://139.196.195.43:8500/
搭建服务提供者
-
创建Module:
consul-client8014
-
更改POM文件
<!--consul-discovery依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </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.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.5.2</version> </dependency>
-
添加application.yml
server: port: 8014 #端口号 spring: application: name: consul-service8014 #服务名称 cloud: consul: host: 139.196.195.43 #consul安装所在机器的外网IP port: 8500 #consul默认端口号
-
添加主启动类
@SpringBootApplication @EnableDiscoveryClient public class ConsulClientMain8014 { public static void main(String[] args) { SpringApplication.run(ConsulClientMain8014.class,args); } }
-
编写业务类
@RestController @Slf4j public class TestController { @Value("${server.port}") private String port; @GetMapping(value = "/eat") public String eat(){ return "吃饭喽!服务端口号是"+port+"-"+ IdUtil.simpleUUID(); } }
-
启动项目访问consul:
http://139.196.195.43:8500/
这里报错是因为spring. cloud. consul默认心跳检查没有打开server: port: 8014 #端口号 spring: application: name: consul-service8014 #服务名称 cloud: consul: host: 139.196.195.43 #consul安装所在机器的外网IP port: 8500 #consul默认端口号 discovery: heartbeat: enabled: true #打开心跳检查
-
再次启动查看服务已经成功注册进来,并且红叉也消失了
搭建服务消费者
-
新建Module:
consul-client80
-
更改POM文件
<!--consul-discovery依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </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.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
-
添加application.yml
server: port: 80 #端口号 spring: application: name: consul-consumption80 #服务名称 cloud: consul: host: 139.196.195.43 #consul安装所在机器的外网IP port: 8500 #consul默认端口号 discovery: heartbeat: enabled: true #打开心跳检查
-
添加主启动类
@SpringBootApplication @EnableDiscoveryClient public class ConsulClientMain80 { public static void main(String[] args) { SpringApplication.run(ConsulClientMain80.class,args); } }
-
注入RestTemplate实现远程调用
@Configuration public class BeanConfig { @Bean @LoadBalanced //开启负载均衡的功能 public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
-
编写业务类
@RestController @Slf4j public class TestController { /** * CONSUL_SERVICE8014:就是consul-service8014对外提供的服务名称 */ private static final String CONSUL_SERVICE8014 = "http://consul-service8014"; @Resource private RestTemplate restTemplate; @GetMapping(value = "/eat") public String eat(){ return restTemplate.getForObject(CONSUL_SERVICE8014+"/eat",String.class); } }
-
启动80服务访问:
http://127.0.0.1/eat
-
至此consul单机版实现服务注册中心已完成(后续如果有时间会出集群版的教程)