参考链接:https://www.imooc.com/article/296209/
提供一套分布式服务发现和配置管理系统,是XX公司使用GO语言开发提供了微服务系统中的服务治理,配置中心,控制总线等功能,这些功能中的每一个都可以根据需要单独使用,也可以一起使用构建去全方位的服务网络,总之consul提供了一种完整的服务网络解决方法
服务发现 健康检查 K-V键值对的存储 安全加固 多数据中心
1)官网上下载consul,下载后是一个conul.exe文件 2)打开当前目录的cmd窗口 3)查看版本
consul --version 启动运行 consul agent -dev5)访问http://localhost:8500 成功的页面
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里面的方法是否可以访问:
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: 85004)主启动类上加上@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端口,所以可省略端口