当前位置: 首页 > article >正文

架构-微服务-环境搭建

文章目录

  • 前言
  • 一、案例准备
    • 1. 技术选型
    • 2. 模块设计
    • 3. 微服务调用
  • 二、创建父工程
  • 三、创建基础模块
  • 四、创建用户微服务
  • 五、创建商品微服务
  • 六、创建订单微服务


前言

‌微服务环境搭建

  使用的电商项目中的商品、订单、用户为案例进行讲解。


一、案例准备

1. 技术选型

maven:3.3.9
数据库:MySQL 5.7
持久层: SpingData Jpa
其他: SpringCloud Alibaba 技术栈

2. 模块设计

springcloud-alibaba 父工程
shop-common 公共模块【实体类】
shop-user 用户微服务 【端口: 807x】
shop-product 商品微服务 【端口: 808x】
shop-order 订单微服务 【端口: 809x】

案例

3. 微服务调用

  在微服务架构中,最常见的场景就是微服务之间的相互调用。我们以电商系统中常见的用户下单为例来演示微服务的调用:客户向订单微服务发起一个下单的请求,在进行保存订单之前需要调用商品微服务查询商品的信息。

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

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

二、创建父工程

<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">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.3.RELEASE</version>
	</parent>
	
	<groupId>com.itheima</groupId>
	<artifactId>springcloud-alibaba</artifactId>
	<version>1.0-SNAPSHOT</version>
	<packaging>pom</packaging>
	
	<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>Greenwich.RELEASE</spring-cloud.version>
		<spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloudalibaba.version>
	</properties>
	
	<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>
			<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>
</project>

版本对应

Spring Cloud版本

三、创建基础模块

  1. 创建 shop-common 模块,在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>springcloud-alibaba</artifactId>
		<groupId>com.itheima</groupId>
		<version>1.0-SNAPSHOT</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	
	<artifactId>shop-common</artifactId>
	
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.56</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.6</version>
		</dependency>
	</dependencies>
</project>
  1. 创建实体类
//用户
@Entity(name = "shop_user")
@Data
public class User {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer uid;//主键
	private String username;//用户名
	private String password;//密码
	private String telephone;//手机号
}
//商品
@Entity(name = "shop_product")
@Data
public class Product {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer pid;//主键
	private String pname;//商品名称
	private Double pprice;//商品价格
	private Integer stock;//库存
}
//订单
@Entity(name = "shop_order")
@Data
public class Order {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long oid;//订单id
	private Integer uid;//用户id
	private String username;//用户名
	private Integer pid;//商品id
	private String pname;//商品名称
	private Double pprice;//商品单价
	private Integer number;//购买数量
}

四、创建用户微服务

步骤:
1 创建模块 导入依赖
2 创建SpringBoot主类
3 加入配置文件
4 创建必要的接口和实现类(controller service dao)

新建一个 shop-user 模块,然后进行下面操作

  1. 创建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>springcloud-alibaba</artifactId>
		<groupId>com.itheima</groupId>
		<version>1.0-SNAPSHOT</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	
	<artifactId>shop-user</artifactId>
	
	<dependencies>
		<dependency>
			<groupId>com.itheima</groupId>
			<artifactId>shop-common</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
	</dependencies>
</project>
  1. 编写主类
@SpringBootApplication
@EnableDiscoveryClient
public class UserApplication {
	public static void main(String[] args) {
		SpringApplication.run(UserApplication.class, args);
	}
}
  1. 创建配置文件
server:
	port: 8071

spring:
	application:
		name: service-product
	datasource:
		driver-class-name: com.mysql.jdbc.Driver
		url: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
		username: root
		password: root
	jpa:
		properties:
			hibernate:
				hbm2ddl:
					auto: update
				dialect: org.hibernate.dialect.MySQL5InnoDBDialect

五、创建商品微服务

  1. 创建一个名为 shop_product 的模块,并添加springboot依赖
<?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>springcloud-alibaba</artifactId>
		<groupId>com.itheima</groupId>
		<version>1.0-SNAPSHOT</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	
	<artifactId>shop-product</artifactId>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>com.itheima</groupId>
			<artifactId>shop-common</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
	</dependencies>
</project>
  1. 创建工程的主类
package com.itheima;

@SpringBootApplication
public class ProductApplication {
	public static void main(String[] args) {
		SpringApplication.run(ProductApplication.class, args);
	}
}
  1. 创建配置文件application.yml
server:
	port: 8081

spring:
	application:
		name: service-product
	datasource:
		driver-class-name: com.mysql.jdbc.Driver
		url: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
		username: root
		password: root
	jpa:
		properties:
			hibernate:
				hbm2ddl:
					auto: update
				dialect: org.hibernate.dialect.MySQL5InnoDBDialect
  1. 创建ProductDao接口
package com.itheima.dao;

public interface ProductDao extends JpaRepository<Product,Integer> {
}
  1. 创建ProductService接口和实现类
package com.itheima.service.impl;

@Service
public class ProductServiceImpl implements ProductService {
	@Autowired
	private ProductDao productDao;
	
	@Override
	public Product findByPid(Integer pid) {
		return productDao.findById(pid).get();
	}
}
  1. 创建Controller
@RestController
@Slf4j
public class ProductController {
	@Autowired
	private ProductService productService;
	
