SpringCloud微服务架构搭建

目录

1.技术选型

2.模块设置 

 3.微服务调用

 4.创建父工程(springcloud-alibaba )

版本对应:​编辑

 5.创建基础模块

1.创建shop-common模块,

1.在pom.xml中添加依赖

2.创建实体类

2.创建商品微服务 shop-product

1.添加依赖

2.创建配置文件application.yml

3.创建ProductDao接口

4.创建ProductService接口

5.创建ProductServiceImpl实现类

6.创建ProductController类

7.创建启动类 

3.创建订单微服务 shop-order

1.添加依赖

2.创建配置文件application.yml

3.创建OrderDao接口

4.创建OrderService接口

5.创建OrderServiceImpl实现类

6.创建OrderController类

7.创建启动类


1.技术选型

maven3.5.0+

数据库:MySQL 5.7 以上

持久层: Mybatis-plus 《Mybatis  Mapper Mybatis-plus》

其他: SpringCloud Alibaba 技术栈  druid

2.模块设置 

springcloud-alibaba 父工程 ----jar的版本管理  公共jar的引入

shop-common 公共模块【实体类】 《实体类,公共依赖,工具类。》

shop-product 商品微服务 【端口: 8080~8089  

shop-order 订单微服务 【端口: 8090~8099  

 3.微服务调用

在微服务架构中,最常见的场景就是微服务之间的相互调用。我们以电商系统中常见的用户下单

例来演示微服务的调用:客户向订单微服务发起一个下单的请求,在进行保存订单之前需要调用商品微服务查询商品的信息。

我们一般把服务的主动调用方称为服务消费者,把服务的被调用方称为服务提供者

SpringCloud微服务架构搭建_第1张图片 

