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 {

  1. private String name;
  2. private int age;
  3. private boolean logSwitch;
  4. private String jsonStr;
  5. public String getName() {
  6. return name;
  7. }
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. public int getAge() {
  12. return age;
  13. }
  14. public void setAge(int age) {
  15. this.age = age;
  16. }
  17. public boolean isLogSwitch() {
  18. return logSwitch;
  19. }
  20. public void setLogSwitch(boolean logSwitch) {
  21. this.logSwitch = logSwitch;
  22. }
  23. public String getJsonStr() {
  24. return jsonStr;
  25. }
  26. public void setJsonStr(String jsonStr) {
  27. this.jsonStr = jsonStr;
  28. }
  29. @Override
  30. public String toString() {
  31. return "ConsulConfig{" +
  32. "name='" + name + '\'' +
  33. ", age=" + age +
  34. ", logSwitch=" + logSwitch +
  35. ", jsonStr='" + jsonStr + '\'' +
  36. '}';
  37. }

}
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