	@GetMapping("/product/{pid}")
	public Product product(@PathVariable("pid") Integer pid) {
		Product product = productService.findByPid(pid);
		log.info("查询到商品:" + JSON.toJSONString(product));
		return product;
}
}
  1. 启动工程,等到数据库表创建完毕之后,加入测试数据
INSERT INTO shop_product VALUE(NULL,'小米','1000','5000');
INSERT INTO shop_product VALUE(NULL,'华为','2000','5000');
INSERT INTO shop_product VALUE(NULL,'苹果','3000','5000');
INSERT INTO shop_product VALUE(NULL,'OPPO','4000','5000');
  1. 通过浏览器访问服务
    浏览器访问服务

六、创建订单微服务

  1. 创建一个名为 shop-order 的模块,并添加springboot依赖
<?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>springcloud-alibaba</artifactId>
		<groupId>com.itheima</groupId>
		<version>1.0-SNAPSHOT</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	
	<artifactId>shop-order</artifactId>
	
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>com.itheima</groupId>
			<artifactId>shop-common</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
	</dependencies>
</project>
  1. 创建工程的主类
package com.itheima;

@SpringBootApplication
public class OrderApplication {
	public static void main(String[] args) {
		SpringApplication.run(OrderApplication.class, args);
	}
}
  1. 创建配置文件application.yml
server:
	port: 8091
spring:
	application:
		name: service-product
	datasource:
		driver-class-name: com.mysql.jdbc.Driver
		url: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
		username: root
		password: root
	jpa:
		properties:
			hibernate:
				hbm2ddl:
					auto: update
				dialect: org.hibernate.dialect.MySQL5InnoDBDialect
  1. 创建OrderDao接口
package com.itheima.dao;

public interface OrderDao extends JpaRepository<Order,Long> {
}
  1. 创建OrderService接口和实现类
@Service
public class OrderServiceImpl implements OrderService {
	@Autowired
	private OrderDao orderDao;
	
	@Override
	public void save(Order order) {
		orderDao.save(order);
	}
}
  1. 创建RestTemplate
@SpringBootApplication
public class OrderApplication {
	public static void main(String[] args) {
		SpringApplication.run(OrderApplication.class, args);
	}
	
	@Bean
	public RestTemplate getRestTemplate() {
		return new RestTemplate();
	}
}
  1. 创建Controller
package com.itheima.controller;

@RestController
@Slf4j
public class OrderController {

@Autowired
private RestTemplate restTemplate;

@Autowired
private OrderService orderService;

//准备买1件商品
@GetMapping("/order/prod/{pid}")
public Order order(@PathVariable("pid") Integer pid) {
	log.info(">>客户下单,这时候要调用商品微服务查询商品信息");
	
	//通过restTemplate调用商品微服务
	Product product = restTemplate.getForObject("http://localhost:8081/product/" + pid, Product.class);
	log.info(">>商品信息,查询结果:" + JSON.toJSONString(product));
	
	Order order = new Order();
	order.setUid(1);
	order.setUsername("测试用户");
	order.setPid(product.getPid());
	order.setPname(product.getPname());
	order.setPprice(product.getPprice());
	order.setNumber(1);
	
	orderService.save(order);
	
	return order;
	}
}
  1. 启动工程,通过浏览器访问服务进行测试
    浏览器访问服务

本文的引用仅限自我学习如有侵权,请联系作者删除。
参考知识
传智教育·黑马程序员



http://www.kler.cn/a/414516.html

相关文章:

  • C语言:深入理解指针
  • Linux系统管理基础指南--习题
  • (长期更新)《零基础入门 ArcGIS(ArcMap) 》实验二----网络分析(超超超详细!!!)
  • matlab 实现混沌麻雀搜索算法的光伏MPPT控制仿真
  • 28.UE5实现对话系统
  • R虚拟环境中安装ncdf4库包编译库问题
  • ubuntu连接副屏显示器不量的一系列踩坑记录
  • 【PGCCC】Postgresql BRIN 索引原理
  • Jenkins Nginx Vue项目自动化部署
  • faiss库中ivf-sq(ScalarQuantizer,标量量化)代码解读-2
  • 淘宝关键词挖掘:Python爬虫技术在电商领域的应用
  • 虚拟现实(VR)与增强现实(AR)有什么区别?
  • 【k8s深入理解之 Scheme 补充-6】理解资源外部版本之间的优先级
  • TypeScript中function和const定义函数的区别
  • java 排序 详解
  • 【Unity基础】初识Unity中的渲染管线
  • 中科亿海微SoM模组——波控处理软硬一体解决方案
  • HarmonyOS 5.0应用开发——装饰器的使用
  • NAT:连接私有与公共网络的关键技术(4/10)
  • NLP任务四大范式的进阶历程:从传统TF-IDF到Prompt-Tuning(提示词微调)
  • C++《二叉搜索树》
  • Vue3.0性能提升主要是通过哪几方面体现的?通过编译阶段、源码体积、响应式系统等进行讲解!
  • 什么是串联谐振
  • 【动态规划入门】【1.2打家劫舍问题】【从记忆化搜索到递推】【灵神题单】【刷题笔记】
  • 【新人系列】Python 入门(十四):文件操作
  • 【微服务】消息队列与微服务之微服务详解