SpringCloud微服务案例(基础篇)

导读:本篇文章讲解 SpringCloud微服务案例(基础篇),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

上一篇:SpringCloud微服务初学篇
前言
        上一篇刚刚创建好父工程,接下来我们创建子工程。

SpringCloud-Rest微服务案例

        首先来介绍一下项目流程,用户访问订单微服务,然后订单微服务调用支付微服务。
构建步骤
                1、 cloud-provider-payment8001微服务提供者支付Module模块
                2、 热部署Devtools
                3、 Cloud-consumer-order80微服务消费者订单Module模块
                4、 工程重构
        如何构建微服务模块?

搭建cloud-provider-payment8001项目

                1) 建module
                groupId:com.tedu.springcloud
                artifactId:cloud-provider-payment8001
                通常情况下goupId是你启动类包名,artifactId是项目名,在这块就是pom依赖最重要的地方。由于小编在创建module的时候当时还不知道,所以,比较乱,但是只要记住这个规则,基本上就没什么问题。
                        点击父工程tedu,鼠标右键,新建一个module
在这里插入图片描述
                2)改pom
                        这一步主要在子项目中添加相关依赖即可
在这里插入图片描述
                3)写yml
                        在resources中新建一个application.yml作为springboot的配置文件,注意缩进
在这里插入图片描述
                4)主启动类
                        为springboot项目添加主启动类,在项目报下创建启动类。
在这里插入图片描述
                5)业务类
                        controller、service、dao、entities
                        ①这里要补充一点的是lombok的作用
                        目前为止,我只知道这个依赖的作用是为了省去我们写实体类的set、get以及全参、无参构造器的方法
在这里插入图片描述
                        ②、创建dao层
                        这里要说一下@Mapper注解和@MapperScan注解的区别

@Mapper:创建bean对象
与@MapperScan的区别就是@MapperScan只用在启动类写一次即可,因为他扫描的是整个包
但是@Mapper注解却要一个一个加在dao层的mapper上

在这里插入图片描述
在这里插入图片描述
                        ③、创建service层
                        接口
在这里插入图片描述
                        实现类
                        @Resource这个注解跟@Autowired注解用法一样,也是可以进行自动装配的。
                        不过@Resource是属于java自带的,@Autowired属于spring的
在这里插入图片描述
                        ④、创建结果集CommonResult类
在这里插入图片描述
                        ⑤、创建Controller层
在这里插入图片描述

补充一点:
        @Slf4j注解:一开始@Slf4j注解莫名其妙,只知道是打日志用的,后来运行起来,打出来日志才知道如下这样:

在这里插入图片描述

在这里插入图片描述
        现在基本可以开始启动项目了,但是,没有配置Tomcat如何启动呢,况且正常情况下,启动按钮是灰色的。但是你要注意,在springcloud项目(此项目用springboot)里每个微服务都是由springboot框架,然而springboot自带tomcat,所以可以直接在其启动类里右键直接启动该项目,正常情况下是可以启动的起来的,但是,如果还启动不起来,可以试试再重新下载jar包,方法:找到项目根目录,右键选择maven,然后选择reload project即可。

        现在问题又来了,如果每次修改其中的代码,那岂不是都得需要重新启动一下才能生效吗,这样的话就有点麻烦了,所以接下来要配置我们的热部署。

热部署

        作用是为了更方便的写代码,怎么方便呢,注意,现在假如你启动项目完毕后,再进行修改代码,这样是不会直接有效果的,除非你重新启动项目;如果进行了热部署以后,再启动过程中再进行修改代码,会直接响应。

步骤:
        1:在子项目中添加devtools依赖
在这里插入图片描述
        2:修改父工程中pom的plugins
在这里插入图片描述
        3:开启自动编译选项
在这里插入图片描述
        4:更新设置
                更新设置选择快捷键Ctrl+shif+alt+/,出现这么个窗口,然后选择第一个
