一文教会你如何进行Rest微服务构建 案例工程模块。教会你如何创建父子工程

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 一文教会你如何进行Rest微服务构建 案例工程模块。教会你如何创建父子工程,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

前提

以Dept部门模块(基本的CURD)做一个微服务通用案例,Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务。

需要了解:
Maven的分包分模块架构.

  • 一个Project带着多个Module子模块
  • MicroServiceCloud父工程(Project)下带着三个子模块(Module)

1、如何创建父子工程模块

1.1 创建父工程

创建一个project工程(创建一个maven工程,主要是p使用om文件),然后删除多余的文件只留下pom.xml文件就可以。

在这里插入图片描述

查看父工程的pom。等下创建结束子工程后,查看pom文件的变化

<?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>org.example</groupId>
    <artifactId>FatherDemo</artifactId>
    <version>1.0-SNAPSHOT</version>


    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>

1.2 创建子模块

在父工程上新建子模块module,创建的module同样是maven工程,

在这里插入图片描述
在这里插入图片描述
查看父子目录
在这里插入图片描述

1.2.1 查看子模块的pom文件

在这里插入图片描述

1.2.2 查看父工程的pom文件

在这里插入图片描述

2、Rest微服务构建

2.1 构建基本说明

这里进行三个微服务的提供,一个公共模块,一个服务消费。暂时不考虑服务注册与发现,负载均衡、服务熔断降级、网关等服务情况。【具体的实现过程同1】

在这里插入图片描述

2.2 将服务完善

2.2.1 通用的pom依赖放在父工程中

比如常用的数据库连接、数据池、日志等

<?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>org.zyz</groupId>
    <artifactId>microservicecloud</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>microservicecloud-api</module>
        <module>microservicecloud-provider-dept-8001</module>
        <module>microservicecloud-consumer-dept-80</module>
        <module>microservicecloud-provider-dept-8002</module>
        <module>microservicecloud-provider-dept-8003</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.16.18</lombok.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.5.9.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.0.4</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.31</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.0</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.2.3</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>


</project>

2.2.2 公共模块编写

在这里插入图片描述

2.2.3 服务提供者

3个服务、每个服务都可以当成一个单体应用来写。服务的具体实现等编码

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.2.4 服务消费者

调用服务提供的服务,这里只是简单的调用多个不同的服务。这里应该使用eureka、ribbon等服务注册、负载均衡、服务熔断等机制。这里只作为简单的入门演示

package com.zyz.springcloud.controller;

import com.zyz.springcloud.entities.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

/**
 * @author zyz
 * @version 1.0
 * @data 2023/2/12 23:07
 * @Description:
 */

@RestController
public class DeptController_Consumer {

        private static final String REST_URL_PREFIX = "http://localhost:8001";

    private static final String REST_URL_PREFIX2 = "http://localhost:8002";

    private static final String REST_URL_PREFIX3 = "http://localhost:8003";

    /**
     * 使用 使用restTemplate访问restful接口非常的简单粗暴无脑。 (url, requestMap,
     * ResponseBean.class)这三个参数分别代表 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。
     */
    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/consumer/dept/add")
    public boolean add(Dept dept) {
        return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);
    }

    @RequestMapping(value = "/consumer/dept/get/{id}")
    public Dept get(@PathVariable("id") Long id) {
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class);
    }

    @SuppressWarnings("unchecked")
    @RequestMapping(value = "/consumer/dept/list")
    public List<Dept> list() {
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);
    }

    /**
     * 测试@EnableDiscoveryClient,消费端可以调用服务发现
     */
    @RequestMapping(value = "/consumer/dept/discovery")
    public Object discovery() {
        return restTemplate.getForObject(REST_URL_PREFIX + "/dept/discovery", Object.class);
    }

    /**
     * 测试服务2
     */
    @RequestMapping(value = "/consumer/dept/get2/{id}")
    public Dept get2(@PathVariable("id") Long id) {
        return restTemplate.getForObject(REST_URL_PREFIX2 + "/dept/get/" + id, Dept.class);
    }

    /**
     * 测试服务3
     */

    @RequestMapping(value = "/consumer/dept/get3/{id}")
    public Dept get3(@PathVariable("id") Long id) {
        return restTemplate.getForObject(REST_URL_PREFIX3 + "/dept/get/" + id, Dept.class);
    }



}

2.2.5 数据库创建

不同的服务调用不同的数据库,可以方便的扩容服务,更加高效实现流量的控制访问
在这里插入图片描述

2.3 测试

2.3.1 自测服务是否启动成功

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.2 服务消费者消费服务

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131490.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!