框架搭建 - 第二篇

根据第一篇的测试结果,看似已经可以通过外部接口获取对应服务的信息,但也仅限于此,如果项目内其他服务调用,在只引入对应jar包时是无法成功调用的,这时就需要一个新的工具 - consul 来实现服务间的通信,具体实现可参考说明中的网址进行了解,不过该方法是通过Eureka实现的,但他们的功能是一致的。具体实现 ↓↓↓

零. consol的安装&启动

0.1 下载地址
链接:https://pan.baidu.com/s/1tx_toB8XPOkGxLnU9iHlBw
提取码:lbv1
0.2 解压后,在解压目录中,Shift+鼠标右键中Powershell的start cmd,通过命令启动服务
命令:consul.exe agent -server -bootstrap -bind=127.0.0.1 -client=0.0.0.0 -data-dir ./data -ui

一. 订单服务(order-service)引入 Maven 依赖

<!--注册发现、远程配置、远程调用五件套-->
<!--微服务远程调用(第一篇已经引过) -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--远程动态配置读取 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</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-actuator</artifactId>
</dependency>
<!--Spring自己的loadbalancer-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

二. 配置订单服务(order-service)的application.properties

spring.application.name=demo-order-service
# consul地址
spring.cloud.consul.host=127.0.0.1
# consul端口号
spring.cloud.consul.port=8500
# 启用服务发现
spring.cloud.consul.discovery.enabled=true
# 启用服务注册
spring.cloud.consul.discovery.register=true
# 服务停止时取消注册
spring.cloud.consul.discovery.deregister=true
# 表示注册时使用IP而不是hostname
spring.cloud.consul.discovery.prefer-ip-address=true
# 执行监控检查的频率
spring.cloud.consul.discovery.health-check-interval=30s
# 设置健康检查失败多长时间后,取消注册
spring.cloud.consul.discovery.health-check-critical-timeout=30s
# 开启心跳检测
spring.cloud.consul.discovery.heartbeat.enabled=true
# 健康检查的路径
spring.cloud.consul.discovery.health-check-path=/actuator/info
# 服务注册标识,格式为:应用名称+服务器IP+端口
spring.cloud.consul.discovery.instance-id=${spring.application.name}:${spring.cloud.client.ipaddress}:${server.port}
# 启用consul的配置中心功能,默认是true
spring.cloud.consul.config.enabled=true
# 表示consul上面文件的格式 有四种 YAML PROPERTIES KEY-VALUE FILES,默认是KEY-VALUE
spring.cloud.consul.config.format=yaml
#配置基本文件,默认值config
spring.cloud.consul.config.prefix=${spring.application.name}
#表示开发环境:dev/test/preprod,生产环境独立部署consul服务器
spring.cloud.consul.config.default-context=dev
#表示consul上面的配置文件名,每个开发人员各自管理自己的配置文件
spring.cloud.consul.config.data-key=zhangbocong
# watch选项为配置监视功能,主要监视配置的改变
spring.cloud.consul.config.watch.delay=10000
spring.cloud.consul.config.watch.enabled=true
spring.cloud.consul.config.watch.wait-time=30

三. 查看consul

3.1 配置完成后,查看consul的services服务,目前是没有任何服务注册的

3.2 重启order-service服务后,查看consul中订单服务是否已注册

四. 按照第一篇的方法,重新建立一个“项目服务”与“项目服务内部数据接口服务”。

4.1 建立后具体目录如下:

4.2 引入 Maven 依赖
<!-- order的 Api -->
<dependency>
    <groupId>com.demo.order</groupId>
    <artifactId>order-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>
<!--注册发现、远程配置、远程调用五件套-->
<!--微服务远程调用 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--远程动态配置读取 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</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-actuator</artifactId>
</dependency>
<!--Spring自己的loadbalancer-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
4.3 配置 application.properties
# MySQL数据源1驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# MySQL数据源1路径
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&useUnicode=true&serverTimezone=UTC
# MySQL登陆账户1
spring.datasource.username=root
# MySQL登陆密码1
spring.datasource.password=123456
# 本地端口号
server.port=8081

spring.application.name=demo-project-service
# consul地址
spring.cloud.consul.host=127.0.0.1
# consul 端口号
spring.cloud.consul.port=8500
# 启用服务发现
spring.cloud.consul.discovery.enabled=true
# 启用服务注册
spring.cloud.consul.discovery.register=true
# 服务停止时取消注册
spring.cloud.consul.discovery.deregister=true
# 表示注册时使用IP而不是hostname
spring.cloud.consul.discovery.prefer-ip-address=true
# 执行监控检查的频率
spring.cloud.consul.discovery.health-check-interval=30s
# 设置健康检查失败多长时间后,取消注册
spring.cloud.consul.discovery.health-check-critical-timeout=30s
# 开启心跳检测
spring.cloud.consul.discovery.heartbeat.enabled=true
# 健康检查的路径
spring.cloud.consul.discovery.health-check-path=/actuator/info
# 服务注册标识,格式为:应用名称+服务器IP+端口
spring.cloud.consul.discovery.instance-id=${spring.application.name}:${spring.cloud.client.ipaddress}:${server.port}
# 启用consul的配置中心功能,默认是true
spring.cloud.consul.config.enabled=true
# 表示consul上面文件的格式 有四种 YAML PROPERTIES KEY-VALUE FILES,默认是KEY-VALUE
spring.cloud.consul.config.format=yaml
#配置基本文件,默认值config
spring.cloud.consul.config.prefix=${spring.application.name}
#表示开发环境:dev/test/preprod,生产环境独立部署consul服务器
spring.cloud.consul.config.default-context=dev
#表示consul上面的配置文件名,每个开发人员各自管理自己的配置文件
spring.cloud.consul.config.data-key=zhangbocong
# watch选项为配置监视功能,主要监视配置的改变
spring.cloud.consul.config.watch.delay=10000
spring.cloud.consul.config.watch.enabled=true
spring.cloud.consul.config.watch.wait-time=30
4.4 配置启动类

五. 创建测试接口并测试

5.1 新建service、controller层目录,注入orderApi接口

5.2 新建控制层访问服务

5.3 启动服务

5.4 查看consul服务

5.5 访问接口地址,如下则配置成功

番外:

至此 consul 功能暂时只用了服务的注册于发现功能,其他功能入key/value存储还在解锁中