首页 > 其他分享 >springboot 集成consul,实现服务注册案例

springboot 集成consul,实现服务注册案例

时间:2022-10-24 14:00:38浏览次数:78  
标签:集成 springboot service spring consul springframework import org example

 

  网上关于这方便的集成很多,实际自己搭建时候,可能会有一些问题,在这总结一下,容易出错的地方,我会加特殊标记

  本集成使用springboot版本:2.3.3.RELEASE,spring cloud 版本:Hoxton.SR8,自己搭建环境时,注意去官网比对,springboot与 spring cloud版本是否匹配

  整体目录结构:

  •  首先创建一个springboot项目,然后再创建一个子目录项目,在父级pom.xml文件添加相关引用
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>consuldemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>service-provider</module>
    </modules>
    <packaging>pom</packaging>

    <name>consuldemo</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.boot.version>2.3.3.RELEASE</spring.boot.version>
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
    </properties>

    <!--继承spring-boot-starter-parent依赖-->
    <!--使用继承方式,实现复用,符合继承的都可以被使用-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
    </parent>

    <!--项目依赖管理 父项目只是声明依赖,不会实际引入jar,子项目需要写明需要的依赖(可以省略版本信息)-->
    <dependencyManagement>
        <dependencies>
            <!--spring-cloud依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--spring boot web依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring.boot.version}</version>
            </dependency>

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
            </dependency>
        </dependencies>

    </dependencyManagement>

</project>
View Code

 

  • 在子项目service-provider的pom.xml中添加引用
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--继承父类-->
    <parent>
        <artifactId>consuldemo</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>service-provider</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>jar</packaging>

    <name>service-provider</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>

        <!--Consul依赖,服务发现-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

        <!--spring boot actuator依赖,健康监测-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!--spring boot web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--lombok依赖,构建实体类-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

</project>
View Code

 

  • 在子项目service-provider,创建resource文件夹,同时创建application.yml,注意名字默认不能修改并且标记resource目录为如图所标格式,否则报找不到配置文件里变更的,各种问题

server:
  port: 7070 # 端口
spring:
  application:
    name: service-provider # 应用名称
    # 配置Consul注册中心
  cloud:
    consul:
      # 注册中心的访问地址
      host: localhost
      port: 8500
      # 服务提供者信息
      discovery:
        register: true # 是否需要注册
        instance-id: ${spring.application.name}-01 # 注册实例id(必须唯一)
        service-name: ${spring.application.name} # 服务名称
        port: ${server.port} # 服务端口
        prefer-ip-address: true #是否使用ip地址注册
        ip-address: ${spring.cloud.client.ip-address} # 服务请求ip
View Code
  • 服务层IProductService接口,关键代码:
package org.example.service;

import org.example.entity.Product;

import java.util.List;

public interface IProductService {
    /**
     * 查询商品列表
     * @return
     */
    List<Product> selectProductList();
}
View Code
  • 服务层ProductServiceImpl接口,关键代码:
package org.example.service;

import org.example.entity.Product;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

@Service
public class ProductServiceImpl implements  IProductService {

    public List<Product> selectProductList() {

        return Arrays.asList(
                new Product(1,"华为手机",1,5800D),
                new Product(2,"联想笔记本",1,6888D),
                new Product(3,"小米平板",5,2020D)
        );
    }
}
View Code
  • 基础层,实体类关键代码:
package org.example.entity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.context.annotation.Bean;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product implements Serializable {
    private Integer id;
    private String productName;
    private Integer productNum;
    private Double productPrice;
}
View Code
  • 控制器,关键代码:
package org.example.controller;

import org.example.entity.Product;
import org.example.service.IProductService;
import org.example.service.ProductServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/prduct")
public class ProductController {
    @Autowired
    private IProductService IproductService;

    /**
     * 查询商品列表
     * @return
     */
    @GetMapping("/list")
    public List<Product> selectProductList(){
        return IproductService.selectProductList();
    }


}
View Code
  • 启动类
package org.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * Hello world!
 *
 */
@EnableDiscoveryClient
@SpringBootApplication
public class ServiceProviderApp
{
    public static void main( String[] args )
    {
        SpringApplication.run(ServiceProviderApp.class, args);

    }
}
View Code

 

 

 

  

标签:集成,springboot,service,spring,consul,springframework,import,org,example
From: https://www.cnblogs.com/personblog/p/16820973.html

相关文章

  • consul报错:Consul service ids must not be empty, must start with a letter 或 Unab
      报类似错误,一般是配置文件没生效或配置有问题造成的,可能是resource目录,没有标记为根目录,解决方法如下: ......
  • 在你的网站集成Wiki系统 WikiPlex
    Wikiplex是一种在.NETFramework上所开发,具有处理Wiki编辑宏功能的小型函式库组件,它提供了数种编辑样式的格式,以让使用者可以类似编辑维基百科内容一样的方法来创建网......
  • SpringBoot集成feign的方法分享
    转自:http://www.java265.com/JavaFramework/SpringBoot/202205/3532.html 下文笔者讲述SpringBoot集成feign的方法分享,如下所示实现思路:1.引入相应的jar包......
  • consul命令格式
    一consul命令格式root@consul-01:~#consul--helpUsage:consul[--version][--help]<command>[<args>]可用的命令有:acl与Consul的ACL交互agent运行一个Con......
  • kafka springBoot 报错 not present and missingTopicsFatal is true kafka missing-t
    这个问题可以追溯到springboot和kafka的版本问题,解决这个问题太麻烦,要去看官方文档,我选择不看。这里提供一种通用的解决方式在kafkaConfig配置文件中添加下面的代码/**......
  • 集成mybatis批量update问题
    <!--多条语句批量更新用的是拼接批量执行的方法--><updateid="updateDemo"><foreachcollection="list"item="item"index="index"open=""close=""separa......
  • SpringBoot全局对象数据访问
    创建一个测试类,添加@ControllerAdvie和@ModelAttribute注解packagecom.model.test;importorg.springframework.web.bind.annotation.ControllerAdvice;importorg.......
  • 持续集成(CI)简单介绍
    Continuousintegration,简称CI​是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过......
  • Docker consul
    Dockerconsul的容器服务更新与发现一、Consul简介1.服务注册与发现服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服......
  • SpringBoot启动过程(一)
    1,创建SpringApplication实例1.1设置WebApplicationType(应用类型)目前有三种类型,SERVLET或者REACTIVE或者NONE判断是根据某些特定的类是否存在来判断的,具体推断方法为deduceF......