springcloud(十三):Eureka 虽然闭源了,但注册中心还有更多选择:Consul 使用详解 (3)

依赖包如下:

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>

spring-boot-starter-actuator 健康检查依赖于此包。

spring-cloud-starter-consul-discovery Spring Cloud Consul 的支持。

Spring Boot 版本使用的是 2.0.3.RELEASE,Spring Cloud 最新版本是 Finchley.RELEASE 依赖于 Spring Boot 2.x.

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

完整的 pom.xml 文件大家可以参考示例源码。

配置文件

配置文件内容如下

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

Consul 的地址和端口号默认是 localhost:8500 ,如果不是这个地址可以自行配置。
spring.cloud.consul.discovery.serviceName 是指注册到 Consul 的服务名称,后期客户端会根据这个名称来进行服务调用。

启动类 @SpringBootApplication @EnableDiscoveryClient public class ConsulProducerApplication { public static void main(String[] args) { SpringApplication.run(ConsulProducerApplication.class, args); } }

添加了 @EnableDiscoveryClient 注解表示支持服务发现。

提供服务

我们在创建一个 Controller,推文提供 hello 的服务。

@RestController public class HelloController { @RequestMapping("/hello") public String hello() { return "helle consul"; } }

为了模拟注册均衡负载复制一份上面的项目重命名为 spring-cloud-consul-producer-2 ,修改对应的端口为 8502,修改 hello 方法的返回值为:"helle consul two",修改完成后依次启动两个项目。

这时候我们再次在浏览器访问地址::8500,显示如下:

springcloud(十三):Eureka 虽然闭源了,但注册中心还有更多选择:Consul 使用详解

我们发现页面多了 service-producer 服务,点击进去后页面显示有两个服务提供者:

springcloud(十三):Eureka 虽然闭源了,但注册中心还有更多选择:Consul 使用详解

这样服务提供者就准备好了。

Consul 消费端

我们创建一个 spring-cloud-consul-consumer 项目,pom 文件和上面示例保持一致。

配置文件

配置文件内容如下

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

客户端可以设置注册到 Consul 中,也可以不注册到 Consul 注册中心中,根据我们的业务来选择,只需要在使用服务时通过 Consul 对外提供的接口获取服务信息即可。

启动类 @SpringBootApplication public class ConsulConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsulConsumerApplication.class, args); } } 进行测试

我们先来创建一个 ServiceController ,试试如果去获取 Consul 中的服务。

@RestController public class ServiceController { @Autowired private LoadBalancerClient loadBalancer; @Autowired private DiscoveryClient discoveryClient; /** * 获取所有服务 */ @RequestMapping("/services") public Object services() { return discoveryClient.getInstances("service-producer"); } /** * 从所有服务中选择一个服务(轮询) */ @RequestMapping("/discover") public Object discover() { return loadBalancer.choose("service-producer").getUri().toString(); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywjsy.html