https://www.consul.io/intro/index.html
Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发。
提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网络解决方案。
它具有很多优点。包括:基于raft协议、 比较简洁;支持健康检查,同时支持HTTP和DNS协议,支持跨数据中心的WAN集群,提供图形界面,跨平台,支持Linux、Mac、Windows
1)服务发现:提供HTTP和DNS两种发现方式
2)健康监测:支持多种方式,HTTP、TCP、Docker、Shell脚本定制化
3)KV存储:Key、Value存储方式
4)多数据中心:Consul支持多数据中心
5)可视化Web界面
下载地址:https://www.consul.io/downloads.html
参看使用说明:https://www.springcloud.cc/spring-cloud-consul.html
安装说明:https://learn.hashicorp.com/consul/getting-started/install.html
下载之后,解压,有一个exe的安装文件,如图:
运行方法:使用开发模式启动
在当前目录,打开cmd命令窗口,输入命令 consul --version 查看版本,如图:
启动命令:consul agent -dev
localhost:8500
如图:
1)参考cloud-provider-payment8004新建cloud-providerconsul-payment8006
2)引入pom.xml
参考cloud-provider-payment8004的pom,将zookeeper换成consul即可,如图:
完整的pom.xml
cloud2020
com.bjc.cloud
1.0-SNAPSHOT
4.0.0
cloud-providerconsul-payment8006
org.springframework.cloud
spring-cloud-starter-consul-discovery
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
com.bjc.cloud
cloud-api-commons
${project.version}
3)yml配置文件
# 8006 表示注册到consul服务器的支付服务提供者端口号
server:
port: 8006
# 服务别名 注册zookeeper到注册中心名称
spring:
application:
name:
cloud-providerconsul-payment
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
4)启动类
package com.bjc.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8006 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8006.class,args);
}
}
5)业务Controller
package com.bjc.cloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;
@RestController
public class Paymentcontroller {
@Value("${server.port}")
private String serverport;
@GetMapping("/payment/consul")
public String paymentconsul(){
return "spring cloud width consul: " + serverport + "\t" + UUID.randomUUID().toString();
}
}
启动8006微服务
查看consul控制台,可以成功的看到我们的服务,如图;
说明我们的服务成功的注册进了consul中
然后,我们访问一下controller,如图;
1)参考cloud-consumerzk-order80新建Module,cloud-consumerconsul-order80
2)修改pom.xml
cloud2020
com.bjc.cloud
1.0-SNAPSHOT
4.0.0
cloud-consumerconsul-order80
org.springframework.cloud
spring-cloud-starter-consul-discovery
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
com.bjc.cloud
cloud-api-commons
${project.version}
3)修改yml配置文件
server:
port: 80
spring:
application:
name: cloud-consumerconsul-order
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
4)配置类
package com.bjc.cloud.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ConfigBean {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
5)启动类
package com.bjc.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerConsulMain80 {
public static void main(String[] args) {
SpringApplication.run(ConsumerConsulMain80.class,args);
}
}
6)controller
package com.bjc.cloud.controller;
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 OrderController {
private static final String INVOKE_URL = "http://cloud-providerconsul-payment";
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/consul/paymentinfo")
public String paymentInfo(){
return restTemplate.getForObject(INVOKE_URL + "/payment/consul",String.class);
}
}
运行cloud-consumerconsul-order80,查看控制台,如图:
调用cloud-consumerconsul-order80的controller,如图: