SpringBoot+Maven+Nacos搭建微服务应用

1、创建微服务应用

理解:和创建多模块应用一样,只不过此处的各种方法不再是通过“类库”进行调用,而是通过服务(controller或service)

(1)按上图创建多模块项目(这块还没有深入理解,理论上应该不用这样创建,特别是对于一些公共的服务封装);

(2)serviceProvider为服务提供者,serviceCustomers为服务使用者

(3)主框架pom.xml如下(要特别注意版本的匹配,即:spring-boot和cloud-alibaba的匹配。各版本的匹配官网地址是:版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub):

<dependencyManagement>
    <dependencies>
        <!--Spring boot 依赖(定义了微服务规范)-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.3.2.RELEASE</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
        <!--Spring Cloud 依赖(定义了微服务规范)-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR9</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
        <!--Spring Cloud Alibaba依赖(基于spring微服务规范做了具体落地实现)-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.6.RELEASE</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

serviceProvider和serviceCustomers的pom.xml继承了框架pom.xml内容,故:引入新增所需dependency就行,如下:

<dependencies>
    <!--Web服务-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--服务的注册和发现(我们要将服务注册到nacos)-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

(4)创建和配置serviceProvider

在src/main/resources/下创建application.yml配置文件,配置内容为(server-addr可以是localhost或127.0.0.1):

server:
  port: 8081
spring:
  application:
    name: serviceProvider
  cloud:
    nacos:
      discovery:
        server-addr: 10.190.129.25:8848

创建一个controller,写好一个对外发布的服务(即:RequestMapping)

(5)启动Nacos(怎么启动和配置,见上一篇内容),运行APP,正常运行后,应该可以看到Nacos已经成功注册服务:

如成功看到上图结果,那么就表示服务已经注册成功,可以被其它应用调用。

(6)从serviceCustomers中对服务进行调用

此处,使用了RestTemplate对服务进行请求,并返回结果。可以理解是一个封装了的工具类。详细细节:RestTemplate 用法详解_lzcWHUT的博客-CSDN博客_resttemplate

微服务的优点:

(1)项目与项目之间(modul之间)可以完全没有依赖关系,通过nacos进行服务管理。极大程度实现了各模块之间的最低耦合(这一点前后端分离后也可以实现);

(2)每一个项目都可以在nacos注册为服务提供者,供其他项目调用。那么,所有的部门、用户、角色,都可以通过调用主工程的controller实现。且由于是通过服务调用(不是引用jar的形式),主工程可以发布在任意服务器,子工程也可以发布在任意服务器,并实现调用(需要用到Feign,和跨域请求非常类似)。这与多模块程序不同的地方在于无需引用jar包,无需创建实例,直接调用服务(这一点通过分布式数据库+前后端分离也可以实现)。这样的好处在于:服务提供者更新后,子工程无需重启(一般情况下,MIS系统的服务提供者主要提供数据库的CRUD,返回的都是字符串,所以只要方法参数、名称不改变,服务调用者就不需要重新发布程序);

(3)方便配置策略均衡(这一点通过负载均衡也可以实现,但在Nacos这里容易配置一点,目前没有发现更进一步的优势)

在之前的serviceCustomers中,增加红下划线代码,即可从Nacos中获取压力较小(访问量较少)的服务

本地多实例启动,在IDEA中从如下接口进行配置:

配置完毕后,先运行一次serviceProvider,然后修改serviceProvider/src/resouces/application.yml中的port,再运行一次,如果要继续多运行,可多次修改port端口后运行,这样,在Nacos管理平台中可以看到注册了同名的多个服务实例,如下:

点击详情可看到:

运行serviceCustomers,可以看到每次刷新都会从实例中选择压力最小的一个。即下面这行代码其的作用:

这在并发过高时,可以将接口发布至多台服务器,并通过前端调用进行负载分配,有利于快速实现负载均衡。在VS中,也可以通过全局变量自己写策略满足上述应用需求,此处通过ServiceInstance方便了许多。ServiceInstance类的详细介绍:服务实例(Service Instance)生命周期如何控制_weixin_30549657的博客-CSDN博客

上述几点优势也可通过即有技术进行解决,也许是理解尚未深入的原因。但微服务作为目前主流解决方案,一定存在其优势,特别是Nacos经过了多年双11的考验,在并发和性能方面应该有很多独具优势的地方。

官网主要介绍为(尚未深入了解):

Sentinel – 提供流控、服务降级、熔断能力,为系统提供防护。

Nacos – 负责服务注册与发现,还有分布式配置。

RocketMQ – 用于实现事件驱动模式、消息总线,已经整合了 SpringCloud Stream。

Seata – 用于实现分布式事务。

Dubbo RPC – 使用 RPC 进行服务调用。

其它博文理解:

Nacos是什么_wh柒八九的博客-CSDN博客_nacos

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,这是一个比较宏观的问题,需要分步骤进行讲解。我会尽可能地详细地回答你的问题。 首先,我需要确认一下你对这些技术的了解程度。你是否已经熟悉了这些技术的基本概念和用法? 如果你已经了解了这些技术,那么我们可以开始讲解如何搭建微服务项目。以下是搭建微服务项目的主要步骤: 1. 创建父工程 在Maven中创建一个父工程,用于管理子模块的依赖关系。我们可以在父工程中定义一些公共的依赖和插件,以便在子模块中进行复用。 2. 创建子模块 在父工程下创建多个子模块,每个子模块代表一个微服务。每个子模块可以有自己的依赖和配置文件,也可以有自己的数据库。 3. 配置Spring Cloud Alibaba 在每个子模块中引入Spring Cloud Alibaba的依赖,并进行相应的配置。Spring Cloud Alibaba提供了一系列的组件,包括服务注册与发现、配置管理、消息队列、分布式事务等,我们可以根据实际需要选择使用哪些组件。 4. 集成MyBatis 在每个子模块中引入MyBatis的依赖,并进行相应的配置。MyBatis是一个轻量级的ORM框架,可以方便地进行数据库操作。 5. 编写业务代码 在每个子模块中编写业务代码,包括控制器、服务、DAO等。在编写业务代码时,我们可以通过注解进行调用其他微服务的接口,实现微服务之间的调用。 6. 部署微服务 将每个子模块打包成jar包,并分别部署到不同的服务器上。在每个服务器上启动对应的微服务微服务之间就可以通过网络进行通信了。 以上是搭建微服务项目的主要步骤。当然,实际上还有很多细节需要注意,比如如何处理微服务之间的异常、如何进行负载均衡等等。但总的来说,搭建微服务项目的核心思想就是将一个大型的应用拆分成多个小型的服务,每个服务都有自己的职责,通过网络进行通信,最终共同完成整个应用的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值