spring boot + Consul 示例 (Kotlin版)

文章目录

  • [1.docker 安装consul](#1.docker 安装consul)
  • 2.创建基于springboot的client
    • [2.1 依赖版本](#2.1 依赖版本)
    • [2.2 pom.xml](#2.2 pom.xml)
    • [2.3 启动类](#2.3 启动类)
    • [2.4 application.properties](#2.4 application.properties)
  • [3 搭建完成](#3 搭建完成)
  • [4. 总结](#4. 总结)

1.docker 安装consul

docker-compose.yaml

yaml 复制代码
version: "3"

services:
  consul:
    image: consul:1.4.4
    container_name: consul
    environment:
      - CONSUL_BIND_INTERFACE=eth0
    ports:
      - "8500:8500"

这里使用的是consul的1.4.4版本的image,可以根据需要更换不同的版本。

在docker-compose.yaml文件所在路劲执行如下指令后

bash 复制代码
docker-compose up -d

查看当前容器运行情况

bash 复制代码
CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS       PORTS                                                                      NAMES
417107b6159c   consul:1.4.4   "docker-entrypoint.s..."   6 days ago   Up 2 hours   8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0.0.0.0:8500->8500/tcp   consul

此时,可以访问consul的dashboard界面
localhost:500

2.创建基于springboot的client

上述docker安装的consul server作为服务发现中心,此时创建client并注册到注册中心。

2.1 依赖版本

name version
spring-boot 2.7.15
spring-cloud 2021.0.8
JAVA 11
Kotlin 1.6
Maven 3.9

2.2 pom.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.15</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>sb-consul</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sb-consul</name>
    <description>sb-consul</description>
    <properties>
        <java.version>11</java.version>
        <kotlin.version>1.6.21</kotlin.version>
        <spring-cloud.version>2021.0.8</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-kotlin</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-reflect</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib-jdk8</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>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
        <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <configuration>
                    <args>
                        <arg>-Xjsr305=strict</arg>
                    </args>
                    <compilerPlugins>
                        <plugin>spring</plugin>
                    </compilerPlugins>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.jetbrains.kotlin</groupId>
                        <artifactId>kotlin-maven-allopen</artifactId>
                        <version>${kotlin.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

</project>

注意: 这里重要的有两个依赖,分别是:

xml 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

这个用来注册到consul的注册中心

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

这个是用来做健康检测的,不加的话,请求接口HTTP GET http://192.168.19.123:10086/actuator/health会失败,认为服务不健康。(这里我理解为服务不健康,就不可以对外提供服务,但是我本地起了两个一样的服务,一个是通过健康检测的,一个没有,但是都可以访问到。不知道为什么。。)

2.3 启动类

kotlin 复制代码
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.cloud.client.discovery.EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
class SbConsulApplication

fun main(args: Array<String>) {
    runApplication<SbConsulApplication>(*args)
}

注意添加注解@EnableDiscoveryClient,不过是使用Eureka还是Consul这种注册中心,都需要指明服务发现的client。

2.4 application.properties

txt 复制代码
spring.application.name=YYtest
server.port=10086

spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.serviceName=${spring.application.name}

这里主要就是指明服务发现的配置内容,即Consul server的地址。

3 搭建完成

这个时候,再访问Consul的dashboard界面,可以看到服务已经注册成功。

点击我们的服务YYtest 服务

4. 总结

先感受了一下Consul,又好像什么都没感受一样。继续深入学习。。。

相关推荐
IT毕设梦工厂3 分钟前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
是梦终空1 小时前
JAVA毕业设计176—基于Java+Springboot+vue3的交通旅游订票管理系统(源代码+数据库)
java·spring boot·vue·毕业设计·课程设计·源代码·交通订票
工业互联网专业2 小时前
毕业设计选题:基于springboot+vue+uniapp的驾校报名小程序
vue.js·spring boot·小程序·uni-app·毕业设计·源码·课程设计
无名指的等待7123 小时前
SpringBoot中使用ElasticSearch
java·spring boot·后端
.生产的驴3 小时前
SpringBoot 消息队列RabbitMQ 消费者确认机制 失败重试机制
java·spring boot·分布式·后端·rabbitmq·java-rabbitmq
AskHarries4 小时前
Spring Boot利用dag加速Spring beans初始化
java·spring boot·后端
苹果酱05674 小时前
一文读懂SpringCLoud
java·开发语言·spring boot·后端·中间件
掐指一算乀缺钱4 小时前
SpringBoot 数据库表结构文档生成
java·数据库·spring boot·后端·spring
飞翔的佩奇5 小时前
xxl-job适配sqlite本地数据库及mysql数据库。可根据配置指定使用哪种数据库。
数据库·spring boot·mysql·sqlite·xxl-job·任务调度
luoluoal7 小时前
java项目之基于Spring Boot智能无人仓库管理源码(springboot+vue)
java·vue.js·spring boot