没接触微服务,学习搭建SpringCloud+SpringBoot+Nacos+Getaway+Mybatis的demo有多难?

引言

学习过程记录,可供刚接触微服务框架童鞋有一个对微服务大概的认知以及搭建一个简单的微服务Demo。文章知识点涉及很浅,也非专业术语就是自己理解,如果哪里不妥当也请大家多多指出。

怎么说呢,上周自己拿到考核任务,搭建SpringCloud+SpringBoot+Nacos+Getaway+Mybatis的项目并完成等等等简单的业务。我看到这个考核题目是有点懵的,因为我之前从没接触过微服务,感觉非常难。事实上我查阅网上资料自己搭建的时候也非常麻烦以及遇到很多坑,但是当最后我搭建完成并顺利跑通那一刻我觉得其实也没那么困难。

准备

1.首先很有必要先了解一下什么是微服务,其实就是将一个大项目拆分为多个小的项目。例如电商系统,没有使用微服务框架的电商项目可能就是一个整体,无论是浏览商品,购买商品,支付金额都是在一个大的SpringBoot项目中所完成,但是采用微服务的话就是将浏览商品服务拆分为一个 SpringBoot项目,而购买商品拆分为一个SpringBoot项目,支付金额拆分为一个SpringBoot项目。

初学者就可以认为是将一个SpringBoot项目拆分成多个Springboot的小项目这种就被称为是微服务。

2.安装 Nacos,我在配置好环境启动项目时候发现不能连接Nacos,我就在想是不是Nacos需要安装?百度一下,果然他是需要安装的·······。(不过好在Nacos是阿里巴巴的,所以安装教程以及基础学习直接去官网查看文档,中文版本的不用担心你看不懂英文,讲的也是最权威的)
Nacos文档
Nacos是一个快速实现动态服务发现、服务配置、服务元数据及流量管理。

把Nacos当成一个点名册,拆分的多个服务都会被注册到点名册上,方便我们发现管理它们。

3.Getawaty是个啥?它其实就充当一个网关,可以将用户请求过滤以及修改然后再通过Getaway去转发到对应的请求服务上。(它本身也是一个服务)

可以理解成一个过滤器,过滤出符合规范的请求进行转发给对应的服务器。

附一张架构图,更方便理解。
架构图

搭建项目

SpringCloud微服务,虽然很多服务,但是服务之间使用的开发环境是相同的,所以Maven依赖也是有很多共同的。那么可以建一个父 Maven项目,然后配置依赖。在大项目中创建各个微服务项目。

创建父项目,并配置依赖

1.创建一个Maven项目
创建Maven项目
2.删除src,配置父pom文件
删除src
pom.xml内容

    <!--集成springboot父项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
        <spring.cloud.version>Hoxton.SR6</spring.cloud.version>
        <springframework.version>4.2.1.RELEASE</springframework.version>
    </properties>
    <!--全局引入下载依赖地址,并不会引入依赖-->
    <dependencyManagement>
        <dependencies>
            <!--阿里巴巴下载仓库-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--springcloud下载仓库-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>2.2.5.RELEASE</version>
            </dependency>
            <!--nacos client-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>2.2.1.RELEASE</version>
            </dependency>
            <!--openfeign-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
                <version>2.2.3.RELEASE</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
创建服务user,并配置依赖

两个服务创建以及配置过程一样,所以省去product

1.创建一个Maven项目user
创建一个maven项目
2.点击finish进入下一步
在这里插入图片描述
3.创建 application.properties并配置

server.port=6666
spring.application.name=user

spring.cloud.nacos.server-addr=localhost:8848
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}
management.endpoints.web.exposure.include=*

4.配置pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos client-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>2.4.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-openfeign-core</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>
    </dependencies>

5.利用install下载父类以及user的依赖,并创建启动类

package org.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
    }
}

6.user服务我们就构建完成了,我们点击启动就好了
确保Nacos安装成功并且启动
在这里插入图片描述

如果存在报错,可能某个细节出现问题直接百度就好了。

创建服务product,并配置依赖

同上我们创建product,这里就不在写了。注意端口号改一下

启动服务,查看Nacos

这个时候我们就有两个服务了,我们分别把它们启动,确保Nacos安装成功并且启动

在这里插入图片描述
我们两个服务已经启动这时候我们访问http://localhost:8848/nacos/,用户名和密码都是nacos登录。
在这里插入图片描述
ok,其实到这里我们微服务框架就已经搭建起来了,只不过什么都没做而已。现在项目只能算是SpringCloud+SpringBoot+Nacos。
先完善一下项目,体现出来服务之间的调用,在集成Getaway以及Mybatis吧。

完善业务

编写业务类

我们user服务就可以当做我们客户端,利用user服务去调用product服务的一些功能。

创建之后应该是这样
在这里插入图片描述

1.UserController.java

@RestController
public class UserController {
    @Value("${server.port}")
    private String port;

