微服务架构——笔记(1)

微服务架构------笔记(1)

文章来源B站视频

尚硅谷SpringCloud框架开发教程(SpringCloudAlibaba微服务分布式架构丨Spring Cloud)教程

own process 独立部署

(1.微服务架构零基础理论)

叙述

马丁福勒 架构模式,倡导将单一应用程序划分为一组小的服务,服务之间相互协调,互相配合。每个服务在其独立的进程中,服务间采用轻量级的通信机制相相互协作(HTTPrestfulapi),应用根据业务上下层。

背景

生活箱包、平板电脑、智能家电、笔记本、手机

基于分布式的微服务架构
本次笔记为 此次项目的记录,便于整理思路,仅供参考,笔者也将会让程序更加完善

内容包括:1.支付模块、2.消费者订单模块、支付微服务入驻Eureka、Eureka集群...

一、SpringCloud

NetFlix 分布式微服务架构的一站式架构,

1.服务注册--配置中心管理、服务调用--服务网关、

2.服务熔断--服务监控、负载均衡--全链路追踪、

3.服务降级--自动化构建部署、

4.服务消息队列--服务定时任务调度操作

上:SpringBoot2.X 版本 和SpringCloud H版本 19 年后必须2.0

下:SpringCould Alibaba

(2.从2.2.x和H版本开始)

二、环境

熟读官方文档,推荐

cloud hoxton.sr1 mysql 5.7

boot 2.2.2 release cloud alibaba 2.1.0 release

java java8 mavan 3.5

(3.关于Cloud各组件的停更)

2.1项目创建

工程名字设置,英文

2.2 环境更改

字符编码更改

注解激活

java8设置

文件过滤

2.3 父pom.xml

Maven使用dependencyManagement元素提供管理依赖版本号的方式,通常在组织或项目的最顶层父pom中看到此元素。

能让所有子项目引用一个依赖而不用列出版本号,Maven会沿着父子层向上找到有dependencyManagement元素项目,使用这个版本号,先用父类再用子类。

聚合统一更改,一处更改不需要处处声明

version、scope都取自父类

2.4 application.yml

javascript 复制代码
server:
  port: 8081

spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource  #当前数据源操作类型
    driver-class-name: org.gjt.mm.mysql.Driver                 #mysql驱动包
    url: jdbc:mysql://localhost:3306/db2023?useUnicode=true&&characterEncoding=utf-8&useSSL=false
    username: root
    password: tiger

