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》

传统SSH项目集成到Springcloud

Jenkins+Docker+SpringCloud微服务持续集成(下)

SpringCloud集成Ribbon

springcloud学习之路: springcloud集成Zuul网关