Consul 集成 Spring Cloud 流程
1、添加依赖:com.gexin.microservicead-ms-spring-cloud-base2.0.0.02、将 application.properties 文件重命名为 bootstrap.properties,配置如下,修改server.port 和 spring.application.name 即可。
日志文件路径
logging.config=./config/logback.xml
服务的端口号
server.port=8082
应用的名称
spring.application.name=ad-ms-spring-cloud-consul-config-demo
开启 Consul config
spring.cloud.consul.config.enabled=true
Consul 的 host 地址
spring.cloud.consul.host=192.168.10.142
Consul 的端口号
spring.cloud.consul.port=8500
Consul 配置的格式
spring.cloud.consul.config.format=KEY_VALUE
Consul config 的前缀名
spring.cloud.consul.config.prefix=config
开启服务发现
spring.cloud.consul.discovery.enabled=true
开启服务注册
spring.cloud.consul.discovery.register=true
健康检查路径
spring.cloud.consul.discovery.health-check-path=/health
健康检查的时间间隔
spring.cloud.consul.discovery.health-check-interval=10s
服务实例的唯一ID,此 ID 必须唯一,因此在后面加一个数字来区分
spring.cloud.consul.discovery.instance-id=${spring.application.name}-1
关闭安全校验
management.security.enabled=false
关闭敏感检查
endpoints.health.sensitive=false
3、在启动类上添加注解:@EnableDiscoveryClient和@EnableConfigurationProperties({ConsulConfig.class})(ConsulConfig.class 为配置类的名称);继承GexinWebSpringBootStarterApplication,实现里面swagger 配置的抽象方法。
4、在Consul 的web-ui中配置属性。在consul kv新建 config/ad-ms-spring-cloud-consul-config-demo/ ,ad-ms-spring-cloud-consul-config-demo 是spring.application.name的取值,config 是spring.cloud.consul.config.prefix的取值。配置可以参照:参考配置
6、编写 Consul 配置属性的类,注意:属性的名字必须与 Consul 配置中的 key 名字相同。在配置属性类上加上@ConfigurationProperties注解。配置类样例:
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties
public class ConsulConfig {
private String name;
private int age;
private boolean logSwitch;
private String jsonStr;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isLogSwitch() {
return logSwitch;
}
public void setLogSwitch(boolean logSwitch) {
this.logSwitch = logSwitch;
}
public String getJsonStr() {
return jsonStr;
}
public void setJsonStr(String jsonStr) {
this.jsonStr = jsonStr;
}
@Override
public String toString() {
return "ConsulConfig{" +
"name='" + name + '\'' +
", age=" + age +
", logSwitch=" + logSwitch +
", jsonStr='" + jsonStr + '\'' +
'}';
}
}
7、服务调用。在服务调用的地方注入RestTemplate,调用别人服务时直接使用RestTemplate提供的 get、post 等方法。样例如下:
@RestController
public class ConsulController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private ConsulConfig consulConfig;
// @Value 方式取值不支持热加载
@Value("${name}")
private String name;
// @Value 方式取值不支持热加载
@Value("${age}")
private String age;
// 读取自己的服务配置,同时提供给别人调用
@RequestMapping(value = "/consulInfo")
public String getConsulInfo() {
return consulConfig.toString();
}
// 调用别人的服务获取配置
@RequestMapping(value = "/remote/consulInfo")
public String getRemoteConsulInfo() {
// ad-ms-spring-cloud-consul-discover-config-demo 为服务名称(默认为spring.application.name的值)
// /local/consulInfo 为我们接口定义的路径
String reqURL = "http://ad-ms-spring-cloud-consul-discover-config-demo/local/consulInfo";
return restTemplate.getForEntity(reqURL, String.class).getBody();
}
@RequestMapping(value = "/name")
public String getName() {
return name;
}
@RequestMapping(value = "/age")
public String getAge() {
return age;
}
}
8、日志输出。logback.xml 文件引入下面语句后,在代码中直接调用LogUtils类的方法,与原来的 rp-base 日志使用是一样的。9、其它详细信息可以参考代码:ad-ms-spring-cloud-consul-discover-config-demo 和 ad-ms-spring-cloud-consul-config-demo