一 consul的使用背景
随着netflix项目进入维护模式,与之相关的技术都受到不同程度的影响,影响较大的应该是eureka,Hystrix了,因此我们不得不寻找与之相关的替代品,对于eureka的替代我们可以选择consul,nacos等等,本次给大家分享的是consul作为服务发现和注册中心的使用心得
二 consul的下载、安装和启动
下载地址: https://www.consul.io/downloads
默认下载也会根据当前电脑的操作系统提供下载,也可以按需下载对于的版本,直接下载可能很慢推荐使用迅雷等下载工具
下载之后解压即可使用了,本次分享只是consul的简单使用,至于集群或者其他操作可网上自行找资料学习,不作过多介绍
启动命令:consul agent -dev -client=0.0.0.0
此命令windows和linux都是通用的,启动后web控制台默认端口为8500,如下所示:
界面看起来比较简单,虽然不大好看但也还算凑合
三 springcloud项目的依赖和相关配置
<!-- counsul相关依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
有的intellij可能会有提示需要注意actuator需要带starter的那个,否则服务健康检查无法通过,服务调用也会出问题
把下面配置粘贴到项目的配置文件就可以了
cloud:
consul:
host: 127.0.0.1
port: 8500
discovery:
#是否需要注册
register: true
#注册的实例ID
instance-id: ${spring.application.name}-1
#服务的名称
service-name: ${spring.application.name}
#服务的请求端口
port: ${server.port}
#开启ip地址注册
prefer-ip-address: true
#当前服务的请求IP
ip-address: ${spring.cloud.client.ip-address}
配置的话不算复杂就是看着有点多
四 服务调用相关代码
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/getMemberInfo")
public TMember getMemberInfo(@RequestParam("memberId") Integer memberId){
TMember memInfo=restTemplate.getForObject("http://shop-member/member/getById?id="+memberId,TMember.class);
return memInfo;
}
这里的RestTemplate因为使用了Ribbon相关注解,所以只需用服务名加上url就可以直接访问到其他服务了
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
member服务的controller代码如下:
@GetMapping("/getById")
@ResponseBody
public TMember getById(@RequestParam("id") Integer id){
return tMemberService.getById(id);
}
启动微服务访问相关url即可看到效果:
至此就完成了consul替代eureka实现了服务注册和发现以及服务的调用,下次将找时间和大家分享nacos作为服务发现和注册中心,以及作为配置中心的用法