随着新版本的eureka不再開源,阿裡巴巴的nacos還沒有太成熟,相信很多的springcloud新使用者在注冊中心選型時Consul的機會又多了一些,本人公司就是使用的Consul作為的注冊中心。
Consul服務端搭建本文不做介紹。先上一張Consul自帶界面截圖。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxib1IjY5VzVa9GcYlFcwdVYxA3MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwMTM4QzN0IjM5ATMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
上述product,是注冊中心的一個服,右邊是服務的執行個體資訊,我們将通過服務調用product服務的Api.
項目搭建
版本:
springcloud:Finchley.RELEASE
springboot:2.0.3.RELEASE
pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${springboot.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${springboot.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<springboot.version>2.0.3.RELEASE</springboot.version>
</properties>
application.properties
//開啟服務發現
spring.cloud.consul.discovery.enabled=true
//注冊中心資訊
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
//不向注冊中心注冊自己
spring.cloud.service-registry.auto-registration.enabled=false
啟動器配置
@EnableDiscoveryClient
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
配置RestTemplate
@Configuration
public class Config {
@LoadBalanced
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
測試用例編寫并運作
@SpringBootTest(classes = Application.class)
@RunWith(SpringRunner.class)
public class TestDemo {
@Autowired
private RestTemplate restTemplate;
@Test
public void test1(){
String forObject = restTemplate.getForObject("http://product/metrics", String.class);
System.out.println("=============="+forObject);
}
}
輸出
由于product服務整合了監控系統prometheus,是以輸出的不是Json格式