    @Autowired
    UserClient userClient;

    @RequestMapping("/user/index")
    @ResponseBody
    Map<String,Object> openFeignClient(){
        Map<String, Object> stringObjectMap = userClient.openFeign();
        return stringObjectMap;
    }
}

2.UserClient.java

@FeignClient("product")
public interface UserClient {
    @GetMapping("/product/inform")
    Map<String,Object> openFeign();
}

3.ProductController.java

@RestController
public class ProductController {
    @Value("${server.port}")
    private String port;

    @GetMapping("/product/inform")
    Map<String,Object> openFeign(){
        Map<String,Object> map = new HashMap<>();
        map.put("访问状态:",200);
        map.put("端口号:",port);
        map.put("内容:","这里是product服务中心");
        return  map;
    }
}
启动服务,测试业务

这里测试请求时候,我遇到一个很搞笑的问题。查了半天才发现并不是我们项目问题,而是浏览器的问题。
当我们用浏览器访问 localhost:6666/user/index和localhost:6667/product/inform时候浏览器会报错
在这里插入图片描述
不是404,不是500,当时我看到这里我就蒙了。难道是微服务框架搭建的不对。整了好半天,最后百度才知道···
浏览器默认觉得一些端口号是不安全的,所以不允许发起请求,直接返回服务无法访问页面。也就是我们换个端口号就行,你说不换端口号行不?也行我就是利用postman进行测试的。

1.访问 localhost:6666/user/index
在这里插入图片描述
2.localhost:6667/product/inform
在这里插入图片描述
我们发现我们调用user服务可以访问到product服务,也可以直接调用product服务。服务之间调用没有问题。基础微服务框架就搭建完毕了…

扩展项目(集成Getaway)

其实Getaway本身它也是个服务,就接收无论是手机,电脑,网页等等发送的请求,然后转发给其他对应的服务。

创建服务getaway,并配置依赖

配置pom.xml,并Maven install

<dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--gateway依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--(nacos统一配置中心管理依赖)-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

配置application.yml

server:
  port: 7666
spring:
  application:
    name: gateway
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
      discovery:
        service-name: ${spring.application.name}
    gateway:
      routes:
        - id: user-route  #指定唯一标识
          #          uri: http://localhost:6666/ #指定路由服务的地址
          uri: lb://user   #服务名,实现负载均衡
          predicates:
            - Path=/user/** #指定路由规则

        - id: product-route  #指定唯一标识
          #          uri: http://localhost:6667/ #指定路由服务的地址
          uri: lb://product   # lb:服务名,实现负载均衡
          predicates:
            - Path=/product/** #指定路由规则
      discovery:
        locator:
          enabled: true  #开启动态服务名动态获取路由地址
management:
  endpoints:
    web:
      exposure:
        include: "*"   #暴露路由的规则端点  /actuator/gateway/routes
测试Getaway

测试product服务:
在这里插入图片描述

测试user服务
在这里插入图片描述

这里localhost:7666/product/product/inform有两个product,第一个product表明是进入product服务,后面/product/inform请求的映射方法。localhost:7666/user/user/index也是同理,如果localhost:7666/product/user/index的话请求会报错404,因为product服务中并没有接收/user/index请求的方法。

扩展项目(集成Mybatis)

这个作为课后作业吧,大家自己练习练习吧!!其实就是SpringBoot集成Mybatis差不多。

结束语

自己刚接触自己尝试搭建环境耗费了两天,但如果能看到这篇博客我觉得应该也就一早上就能搞定吧嘻嘻。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
SpringCloud是一个开源的微服务框架,旨在简化构建分布式系统的复杂性。它提供了一组工具和组件,使开发者能够快速构建和部署分布式应用程序。 SpringBoot是一个用于快速开发Java应用程序的框架,它简化了配置和部署过程。通过使用自动配置和准备的开发环境,SpringBoot可以让开发者专注于应用程序的业务逻辑而不是繁琐的配置。 Nacos是一个分布式的服务发现和配置管理平台。它可以帮助开发者轻松地实现微服务架构中的服务注册、发现和配置管理。Nacos提供了强大的服务发现和注册功能,支持动态配置管理,并具有容错和高可用性的特性。 结合起来,SpringCloudSpringBootNacos可以实现快速构建和部署分布式系统的目的。SpringCloud提供了一组工具和组件,使得开发者能够轻松实现服务注册和发现、路由和负载均衡等功能。而SpringBoot简化了开发过程,通过自动配置和准备的开发环境,开发者可以快速搭建和开发应用程序。Nacos则提供了服务注册、发现和配置管理功能,使得开发者可以更方便地进行服务治理。 总之,SpringCloudSpringBootNacos是三个非常重要的框架和平台,它们的结合可以帮助开发者更快速、更方便地构建和部署分布式系统。通过使用这些工具和组件,开发者可以专注于业务逻辑的开发和实现,而无需过多关注系统的复杂性和细节。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值