分布式项目(七)consul 服务注册与发现

说到分布式天然就离不开分布式和微服务的话题,简单聊一下。html

微服务是一种软件架构方式,或者说一个一种结构设计风格,它并非标准,它的逻辑是把一个总体服务按业务拆分红不一样独立的服务,下降服务强依赖,消服务器消息驱动,惯用的例子:买东西涉及到订单,仓库,扣钱,之前都是把这些功能做在一个项目中,在一个jvm进程中运行,微服务怎么搞,把订单,仓库,扣钱,搞成三个独立的项目,运行在三个不一样的jvm进程中,服务之间使用http调用或者mq驱动。java

分布式是什么东西呢?分布式更多的强调的是一种部署方式,上面微服务已经把一个项目拆分红了几个不一样的项目,那如今项目须要运行起来提供对应的服务,因此这就是分布式的概念,在不一样的服务器上分散部署不一样的服务,这里须要区分分布式与集群的区别。集群咱们通常讲都是把redis,MySQL集群,这里主要讲是把同一种服务分散部署,横向扩展,达到容灾和提高性能,而分布式讲究的不一样服务,分散部署。mysql

书接上回,在前面的开发中,咱们已经完成了一整套的流程了,已经具有初步部署的条件了,如今咱们就开准备spring cloud环境。 应广大不怕事儿大的吃瓜群众的要求,这里不使用eruka(由于eruka2.0的一系列问题),而改用consul。git

consul

分布式绕不开的一个话题,服务注册、服务发现、服务治理,换句话说,你得让别人知道你在哪儿,死没死,怎么联系你。 而consul就是这样一套开源的分布式服务器发现、配置管理的系统,内置了服务注册和发现,分布式一致性协议,健康检查, key/value存储(redis?有点吊),多数据中心((⊙o⊙)… 不明因此),可视化ui,同时它有种运行模式server/client (哦,是否是客户端像服务端发送某些数据呢)。web

服务注册

consul两种注册实现的方式,一种是服务本身调用consul提供的http api调用实现注册,spring cloud就是用的这种,另外一种是经过json配置文件来实现注册,好比你要把mysql注册上去,就可使用这种方式。redis

服务发现

服务发现也有两种方式,一种也是经过http api调用,另外一种就是使用consul agent DNS。spring

consul安装

下载 https://www.consul.io/downloads.html ,下载下来解压,获得一个consul的二进制文件。sql

启动json

./consul agent -server -bootstrap --bind=127.0.0.1 -client 0.0.0.0 -data-dir consul_data -uibootstrap

访问 http://127.0.0.1:8500/ui 就能看到consul的管理界面了。

spring consul

如今开始spring cloud了,因此建立新工程cloud-work

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>
<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>

consul-discovery-client

建立consul-discovery-client模块,用户集成consul客户端。

<dependencies>
        <!--spring 实现的consul客户端,提供服务注册和发现-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>
        <!--actuator 提供健康检查,consul server会定时调用-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--提供http调用服务-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
@EnableDiscoveryClient
@SpringBootApplication
public class DiscoveryApplication {
    public static void main(String[] args) {
        SpringApplication.run(DiscoveryApplication.class,args);
    }
}
@EnableDiscoveryClient
@SpringBootApplication
public class DiscoveryApplication {
    public static void main(String[] args) {
        SpringApplication.run(DiscoveryApplication.class,args);
    }
}

iot-pt改造

把consul-discovery-client打maven包,在iot-pt项目中引用,并加入spring cloud依赖。

<dependency>
            <groupId>cn.le</groupId>
            <artifactId>consul-discovery-client</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
<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>
<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

修改 coap-server

咱们先拿coap-server实现,修改配置文件

coap.port=5683
coap.iot.byte=iot-byte
coap.iot.json=iot-json

spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500

server.port=8090
server.servlet.context-path=/coap-server
spring.application.name=coap-server
#健康检查路径
spring.cloud.consul.discovery.health-check-path= 
	${server.servlet.context-path}/actuator/health

启动项目,打开consul管理页面

结束语

其它的iot-pt模块这是按照这种方式来搞,这里就不一一说明了。想了解更多关于consul的,点击https://www.cnblogs.com/duanxz/p/7053301.html ,笔者这里也借鉴了一丢丢(捂脸)。

https://gitee.com/distant/cloud-work.git

https://gitee.com/distant/iot-pt.git

相关文章
相关标签/搜索