step04day01微服务架构

1.微服务简介

1.1概念

单体应用:基于idea/eclipse,maven等创建一个工程,然后基于SpringBoot,spring,mybatis框架进行整合,接下来再写一堆dao、mapper、service、controller,再加上一些的配置文件,有可能还会引入redis、elasticsearch、mq等其它项目的依赖,开发好之后再将项目打包成一个jar包/war包。其实质是一个体量较小的服务类型

微服务架构:微服务架构(MSA)的基础是将单个应用程序开发为一组小型独立服务,这些独立服务在自己的进程中运行,独立开发和部署。这些服务使用轻量级 API 通过明确定义的接口进行通信,并且相互独立,每项服务执行一项功能,可以针对各项服务进行更新、部署和扩展,以满足对应用程序特定功能的需求。

程序中的微服务,就是将各个业务系统的共性再进行抽取,做成独立的服务,如图所示:

 1.2 单个组件

说明:当个组件中有许多的字符接口链,而通过这些接口链,最终完成了整个服务的架构

同时也完成单个1组件的一些基本业务。

1.3SpringCloud 微服务解决方案

1.3.1Netflix 解决方案(了解)

对于微服务架构,几乎所有的大公司走的都是自研路线。例如,国内最初的典型代表最早都是基于阿里的Dubbo进行实现,后来国外的netflix公司将他们内部的微服务技术架构进行了开源,在互联网行业产生了很大的影响力,然后接着就被整合到了spring社区,变成了spring cloud项目。

其架构图如下:

 说明:在现阶段SpringCloud netflix公司的这套微服务解决方案,官方的很多组件,现在已经不提供维护了

1.3.2 Alibaba 解决方案(掌握)

概述:Spring Cloud Alibaba 是Spring Cloud的一个子项目,致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

核心组件分析
Spring Cloud Alibaba 默认提供了如下核心功能(先了解):

  • 服务限流降级:默认支持 WebServlet、OpenFeign、RestTemplate、Spring Cloud Gateway, RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
  • 服务注册与发现:基于Spring Cloud 服务注册与发现标准,借助Nacos进行实现,默认还集成了 Ribbon 的支持。
  • 分布式配置管理:基于Nacos支持分布式系统中的外部化配置,配置更改时自动刷新。
  • 消息驱动能力:基于Spring Cloud Stream 为微服务应用构建消息驱动能力。
  • 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。
  • 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker上执行。

解决方案架构设计
基于Spring Cloud Alibaba实现的微服务,解决方案设计架构如图所示:

2.SpringCloud环境编译

2.1项目创建

2.1.1 创将新项目,配置新仓库

settings--Bulid--maven--localrepositiory 再新建一个仓库,以免仓库重复

2.1.2.设置编译格式

编译配置:

 设置字符格式

 配置喜好设置

 2.1.3.项目结构

2.1.4 创建聚合父工程

1.创建工程,删除src

 2.添加核心依赖以及管理

<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>

3.进行nacos测试

3.nacos介绍

3.1简介及安装

Nacos(DynamicNaming and Configuration Service)是一个应用于服务注册与发现、配置管理的平台。它孵化于阿里巴巴,成长于十年双十一的洪峰考验,沉淀了简单易用、稳定可靠、性能卓越的核心竞争力。其官网地址如下:

https://nacos.io/zh-cn/docs/quick-start.html

构建Nacos服务

1.下载:https://github.com/alibaba/nacos/releases

2.选择版本 nacos-sercer-1.4.1 zip

3.解压直接使用

3.2初始化配置以及使用

1.找到/conf/nacos-mysql.sql文件里的sql脚本构建数据库:source  sql文件路径

2.打开/conf/application.properties,修改默认配置

### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

3.启动Nacos服务:startup.cmd -m standalone

4,访问Nacos服务:

打开浏览器,输入http://localhost:8848/nacos地址,出现如下登陆页面:

 其中,默认账号密码为nacos/nacos.

3.3生产者服务创建及注册

1.创建服务提供者工程(module名为sca-provider),继承parent工程(01-sca)

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">
    <parent>
        <artifactId>01-sca</artifactId>
        <groupId>com.cy.jt</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>sca-provider</artifactId>
    <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>
</project>

2.创建并修改配置文件application.yml(或者application.properties),实现服务注册

server:
   port: 8081
spring:
  application:
    name: sca-provider
  cloud:
    nacos:
      server-addr: localhost:8848

3.创建启动类,并定义处理请求的控制层对象和方法,

package com.cy;

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

@Value("${server.port}")
private String server;

@RestController
public class ProviderController {
        @GetMapping(value = "/provider/echo/{msg}")
        public String doEcho(@PathVariable String msg) {
            return server+"say:Hello Nacos Discovery " + msg;
        }
    }
}

4.启动启动类,然后刷先nacos服务,检测是否服务注册成功。

 3.4 消费者服务发现及调用

创建服务消费者(module名为sca-consumer),继承parent工程(01-sca)

<?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">
    <parent>
        <artifactId>01-sca</artifactId>
        <groupId>com.cy.jt</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>sca-consumer</artifactId>
    
   <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>
</project>

2.修改配置文件application.yml

server:
  port: 8090
spring:
  application:
    name: sca-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #从哪里去查找服务

3.创建启动类并实现服务消费

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

   @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

@RestController
public class ProviderConsumer {
    @Value("${spring.application.name}")
    private String appName;

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/consumer/doRestEcho1")
    public String doRestEcho01(){
        String url = "http://localhost:8081/provider/echo/"+appName;
        System.out.println("request url:"+url);
        return restTemplate.getForObject(url, String.class);
    }
 
}

4.启动消费者服务,并在浏览器输入http://localhost:8090/consumer/doRestEcho1,网页显示如图

总结:在nacos中启动对应的提供者服务和消费者服务,均会在nacos中启动一个健康实例,而通过nacos平台,我们可以方便的获取和管理这些容器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值