cloud注册中心
SpringCloud的服务注册中心有Eureka、Zookeeper、Consul和Nacos
Eureka(AP)在SpringBoot1.x中比较合适,但是现在是SpringBoot2.x,而且Eureka已经停止更新了,就是不建议在使用了
Zookeeper(CP)是dubbo的注册中心,曾经的Eureka都凉了,万一我用别的注册中心又凉了怎么办,不如用zookeeper
Consul(CP)是Go语言开发的,而Java开发者可能会对不同的语言有偏见。
Nacos是比较推荐的服务注册中心。
Consul的(window)安装
下载完解压后是一个consul.exe
查看consul的版本(不用配置环境变量)
consul --version
启动consul
consul agent -dev
在浏览器输入
http://localhost:8500/
代码版本
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> <version>2.2.1.RELEASE</version> </dependency>
注册服务提供者(在SpringBoot web基础上)
添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> <version>2.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
修改application.yml文件
server: port: 8001 # 服务别名--consul注册中心名称 spring: application: name: provider-8001 cloud: consul: host: localhost port: 8500 discovery: service-name: ${spring.application.name}
修改主启动类
@EnableDiscoveryClient
编写controller
@RestController public class HelloController { @Value("${server.port}") private String serverPort; @RequestMapping("/provider/consul") public String paymentConsul() { return "springCloud with consul: " + serverPort + "\t" + UUID.randomUUID().toString(); } }
启动并且自测
注册服务消费者(在SpringBoot web基础上)
添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> <version>2.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
修改application.yml文件
server: port: 80 # 服务别名---consul注册中心名称 spring: application: name: consumer-80 cloud: consul: host: localhost port: 8500 discovery: service-name: ${spring.application.name}
修改主启动类
@EnableDiscoveryClient
添加RestTemplate配置类
@Configuration public class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
编写controller
@RestController public class HelloController { //调用服务的名称provider-8001 private static final String INVOKE_URL = "http://provider-8001"; @Autowired private RestTemplate restTemplate; @GetMapping(value = "/consumer/consul") public String paymentInfo(){ String result = restTemplate.getForObject(INVOKE_URL + "/provider/consul", String.class); return result; } }
启动自测
遇到的坑
如下图所示,正常情况是绿色对勾是2,这样访问会报 No instances available for provider
解决办法
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>