Spring Cloud 入门——10.1 consul 服务发现中心

24 篇文章 0 订阅
22 篇文章 3 订阅

代码信息

本篇文章涉及代码版本

组件版本
Spring Boot2.0.8.RELEASE
Spring CloudFinchley.SR1

本篇文章涉及应用

应用说明
base-eureka服务发现
base-consul-client使用consul实现服务发现-客户端
base-consul-producer使用consul实现服务发现-服务端

另外一种服务发现

我们常用的服务发现工具主要有ZooKeeper、etcd、Consul 和 Eureka。之前学习Spring Cloud 多数都是使用的Eureka,但是在Eureka没有后续的支持之后,更多的人开始关注Consul。

启动Consul

因为demo项目还是在window环境下运行,所以这里只简单介绍下window环境下如何启动consul。我下载的是1.5.2版本。

  1. 首先下载Consul,其下载地址:https://www.consul.io/downloads.html
  2. 下载后可以得到一个压缩文件,解压后只存在一个consul的文件。
  3. 这个时候需要使用命令进行启动,启动命令
    consul agent -dev -ui -node=cloud
    
    命令的解释
命令说明
-dev开发模式启动
-ui可以用界面进行访问
-node节点名称

截止到目前我们已经启动一个开发用的Consul服务,访问其默认地址http://localhost:8500可以看到已经启动

在这里插入图片描述


服务提供者

现在我们开始创建服务的提供者

添加依赖

这里需要注意的一件事情,你引入了consul的相关依赖就不能引入eureka相关依赖了。这里因为demo的项目使用了父类依赖,而我个人把eureka依赖放入父类了,导致不得不去排除这些依赖。实际使用中假如没有这么做的话,前两个依赖排除配置是不需要的

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </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>
    </dependencies>
参数配置

不同之处服务连接的配置使用了consul的配置

spring:
  application:
    name: base-consul-producer
  cloud:
    # consul 的地址
    consul:
      host: localhost
      port: 8500
server:
  port: 8200

logging:
  file: ${spring.application.name}.log

# consul agent -dev
启动类的配置

使用了@EnableDiscoveryClient的注解,其实使用eureka为服务发现的时候也可以使用此注解,只不过个人之前习惯罢了

@EnableDiscoveryClient
@SpringBootApplication
public class ProducerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class, args);
    }
}

服务消费者

在依赖、启动类的配置、和参数配置上和服务提供者内容是一致的,所以不再重复

服务调用

这里新建了一个调用服务提供者接口的测试请求。

@RestController
@Log
public class ConsumerController {

    @Autowired LoadBalancerClient loadBalancerClient;
    @Autowired RestTemplate restTemplate;

    @RequestMapping(value = "/consumerGetService",method = RequestMethod.GET)
    public String getService() {
        // 服务提供者
        ServiceInstance serviceInstance = loadBalancerClient.choose("base-consul-producer");
        String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/getService";
        log.info(url);
        return restTemplate.postForObject(url,null, String.class);
    }
}

测试

首先、启动服务提供者(base-consul-producer)和消费者(extra-consul-client)

我们查看服务发现的信息,已经获取信息了。
在这里插入图片描述

现在我们访问extra-consul-client项目中用来测试的consumerGetService地址,可以看到已经拿到数据了。

在这里插入图片描述

到目前为止一个简单的Consul服务发现已经完成


本篇文章并未贴出所有代码,涉及的源码下载地址:https://gitee.com/daifylearn/cloud-learn

ps.上述的所有项目都是可以成功运行的。但是在后期为了实现每个应用端口尽量不冲突会有些许调整,而后续某次作死调整结构和名称可能会导致部分项目无法运行o(╯□╰)o,如果发现请留言我进行修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大·风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值