注意下面这个依赖里有个监控中心,必须导上这个包,不然调用不了服务,consul与别的注册中心不同,需要检验个健康值,所以需要导这个包,其余的地方就没什么差别了.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.buba</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot整合consul客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--监控中心-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<!--Finchley.RELEASE 加上这个东西,别使用默认的 或者使用Finchley.M7这个兼容springcloud2.0版本但是我使用不好使-->
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<!--加上这个false就不从上面这个链接里下载jar包-->
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
server.port=8001
###服务别名----服务注册到注册中心名称
spring.application.name=consul-member
#consul地址
spring.cloud.consul.host=localhost
#consul端口
spring.cloud.consul.port=8500
提供服务方
调用服务方
package com.buba.api.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@RestController
public class OrderController {
//这个是由springboot的web组件提供的
//rest底层是使用的httpclient实现的
@Autowired
private RestTemplate restTemplate;
//这个对象可以获取出来服务的一些信息
@Autowired
private DiscoveryClient discoveryClient;
/*
在springcloud中有两种方法调用rest(httpclient),fegin(springcloud提供)
*/
@RequestMapping("getOrder")
public String getOrder(){
List<ServiceInstance> instances = discoveryClient.getInstances("consul-member");
String a = null;
for(ServiceInstance s:instances){
a = s.getUri().toString();
}
//一种直接写访问路径,另一种是写服务名称
//使用名称形式的话需要在RestTemplate上加@LoadBalanced开启ribbon负载均衡器
//String forObject = restTemplate.getForObject("http://consul-member/getMember", String.class);
//String forObject = restTemplate.getForObject("http://192.168.244.1:8000/getMember", String.class); 一般不直接写地址
String forObject = restTemplate.getForObject("http://consul-member/getMember", String.class);
return forObject;
}
}
把这两个服务启动后
点进来只有这的健康状态为200才能正常调用
就调用成功了