在这里插入图片描述
                然后找到下图两个东西勾选上
在这里插入图片描述
在这里插入图片描述
        5、设置update时的操作
在这里插入图片描述
在这里插入图片描述
        最后重启idea即可。

        再来回顾一下我们所需要做的事情,客户端访问订单微服务,然后订单微服务再去调用支付微服务这样的一个过程。
在这里插入图片描述
        所以接下来开始搭建订单微服务。

搭建cloud-consumer-order80

  • groupId:com.tedu.springcloud
  • artifactId: cloud-consumer-order80
            我们要用客户端调用订单服务,订单微服务再调用支付微服务,所以module之间的通讯就不能直接用http来连接,我们用RestTemplate,RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷服务模板,是Spring提供的访问用于Rest服务的客户端模板工具集。
RestTemplate

        API官方文档
        使用restTemplate访问restful和接口非常简单(url , requestMap , ResonseBean.class)这三个参数分别代表RESR请求地址、请求参数、HTTP响应转换被转换成的对象类型。
        那么现在来搞客户端,用客户端调取微服务接口,其步骤跟8001端口类似,同样的有这么几步:建立module、修改pom、写YML、启动类、业务逻辑代码。
        跟8001端口类似的步骤我就省略,但是有些地方不一样,比如,客户端只需要调用即可,没必去调用数据库里的东西,他要调用的就是微服务,所以没有mybatis和数据库项相关的依赖,所以我们的80端口pom依赖可以是这样的:

  • 改pom
    在这里插入图片描述
  • 配YML,只用配置端口号即可
    在这里插入图片描述
            此时,我们还是需要一个Payment实体类和一个CommontResult结果集,同8001端口一样。原因我们稍后会说。
restTemplate配置

        创建配置类config.ApplicationConextConfig.class,这个类要让他启动项目时就建立好,所以我们把他当作spring的配置类配置。
在这里插入图片描述
        controller层
        那么如何通过restTemplate来访问8001端口的服务呢,首先我们要自动注入一个RestTemplate类,然后通过如下方法来调用。

restTemplate.getForObject(url:"" , CommonResult.class);
restTemplate.postForObject(url:"" ,payment, CommonResult.class);

        其返回对象皆是你所给的CommonResult.class这个东西。
在这里插入图片描述
        这里要重点强调一下@RequestBody和@ResponseBody的区别:
        @RequestBody:说白了就是将json格式的数据转换城JavaBean对象,注意,写法要在参数前面加,不要加在方法上
在这里插入图片描述
        @ResponseBody:与@RequestBody相对应,将JavaBean对象转换为json格式的字符串返回给客户端,这时需要写道方法名字上
在这里插入图片描述
        那么问题来了,两个module中间传递的到底是什么东东?
在这里插入图片描述
在这里插入图片描述

项目重构

        到这里我们可以发现,在80和8001项目中,都有一个相同的entities包,所以我们再重构一下项目布局。目的是把entities包给合并起来。
        我们可以再新建一个module项目,然后对其进行进一步配置,操作如下:
        1、新建一个cloud-api-commons
        2、Pom依赖
        3、复制重复的Entities到新项目中,并删除80、8001项目的entities包
        4、利用maven命令clean和install
        5、分别在80和8001项目添加刚刚install的依赖
        创建项目,由于之前创建过,所以Artifacld名字重复爆红线属于正常。
在这里插入图片描述
        直接从添加cloud-api-commons项目依赖开始,以下是需要添加的依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.1.0</version>
</dependency>

        在该工程中,选择右边的maven,点击闪电标识符,会发现test有个横线,说明不需要进行测试,以此执行clea和install命令。
在这里插入图片描述
        然后我们就可以对80和8001项目进行添加该依赖
        原来我们在创建项目的同时就已经对其groupId、artifactId和version确定。如下:
在这里插入图片描述
        导入公共包(entities)
在这里插入图片描述
        再次测试即可

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

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

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!