200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > SpringCloud微服务架构搭建

SpringCloud微服务架构搭建

时间:2023-01-12 10:22:38

相关推荐

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.技术选型

maven:3.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.微服务调用

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

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

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

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

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

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

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><!--版本不要选择太高的版本--><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.lzl</groupId><artifactId>springcloud-alibaba</artifactId><version>0.0.1-SNAPSHOT</version><properties><java.version>1.8</java.version><!--定义版本号--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF- 8</project.reporting.outputEncoding><spring-cloud.version>Hoxton.SR8</spring-cloud.version><spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version></properties><!--dependencyManagement:它只负责jar的版本号管理,不负责jar的下载,交于子模块,子模块在使用时无需指定版本号:springboot springcloud springcloudalibaba之间版本一定要匹配--><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--springcloudalibaba的版本管理--><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></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

版本对应:

5.创建基础模块

1.创建shop-common模块,

1.在pom.xml中添加依赖

maven工程

<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies>

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; //订单idprivate Integer uid;//用户idprivate String username;//用户名private Integer pid;//商品idprivate String pname;//商品名称private Double pprice;//商品价格private Integer number;//购买数量}

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

1.添加依赖

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud-alibaba</artifactId><groupId>com.lzl</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloud-product</artifactId><properties><piler.source>8</piler.source><piler.target>8</piler.target></properties><dependencies><!--引入公共模块--><dependency><groupId>com.lzl</groupId><artifactId>shop-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>

2.创建配置文件application.yml

#为了后期拓展方便商品微服务的端口设置为8080-8089之间server.port=8081#数据源spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/springclooud?serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.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 -08-18*/@Mapperpublic interface ProductMapper extends BaseMapper<Product> {}

4.创建ProductService接口

package com.lzl.service;import com.lzl.entity.Product;/*** @create -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 -08-18*/@Servicepublic class ProductServiceImpl implements ProductService {@Autowiredprivate ProductMapper productMapper;@Overridepublic 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 -08-19*/@RestController@RequestMapping("product")public class ProductController {@Autowiredprivate 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;@SpringBootApplicationpublic class ShopProductApplication {public static void main(String[] args) {SpringApplication.run(ShopProductApplication.class, args);}}

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

1.添加依赖

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud-alibaba</artifactId><groupId>com.lzl</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloud-order</artifactId><properties><piler.source>8</piler.source><piler.target>8</piler.target></properties><dependencies><dependency><groupId>com.lzl</groupId><artifactId>shop-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>

2.创建配置文件application.yml

#为了后期拓展方便订单微服务的端口设置为8090-8099之间server.port=8091#数据源spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/springclooud?serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=lzl200038mybatis-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 -08-18*/@Mapperpublic interface OrderMapper extends BaseMapper<Order> {}

4.创建OrderService接口

package com.lzl.service;import com.lzl.entity.Order;/*** @create -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 -08-18*/@Servicepublic class OrderServiceImpl implements OrderService {@Autowiredprivate OrderMapper orderMapper;@Overridepublic 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 -08-19*/@RestController@RequestMapping("order")public class OrderController {@Autowiredprivate OrderService orderService;//该类默认没有交于spring管理 在启动类上添加 一个 交于spring管理//@Bean// public RestTemplate restTemplate(){// return new RestTemplate();// }@Autowiredprivate 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 -08-19*/@SpringBootApplicationpublic class OrderApp {public static void main(String[] args) {SpringApplication.run(OrderApp.class,args);}@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。