学习记录–Consul
参考链接:https://www.imooc.com/article/296209/
1.什么是consulconsul
提供一套分布式服务发现和配置管理系统,是XX公司使用GO语言开发提供了微服务系统中的服务治理,配置中心,控制总线等功能,这些功能中的每一个都可以根据需要单独使用,也可以一起使用构建去全方位的服务网络,总之consul提供了一种完整的服务网络解决方法
2 consul可以干什么?
服务发现
健康检查
K-V键值对的存储
安全加固
多数据中心
3 consul的安装与运行
1)官网上下载consul,下载后是一个conul.exe文件
2)打开当前目录的cmd窗口
3)查看版本
consul --version
- 启动运行
consul agent -dev
5)访问http://localhost:8500
成功的页面
服务提供者注册到consul
1)建一个springBoot项目
2)导入依赖
3)配置yml
server:
port: 8006
spring:
application:
name: consul-provider-payment
#consule注册中心地址
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
4)主启动类上加上@EnableDiscoveryClient注解
5)在controller层写一个测试方法
package com.zpark.consul.controller;
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@RequestMapping("/payment/consul")
public String paymentConsul(){
return "springCloud with consul:"+serverPort+"\t"+ UUID.randomUUID().toString();
}
}
6)启动程序
访问http://localhost:8500
就可以看到刚刚的服务注册到consul
成功的图:
7)测试controller里面的方法是否可以访问:
服务消费者注册到consul
1)建一个springBoot项目cloud-consul-consumer-order
2)导入依赖
3)配置yml
server:
port: 80
spring:
application:
name: cloud-consumer-order
#consul注册中心地址
cloud:
consul:
discovery:
service-name: ${spring.application.name}
host: localhost
port: 8500
4)主启动类上加上@EnableDiscoveryClient注解
5)配置RestTemplate建一个配置类ApplicationContextConfig
package com.zpark.consul.config;
Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
6)controller层写方法调用其他的服务(上面的那个服务)
package com.zpark.consul.controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RestController
public class OrderConsulController {
public static final String INCOKE_URL="http://consul-provider-payment";
// public static final String INCOKE_URL="http://localhost:8006";
//http://localhost:8006/payment/consul
@Resource
private RestTemplate restTemplate;
@GetMapping("consumer/payment/consul")
public String paymentInfo(){
String result=restTemplate.getForObject(INCOKE_URL+"/payment/consul",String.class);
System.out.println(result);
if(StringUtils.isEmpty(result)){
return "hello";
}
return result;
}
}
不理解的点是请求的地址,通过服务名称就可以知道它的ip,port了吗?
7)启动程序进行测试访问:
http://localhost/consumer/payment/consul
因为是80端口,所以可省略端口