SpringCloud集成consul
Posted a565810497
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud集成consul相关的知识,希望对你有一定的参考价值。
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";
为了模拟注册均衡负载复制一份上面的项目重命名为 spring-cloud-consul-producer2 ,修改对应的端口为 8507,修改 hello 方法的返回值为:”hello consul 2”,修改完成后依次启动两个项目。
Consul 消费端:spring-cloud-consul-consumer
创建一个 spring-cloud-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
源码:https://gitee.com/Hiro-D/Java/tree/master/consul-demo
参考文章:https://blog.csdn.net/qq_26641781/article/details/82080659
以上是关于SpringCloud集成consul的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins—— Jenkins+Docker+SpringCloud微服务持续集成
5.springcloud微服务架构搭建 之 《springboot集成Hystrix》