SpringCloud整合Consul作为注册中心
SpringBoot版本:2.0.3 SpringCloud版本:Finchley.SR2
官网下载consul
自行百度!
1、解压完后可看到只有一个consul.exe执行程序
2、在存放consul的盘符地址那里输入cmd回车
3、之后会进入本路径下命令窗口,输入consul.exe agent -dev启动consul
-dev:启动为开发环境
4、在浏览器输入localhost:8500/进入consul管理界面
至此consul服务器启动成功! 我们开始代码编写~
1、创建父项目(POM)
引入所需依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
2、创建服务提供者Provider_6001
编辑bootstrap.yml文件
server:
port: 6001
spring:
application:
name: consul-provider #指定服务名称
cloud:
host: localhost #consul地址
port: 8500 #端口号,默认为8500
discovery:
serviceName: provider-6001 #指定服务实例名称
创建启动类
@SpringBootApplication
@EnableDiscoveryClient //Consul注册注解
public class Provider_6001 {
public static void main(String[] args) {
SpringApplication.run(Provider_6001.class, args);
}
}
新建controller
@RestController
public class PortController {
@RequestMapping("/getPort")
public String port() {
return "我是:provider-6001";
}
}
运行Provider_6001,启动成功后刷新consul界面
可以看到我们刚刚的提供者已经成功注册
3、创建服务消费者Consumer_7000
引入feign和ribbon依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
编辑bootstrap.yml文件
server:
port: 7000
spring:
application:
name: consul-consumer
cloud:
host: localhost
port: 8500
discovery:
serviceName: consumer-7000
创建启动类
@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class Consumer_7000 {
public static void main(String[] args) {
SpringApplication.run(Consumer_7000.class, args);
}
}
编写FeignService接口
@FeignClient("consul-provider")
public interface FeignService {
@RequestMapping("/getPort")
public String getPort();
}
编写controller
@RestController
public class PortController {
@Autowired
private FeignService feignService;
@RequestMapping("/getPort")
public String port() {
return feignService.getPort();
}
}
启动消费者服务
现在消费者和提供者都注册成功
浏览器调用消费者接口
输入localhost:7000/getPort后可以看到服务器返回数据成功,至此consul作为注册中心完成!
创建第二个提供者Provider_6000搭建集群
不再罗列具体代码,只需要复制provider_6001项目在把配置文件中的端口改为6000,controller里的6001换为6000即可!
启动provider_6000
可以看到consul-provider服务名称的Health Checks的值为4,点击consul-provider服务进入详细查看
可以看到我们刚刚启动的两个提供者服务都已经成功注册,至此集群搭建成功!
之后打开浏览器多次访问localhost:7000/getPort,会发现返回的数据中端口在变,这就实现了轮询效果!
总结
1、同一个服务集群spring-application-name名字必须一致,serviceName必须不一致!!!
2、上述实现只是一个简单实现,还有很多consul配置如指定实例id,时间等等信息童鞋们都可以去 官方文档查看,这里就不举例了~~
3、童鞋们学会后可以试着搭建consul注册中心的高可用集群
4、consul除作为注册中心外还可以当作配置中心使用,consul界面中导航栏有一个Key/Value
这个功能就是配置中心要使用的,下次讲解consul作为配置中心哦~ 谢谢关注!!!