在这种场景下,订单微服务就是一个服务消费者, 商品微服务就是一个服务提供者。 

 4.创建父工程(springcloud-alibaba

可以创建springboot工程,也可以使用maven工程,但spring工程里一些东西使用不到,这里使用的是springboot工程创建的父工程。然后在pom.xml文件中添加下面内容



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        
        2.3.12.RELEASE
         
    
    com.lzl
    springcloud-alibaba
    0.0.1-SNAPSHOT
    
        1.8
        
        UTF-8
        UTF- 8
        Hoxton.SR8
        2.2.3.RELEASE
    
    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${spring-cloud-alibaba.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


版本对应:SpringCloud微服务架构搭建_第2张图片

 5.创建基础模块

1.创建shop-common模块,

1.在pom.xml中添加依赖

maven工程


        
            org.projectlombok
            lombok
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.2
        
        
            mysql
            mysql-connector-java
        
    

2.创建实体类

package entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName(value="shop_product")
public class Product {
    @TableId(type= IdType.AUTO)
    private Integer pid;
    private String pname;//商品名称
    private Double pprice;//商品价格
    private Integer stock;//库存
}
package entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("shop_order")
public class Order {
    @TableId(type = IdType.AUTO)
    private Long oid; //订单id
    private Integer uid;//用户id
    private String username;//用户名
    private Integer pid;//商品id
    private String pname;//商品名称
    private Double pprice;//商品价格
    private Integer number;//购买数量
}

2.创建商品微服务 shop-product

1.添加依赖



    
        springcloud-alibaba
        com.lzl
        0.0.1-SNAPSHOT
    
    4.0.0

    springcloud-product

    
        8
        8
    
    
        
        
            com.lzl
            shop-common
            0.0.1-SNAPSHOT
        
        
            org.springframework.boot
            spring-boot-starter-web
        
    

2.创建配置文件application.yml

#为了后期拓展方便商品微服务的端口设置为8080-8089之间
server.port=8081
#数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springclooud?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=lzl200038

#sql日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

3.创建ProductDao接口

package com.lzl.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lzl.entity.Product;
import org.apache.ibatis.annotations.Mapper;

/**
 * @create 2022-08-18
 */
@Mapper
public interface ProductMapper extends BaseMapper {

}

4.创建ProductService接口

package com.lzl.service;


import com.lzl.entity.Product;

/**
 * @create 2022-08-18
 */
public interface ProductService {
    public Product findById(Integer pid);
}

5.创建ProductServiceImpl实现类

package com.lzl.service.impl;

import com.lzl.dao.ProductMapper;
import com.lzl.entity.Product;
import com.lzl.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @create 2022-08-18
 */
@Service
public class ProductServiceImpl implements ProductService {

    @Autowired
    private ProductMapper productMapper;
    @Override
    public Product findById(Integer pid) {
         return productMapper.selectById(pid);
    }
}

6.创建ProductController类

package com.lzl.controller;

import com.lzl.entity.Product;
import com.lzl.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @create 2022-08-19
 */
@RestController
@RequestMapping("product")
public class ProductController {
    @Autowired
    private ProductService productService;
    @GetMapping("getById/{pid}")
    public Product getById(@PathVariable Integer pid){
        return productService.findById(pid);
    }
}

7.创建启动类 

package com.lzl;

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

@SpringBootApplication
public class ShopProductApplication {

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

}

3.创建订单微服务 shop-order

1.添加依赖



    
        springcloud-alibaba
        com.lzl
        0.0.1-SNAPSHOT
    
    4.0.0

    springcloud-order

    
        8
        8
    
    
        
            com.lzl
            shop-common
            0.0.1-SNAPSHOT
        
        
            org.springframework.boot
            spring-boot-starter-web
        

    

2.创建配置文件application.yml

#为了后期拓展方便订单微服务的端口设置为8090-8099之间

server.port=8091
#数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springclooud?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=lzl200038


mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

3.创建OrderDao接口

package com.lzl.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lzl.entity.Order;
import org.apache.ibatis.annotations.Mapper;

/**
 * @create 2022-08-18
 */
@Mapper
public interface OrderMapper extends BaseMapper {
}

4.创建OrderService接口

package com.lzl.service;

import com.lzl.entity.Order;

/**
 * @create 2022-08-18
 */
public interface OrderService {
    public int save(Order order);
}

5.创建OrderServiceImpl实现类

package com.lzl.service.impl;

import com.lzl.dao.OrderMapper;
import com.lzl.entity.Order;
import com.lzl.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @create 2022-08-18
 */
@Service
public class OrderServiceImpl implements OrderService {
    @Autowired
    private OrderMapper orderMapper;
    @Override
    public int save(Order order) {
        return orderMapper.insert(order);

    }
}

6.创建OrderController类

package com.lzl.controller;

import com.lzl.entity.Order;
import com.lzl.entity.Product;
import com.lzl.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @create 2022-08-19
 */
@RestController
@RequestMapping("order")
public class OrderController {
    @Autowired
    private OrderService orderService;
    //该类默认没有交于spring管理 在启动类上添加 一个    交于spring管理
    //     @Bean
    //    public RestTemplate restTemplate(){
    //        return new  RestTemplate();
    //    }
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("buy/{pid}/{num}")
    public String buy(@PathVariable Integer pid,@PathVariable Integer num){
        System.out.println("购买开始===================================");
        Order order = new Order();
        order.setUid(1);
        order.setUsername("张三");
        order.setNumber(num);
        order.setPid(pid);
        //需要设置订单对象中商品的信息
        // 商品操作都在商品微服务---订单微服务远程调用商品微服务即可拿到商品信息。远程调用:http协议的restFul风格调用适合微服务, 基于TCP协议的RPC调用适合SOA分布式
        //一定采用的为http协议: (1)自己写代码完成http调用【httpclient】微信支付 ---适合调用第三方网址。 (2)spring提高了一个工具类RestTemplate,该类也是基于http协议完成的调用
        Product product = restTemplate.getForObject("http://localhost:8081/product/getById/" + pid, Product.class);
        System.out.println("远程查询商品的结果"+product);
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());
        orderService.save(order);
        return "下单成功";

    }
}

7.创建启动类

package com.lzl;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * @create 2022-08-19
 */
@SpringBootApplication
public class OrderApp {
    public static void main(String[] args) {
        SpringApplication.run(OrderApp.class,args);
    }
    @Bean
    public RestTemplate restTemplate(){
        return new  RestTemplate();
    }
}

你可能感兴趣的:(架构,spring,cloud,微服务)