mybatis:
  mapperLocations: classpath:mapper/*.xml
  type-aliases-package: com.liangstar.springcloud.entities   #所有Entity别名类所在包

2.5 spring启动类

java 复制代码
package com.liangstar.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

三、微服务架构编码构建

(4.微服务架构编码构建) 建module、改pom、写yml、主启动、业务类

以上在二、环境模块进行了:

1、项目的配置遵循(配置>环境>编码)、 版本、工程名字、utf-8、注解代替html文件、java8、环境

2、Rest微服务工程构建

3、技术架构:vue -- | json | -- controller - service - dao - mysql

CommonResult{200,success}

以下对程序业务类进行说明:

1.建表SQL、2.entities、3.dao、4.service、5.controller

3.1 数据库构建

sql 复制代码
create table 'payment'(
`id`bigint(20) not null auto_increment comment `id`,
`serial` varchar(200) default ``,
primary key(`id`)
)engint=innoDb auto_increment=1 default charset=utf8

3.2 创建entity

复制代码
@Data   :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Setter:注解在属性上;为属性提供 setting 方法
@Getter:注解在属性上;为属性提供 getting 方法
@Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
@NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
@AllArgsConstructor:注解在类上;为类提供一个全参的构造方法

序列化分布式部署用的到

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment implements Serializable {
    private Long id;
    private String serial;
}

封装、泛型

java 复制代码
public class CommonResult<T>{
    private Integer code;
    private String message;
    private T 	    data;
    public CommonResult(Integer code,String message){
        this.(code,message,null);
    }
}

3.3 创建dao

读操作写操作 接口

java 复制代码
@Mapper
public interface PaymentDao {

    public int create(Payment payment);

    public Payment getPaymentId(@Param("id") Long id);

}

3.4 创建mapper

resource 下装配置文件,写映射mapper.xml

写落地实现类

数据库插入成功返回1,大于0则成功,所以create类型为int,

命名不规范,做一个字段映射baseresultMap

PaymentMapper.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.liangstar.springcloud.dao.PaymentDao">
    <insert id="create" parameterType="Payment" useGeneratedKeys="true" keyProperty="id">
        insert into payment(serial) value (#{serial});
    </insert>
    <resultMap id="BaseResultMap" type="com.liangstar.springcloud.entities.Payment">
        <id column="id" property="id" jdbcType="BIGINT"/>
        <id column="serial" property="serial" jdbcType="VARCHAR"/>
    </resultMap>
    <select id="getPaymentId" parameterType="Long" resultMap="BaseResultMap">
        select * from payment where id = #{id};
    </select>
</mapper>

3.5 创建service

3.5.1 实现接口PaymentService
java 复制代码
public interface PaymentService {
    public int create(Payment payment);
    public Payment getPaymentId(@Param("id") Long id);
}
3.5.2 实现类PaymentServiceImpl

@AutoWirte是spring的

@Resource是java的也可以实现依赖注入

java 复制代码
@Service
public class PaymentServiceImpl implements PaymentService {
    @Resource
    private PaymentDao paymentDao;

    public int create(Payment payment){
        return paymentDao.create(payment);
    }

    public Payment getPaymentId(Long id)1{
        return paymentDao.getPaymentId(id);
    }
}

3.5 创建controller

调用类、转发类

注解重写

java 复制代码
@RestController
@Slf4j
public class PaymentController {
    @Resource
    private PaymentService paymentService;

    @PostMapping(value = "/payment/create")
    public CommonResult create(Payment payment){
        int result = paymentService.create(payment);
        log.info("********插入结果"+result);
        if(result > 0){
            return new CommonResult(200,"插入数据库成功",result);
        }else{
            return new CommonResult(444,"插入数据库失败",null);
        }
    }

    @GetMapping(value = "/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id){
       Payment payment = paymentService.getPaymentId(id);
        log.info("********查询结果"+payment);
        if(payment != null){
            return new CommonResult(200,"查询成功",payment);
        }else{
            return new CommonResult(444,"没有对应记录,查询Id"+id,null);
        }
    }
}

四、运行测试


五、热部署devtools

代码更改自动重启

4.1 add devtools 添加工具

粘贴至子pom.xml中

复制代码
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
 </dependency>

4.2 add plugin to pom.xml 添加插件

粘贴至父pom.xml中

复制代码
<build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <fork>true</fork>
          <addResources>true</addResources>
        </configuration>
      </plugin>
    </plugins>
 </build>

4.3 Enabling automatic build 自动构建

开启自动编译权限

4.4 update the value of 开启热注册

复制代码
热键 :ctrl + shift + alt + /


4.5 重启

随着代码的更改,开发者可以不重启项目就可更改部署代码。

注:开发阶段需要热部署,生产阶段则不需要!

相关推荐
Chan1610 小时前
【 SpringCloud | 微服务 MQ基础 】
java·spring·spring cloud·微服务·云原生·rabbitmq
颜颜yan_11 小时前
【HarmonyOS5】UIAbility组件生命周期详解:从创建到销毁的全景解析
架构·harmonyos·鸿蒙·鸿蒙系统
2201_7611990411 小时前
k8s4部署
云原生·容器·kubernetes
慌ZHANG12 小时前
云原生技术驱动 IT 架构现代化转型:企业实践与落地策略全解
云原生
西京刀客13 小时前
k8s热更新-subPath 不支持热更新
云原生·容器·kubernetes·configmap·subpath
打码人的日常分享14 小时前
智慧城市建设方案
大数据·架构·智慧城市·制造
鲁班大叔_00714 小时前
使用扣子与Dify的业务风险
架构·产品
hello早上好14 小时前
Spring不同类型的ApplicationContext的创建方式
java·后端·架构
Python智慧行囊15 小时前
Python 中 Django 中间件:原理、方法与实战应用
python·中间件·架构·django·开发
HyggeBest16 小时前
Mysql的数据存储结构
后端·架构