zoukankan      html  css  js  c++  java
  • Spring Cloud微服务架构实战之Consul注册中心02:consul入门案例

    上一篇:Spring Cloud微服务架构实战之Consul注册中心01  可以点击回顾。接下来讲述consul入门案例。

    获取springcloud实战项目详细视频教程,请留言联系。

    1、创建项目

    我们创建聚合项目来讲解 Consul,首先创建一个 pom 父工程。

    2、添加依赖

    pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <!-- 项目坐标地址 -->
        <groupId>com.example</groupId>
        <!-- 项目模块名称 -->
        <artifactId>consul-demo</artifactId>
        <!-- 项目版本名称 快照版本SNAPSHOT、正式版本RELEASE -->
        <version>1.0-SNAPSHOT</version>
    
        <!-- 继承 spring-boot-starter-parent 依赖 -->
        <!-- 使用继承方式,实现复用,符合继承的都可以被使用 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.4.RELEASE</version>
        </parent>
    
        <!--
            集中定义依赖组件版本号,但不引入,
            在子工程中用到声明的依赖时,可以不加依赖的版本号,
            这样可以统一管理工程中用到的依赖版本
         -->
        <properties>
            <!-- Spring Cloud Hoxton.SR1 依赖 -->
            <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
        </properties>
    
        <!-- 项目依赖管理 父项目只是声明依赖,子项目需要写明需要的依赖(可以省略版本信息) -->
        <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>
            </dependencies>
        </dependencyManagement>
    
    </project>

    3、服务提供者 service-provider

     3.1 创建项目

    在刚才的父工程下创建一个 service-provider 服务提供者的项目。

    3.2 添加依赖

    pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.example</groupId>
        <artifactId>service-provider</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <!-- 继承父依赖 -->
        <parent>
            <groupId>com.example</groupId>
            <artifactId>consul-demo</artifactId>
            <version>1.0-SNAPSHOT</version>
        </parent>
    
        <!-- 项目依赖 -->
        <dependencies>
            <!-- spring cloud 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>
    
            <!-- spring boot test 依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
      
    </project>

    3.3 配置文件

    application.yml

    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

    3.4 实体类

    Product.java

    package com.example.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.io.Serializable;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Product implements Serializable {
    
        private Integer id;
        private String productName;
        private Integer productNum;
        private Double productPrice;
    
    }

    3.5 编写服务

    ProductService.java

    package com.example.service;
    
    import com.example.pojo.Product;
    
    import java.util.List;
    
    /**
     * 商品服务
     */
    public interface ProductService {
    
        /**
         * 查询商品列表
         *
         * @return
         */
        List<Product> selectProductList();
    
    }

    ProductServiceImpl.java

    package com.example.service.impl;
    
    import com.example.pojo.Product;
    import com.example.service.ProductService;
    import org.springframework.stereotype.Service;
    
    import java.util.Arrays;
    import java.util.List;
    
    /**
     * 商品服务
     */
    @Service
    public class ProductServiceImpl implements ProductService {
    
        /**
         * 查询商品列表
         *
         * @return
         */
        @Override
        public List<Product> selectProductList() {
            return Arrays.asList(
                    new Product(1, "华为手机", 1, 5800D),
                    new Product(2, "联想笔记本", 1, 6888D),
                    new Product(3, "小米平板", 5, 2020D)
            );
        }
    
    }

    3.6 控制层

    ProductController.java

    package com.example.controller;
    
    import com.example.pojo.Product;
    import com.example.service.ProductService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    @RestController
    @RequestMapping("/product")
    public class ProductController {
    
        @Autowired
        private ProductService productService;
    
        /**
         * 查询商品列表
         *
         * @return
         */
        @GetMapping("/list")
        public List<Product> selectProductList() {
            return productService.selectProductList();
        }
    
    }

    该项目我们可以通过单元测试进行测试,也可以直接通过 url 使用 postman 或者浏览器来进行测试。

  • 相关阅读:
    经典算法之冒泡排序(Bubble Sort)-Python实现
    经典算法之快速排序(Quick Sort)-Python实现
    2020年SRE的随心感悟
    django: 像正常运行django的项目运行单个文件
    整理一下javascript中offsetWidth、clientWidth、width、scrollWidth、clientX、screenX、offsetX、pageX的具体含义
    requestAnimationFram 的优势及使用场景
    js 隐式数据转换带来的BUG
    为什么我不建议在js中使用链接变量分配
    关于JS函数传参的数据修改
    实现一个查看浏览器内核及版本号的功能函数
  • 原文地址:https://www.cnblogs.com/shsxt/p/12889958.html
Copyright © 2011-2022 走看看