环境
- JDK1.8
- docker
- springcloud 版本:Hoxton.SR12
安装consul
- 拉取镜像
- 运行consul 服务
consumer/provider
provider
- pom依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- application.yml
server:
port: 10002
spring:
application:
name: consul-provider
cloud:
consul:
host: localhost
port: 8500
discovery:
health-check-path: /heath #consul 健康检查路径,默认为/actuator/heath 这个需要引入actuator相关的依赖,我这里没有引入这个依赖,所以写了一个接口
- 代码
@SpringBootApplication
@EnableDiscoveryClient
public class ConsulProviderMain {
public static void main(String[] args) {
SpringApplication.run(ConsulProviderMain.class, args);
}
}
@RestController
public class HelloController {
private final static Logger LOGGER = LoggerFactory.getLogger(HelloController.class);
@GetMapping("/hello")
public String hello() {
LOGGER.info("provider start hello ----------------------");
return "hello";
}
@GetMapping("/heath")
public String heath(){
return "ok";
}
}
- 服务启动,看consul控制台
consumer
- pom依赖
<!-- 引入feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- yml文件
server:
port: 10003
spring:
application:
name: consul-consumer
cloud:
consul:
host: localhost
port: 8500
discovery:
health-check-path: /heath
- 代码
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class ConsulConsumerMain {
public static void main(String[] args) {
SpringApplication.run(ConsulConsumerMain.class, args);
}
}
@RestController
public class HelloController {
private final static Logger LOGGER = LoggerFactory.getLogger(HelloController.class);
@Autowired
private HelloFacade helloFacade;
@GetMapping("/hello")
public String hello(){
LOGGER.info("consumer start hello--------------------------------------");
return helloFacade.hello();
}
@GetMapping("/heath")
public String heath(){
return "ok";
}
}
@FeignClient(name = "consul-provider")
public interface HelloFacade {
@GetMapping("/hello")
String hello();
}
- 服务启动
- 服务调用
附录
- 服务健康检查异常
agent: Check is now critical: check=service:consul-provider-10002
没有引入actuator,需要自己写健康检查接口