1:新建一個項目:
使用多模塊,
一直下一步即可,
porm.xml 添加依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
springboot版本我使用的是2.0.5,不知為何使用2.1.6.無效
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
2:啟動類添加了 @EnableDiscoveryClient 注解表示支持服務發現
@SpringBootApplication @EnableDiscoveryClient public class ConsulDemo2Application { public static void main(String[] args) { SpringApplication.run(ConsulDemo2Application.class, args); } }
3:配置文件application.properties(Consul 的地址和端口號默認是 localhost:8500 ,如果不是這個地址可以自行配置。 spring.cloud.consul.discovery.serviceName 是指注冊到 Consul 的服務名稱,后期客戶端會根據這個名稱來進行服務調用。)
spring.application.name=spring-cloud-consul-producer server.port=8501 spring.cloud.consul.host=localhost spring.cloud.consul.port=8500 #注冊到consul的服務名稱 spring.cloud.consul.discovery.serviceName=service-producer
4:新建一個 HelloController,提供 hello 的服務
@RestController public class HelloController { @RequestMapping("/hello") public String hello(){ return "hello,consul"; } }
為了模擬注冊均衡負載新建一份模塊命名為 producer2 ,項目內容和第一份一樣,修改對應的端口為 8507,修改 hello 方法的返回值為:”hello consul 2”,修改完成后依次啟動兩個項目。
Consul 消費端:consul-consumer
創建一個 consul-consumer模塊,pom 文件和上面示例保持一致。
配置文件(客戶端可以設置注冊到 Consul 中,也可以不注冊到 Consul 注冊中心中,根據我們的業務來選擇,只需要在使用服務時通過 Consul 對外提供的接口獲取服務信息即可。)
application.properties
spring.application.name=spring-cloud-consul-consumer server.port=8503 spring.cloud.consul.host=127.0.0.1 spring.cloud.consul.port=8500 #設置不需要注冊到 consul 中 spring.cloud.consul.discovery.register=false
啟動類不需要@EnableDiscoveryClient
@SpringBootApplication public class ConsulConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsulConsumerApplication.class, args); } }
測試,創建一個 ServiceController ,試試如果去獲取 Consul 中的服務。
@RestController public class ServiceController { @Autowired private LoadBalancerClient loadBalancerClient; @Autowired private DiscoveryClient discoveryClient; /** * 獲取所有的服務 * */ @RequestMapping("/services") public Object services(){ return discoveryClient.getInstances("service-producer"); } /** * 從所有服務中選擇一個服務(輪詢) */ @RequestMapping("/discover") public Object discover() { return loadBalancerClient.choose("service-producer").getUri().toString(); } }
運行services方法:
訪問 http://localhost:8503/services
記得一定要開啟consul,如何開啟可自行百度
源碼:https://gitee.com/Hiro-D/Java/tree/master/consul-demo
參考文章:https://blog.csdn.net/qq_26641781/article/details/82080659