【微服务】-微服务环境搭建

news2024/10/3 8:24:27

目录

2.1 技术选型

2.2 模块设计

2.3 微服务调用

2.4 创建⽗⼯程

2.5 创建商品微服务

2.6 创建订单微服务


 

2.1 技术选型

持久层 : SpingData Jpa
数据库 : MySQL5.7
其他 : SpringCloud Alibaba 技术栈

2.2 模块设计

--- shop-parent ⽗⼯程
--- shop-product-api 商品微服务 api 【存放商品实体】
--- shop-product-server 商品微服务 【端⼝:8081
--- shop-order-api 订单微服务 api 【存放订单实体】
--- shop-order-server 订单微服务 【端⼝:8091

2.3 微服务调用

在微服务架构中,最常⻅的场景就是微服务之间的相互调⽤。我们以电商系统中常⻅的 ⽤户下单
例来演示微服务的调⽤:客户向订单微服务发起⼀个下单的请求,在进⾏保存订单之前需要调⽤商品微服务查询商品的信息。
我们⼀般把服务的主动调⽤⽅称为 服务消费者 ,把服务的被调⽤⽅称为 服务提供者

 

2.4 创建⽗⼯程

        创建⼀个maven ⼯程,然后在 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">
 <modelVersion>4.0.0</modelVersion>
 <groupId>cn.wolfcode</groupId>
 <artifactId>shop-parent</artifactId>
 <version>1.0.0</version>
 <packaging>pom</packaging>
 <!--⽗⼯程-->
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.3.2.RELEASE</version>
 </parent>
 <!--依赖版本的锁定-->
 <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-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>

2.5 创建商品微服务

        1.创建 shop-product-api 项⽬,然后在 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>shop-parent</artifactId>
 <groupId>cn.wolfcode</groupId>
 <version>1.0.0</version>
 </parent>
 <modelVersion>4.0.0</modelVersion>
 <artifactId>shop-product-api</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>
 </dependencies>
</project>
2 创建实体类
//商品
@Entity(name = "t_shop_product")
@Data
public class Product {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long pid;//主键
 private String pname;//商品名称
 private Double pprice;//商品价格
 private Integer stock;//库存
}
3. 创建 shop-product-server 项⽬,然后在 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>shop-parent</artifactId>
 <groupId>cn.wolfcode</groupId>
 <version>1.0.0</version>
 </parent>
 <modelVersion>4.0.0</modelVersion>
 <artifactId>shop-product-server</artifactId>
 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 </dependency>
 <dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>fastjson</artifactId>
 <version>1.2.56</version>
 </dependency>
 <dependency>
 <groupId>cn.wolfcode</groupId>
 <artifactId>shop-product-api</artifactId>
 <version>1.0.0</version>
 </dependency>
 </dependencies>
</project>
4. 编写启动类 ProductServer.java

@SpringBootApplication
public class ProductServer {
 public static void main(String[] args) {
 SpringApplication.run(ProductServer.class,args);
 }
}
5. 编写配置⽂件 application.yml
server :
        port : 8081
spring :
        application :
                name : product-service
        datasource :
                driver-class-name : com.mysql.jdbc.Driver
                url : jdbc : mysql : ///shop-product?
serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
                username : root
                password : admin
        jpa :
                properties :
                        hibernate :
                                hbm2ddl :
                                        auto : update
                                        dialect : org.hibernate.dialect.MySQL5InnoDBDialect
6. 在数据库中创建 shop-product 的数据库

7. 创建 ProductDao
public interface ProductDao extends JpaRepository<Product, Long> {
}
8. 创建 ProductService 接⼝和实现类
@Service
public class ProductServiceImpl implements ProductService {
 @Autowired
 private ProductDao productDao;
 @Override
 public Product findByPid(Long pid) {
 return productDao.findById(pid).get();
 }
}
9. 创建 Controller
@RestController
@Slf4j
public class ProductController {
 @Autowired
 private ProductService productService;
 //商品信息查询
 @RequestMapping("/product/{pid}")
 public Product findByPid(@PathVariable("pid") Long pid) {
 log.info("接下来要进⾏{}号商品信息的查询", pid);
 Product product = productService.findByPid(pid);
 log.info("商品信息查询成功,内容为{}", JSON.toJSONString(product));
 return product;
 }
}
10. 启动⼯程,等到数据库表创建完毕之后,加⼊测试数据
INSERT INTO t_shop_product VALUE( NULL , ' ⼩⽶ ' , '1000' , '5000' );
INSERT INTO t_shop_product VALUE( NULL , ' 华为 ' , '2000' , '5000' );
INSERT INTO t_shop_product VALUE( NULL , ' 苹果 ' , '3000' , '5000' );
INSERT INTO t_shop_product VALUE( NULL , 'OPPO' , '4000' , '5000' );

11.通过浏览器访问服务

 

2.6 创建订单微服务

1. 创建 shop-order-api 项⽬,然后在 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>shop-parent</artifactId>
 <groupId>cn.wolfcode</groupId>
 <version>1.0.0</version>
 </parent>
 <modelVersion>4.0.0</modelVersion>
 <artifactId>shop-order-api</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>
 </dependencies>
</project>
2 创建实体类
//订单
@Entity(name = "t_shop_order")
@Data
public class Order {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long oid;//订单id
 //⽤户
 private Long uid;//⽤户id
 private String username;//⽤户名
 //商品
 private Long pid;//商品id
 private String pname;//商品名称
 private Double pprice;//商品单价
 //数量
 private Integer number;//购买数量
}
3. 创建 shop-order-server 项⽬,然后在 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>shop-parent</artifactId>
 <groupId>cn.wolfcode</groupId>
 <version>1.0.0</version>
 </parent>
 <modelVersion>4.0.0</modelVersion>
 <artifactId>shop-order-server</artifactId>
 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 </dependency>
 <dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>fastjson</artifactId>
 <version>1.2.56</version>
 </dependency>
 <dependency>
 <groupId>cn.wolfcode</groupId>
 <artifactId>shop-order-api</artifactId>
 <version>1.0.0</version>
 </dependency>
 </dependencies>
</project>
4. 编写启动类 OrderServer.java
@SpringBootApplication
public class OrderServer {
 public static void main(String[] args) {
 SpringApplication.run(OrderServer.class,args);
 }
}
5. 编写配置⽂件 application.yml
server :
        port : 8091
spring :
        application :
                name : order-service
        datasource :
                driver-class-name : com.mysql.jdbc.Driver
                url : jdbc : mysql : ///shop-order? serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
                username : root
                password : admin
        jpa :
                properties :
                        hibernate :
                                hbm2ddl :
                                        auto : update
                                        dialect : org.hibernate.dialect.MySQL5InnoDBDialect

6.在数据库中创建shop-order的数据库 

7. 创建 OrderDao
public interface OrderDao extends JpaRepository<Order, Long> {
}
8. 创建 OrderService 接⼝和实现类
@Service
@Slf4j
public class OrderServiceImpl implements OrderService {
 @Autowired
 private OrderDao orderDao;
 @Override
 public Order createOrder(Long productId,Long userId) {
 log.info("接收到{}号商品的下单请求,接下来调⽤商品微服务查询此商品信息",
productId);
 //远程调⽤商品微服务,查询商品信息
 Product product = null;
 log.info("查询到{}号商品的信息,内容是:{}", productId,
JSON.toJSONString(product));
 //创建订单并保存
 Order order = new Order();
 order.setUid(userId);
 order.setUsername("叩丁狼教育");
 order.setPid(productId);
 order.setPname(product.getPname());
 order.setPprice(product.getPprice());
 order.setNumber(1);
 orderDao.save(order);
 log.info("创建订单成功,订单信息为{}", JSON.toJSONString(order));
 return order;
 }
}
9. 创建 Controller
@RestController
@Slf4j
public class OrderController {
 @Autowired
 private OrderService orderService;
 @RequestMapping("/save")
 public Order order(Long pid,Long uid) {
 return orderService.createOrder(pid,uid);
 }
}

10.直接往数据库中添加几条数据,启动项目进行调用即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/380069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

go提高升阶(四) I/O流学习

I/O 官网课程 购买课程找博主推荐 文章目录I/O文件信息创建文件、目录IO读IO写(权限)文件复制Seeker接口断点续传遍历文件夹bufio电脑中一切&#xff0c;都是以 二进制流的形式存在的。jpg&#xff1a;010100000010010101001010101010010101010 编码格式&#xff0c;还原为一个…

(02)Unity HDRP Volume 详解

1.概述这篇文章主要针对HDRP中的Volume和Volume Post-processing进行解释&#xff0c;针对于各个组件只能进行部分参数的解释&#xff0c;具体的信息可参考官方资料&#xff0c;这里只是对官方文档的图片效果补充以及笔者自己的理解。看到这里进入正文&#xff0c;请确保你的Un…

企业IT信息化,BI 能做什么?

随着数字化相关技术、应用的发展&#xff0c;社会总体的数字化发展进入了加速阶段&#xff0c;各行各业都开始有了数字化的身影&#xff0c;在这种情况下&#xff0c;数据已经成为了越来越多企业的重要资产&#xff0c;所以如何处理数据&#xff0c;让数据从资产转化为实际的价…

【Linux】理解文件系统

文章目录理解文件系统了解磁盘结构inode理解文件系统 了解磁盘结构 磁盘是计算机中的一个 机械设备 这个磁盘的盘片就像光盘一样,数据就在盘片上放着, 但是光盘是只读的,磁盘是可读可写的 机械硬盘的寻址的工作方式: 盘片不断旋转,磁头不断摆动,定位到特定的位置 我们可以把…

代码随想录算法训练营day46 | 动态规划之背包问题 139.单词拆分

day46139.单词拆分1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp[i]139.单词拆分 题目链接 解题思路&#xff1a;单词就是物品&#xff0c;字符串s就是背包&#xff0c;单词能否组成字符串s&#xff0c;就是问物品能不能把背包装满。…

NJ+SCU42做Modbus RTU从站

NJSCU42做Modbus RTU从站实验时间&#xff1a;2023.2.28 硬件设备&#xff1a;NJ501-1300&#xff0c;CJ1W-SCU42 软件&#xff1a;Sysmac Studio&#xff0c;Commix串口调试助手 案例简介&#xff1a;发送Modbus RTU命令读取NJ里的数据 1. 系统概述 264 ​ 本次实验使用C…

「TCG 规范解读」PC 平台相关规范(4)

可信计算组织&#xff08;Ttrusted Computing Group,TCG&#xff09;是一个非盈利的工业标准组织&#xff0c;它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立&#xff0c;并采纳了由可信计算平台联盟&#xff08;the Trusted Computing Platform Alli…

3种方法找回命令提示符删除的文件

“电脑D盘有个文件没有权限删除&#xff0c;后面我使用cmd命令去强制删除&#xff0c;结果确认删除后盘中的其他文件没了&#xff0c;其中有我重要word文档&#xff0c;有什么办法恢复吗&#xff1f;求助大神&#xff01;”——来自某某小伙伴的咨询文件丢失是一个不可预测但又…

RK3288-android8-es7210-阵列麦克风

ES7210驱动包 应需求调试一个ES7210的阵列麦克风 首先移植 From 234647c69a57c32198c65836e7fc521dc22e444b Mon Sep 17 00:00:00 2001 From: LuoXiaoTan <lxt@rock-chips.com> Date: Tue, 10 Jul 2018 18:08:50 -0700 Subject: [PATCH] ASoC: codecs: add es7210 adc …

linux下多线程调试,以及一些常用工具总结(pstack/pstree/stress/perf)

一、多线程调试使用gdb查看线程信息。&#xff08;1&#xff09;获取主线程id&#xff1a;ps -aux | grep 进程名称&#xff0c;例如&#xff1a;&#xff08;2&#xff09;查看线程信息&#xff1a;gdb attach 线程id&#xff0c;例如1和3表示进程启动运行依赖的库的信息&…

2023王道考研数据结构笔记第二章线性表

第二章 线性表 2.1 线性表的定义 2.1.1 线性表的基本概念 线性表是具有相同数据类型的n(n>0)个数据元素的有限序列&#xff0c;其中n为表长&#xff0c;当n0时线性表是一个空表。若用L命名线性表&#xff0c;则其一般表示为&#xff1a; L(a1,a2,...,ai,ai1,...,an)L(a_1…

泛微e-cology9 <0.56 存在sql注入漏洞

漏洞描述 泛微e-cology9 是一个 OA 系统。 泛微e-cology9 10.56 之前版本存在 sql 注入漏洞&#xff0c;攻击者可利用该漏洞读取或修改数据库中的敏感信息&#xff0c;进而操控管理系统。 漏洞名称泛微e-cology9 <0.56 存在sql注入漏洞漏洞类型SQL注入发现时间2023/2/23漏…

论文阅读-DISTILLING KNOWLEDGE FROM READER TORETRIEVER FOR QUESTION ANSWERING

论文链接&#xff1a;https://arxiv.org/pdf/2012.04584.pdf 目录 方法 交叉注意机制 交叉注意力得分作为段落检索的相关性度量 用于段落检索的密集双编码器 将交叉注意力分数提取到双编码器 数据集 方法 我们的系统由两个模块组成&#xff0c;即检索器和阅读器&#xf…

文献阅读 Image-to-Image Translation with Conditional Adversarial Networks

前言 本文中所使用的cGAN模型为上篇论文的main idea&#xff0c;这里再进行一下相关介绍。 题目 Image-to-Image Translation with Conditional Adversarial Networks 使用条件对抗网络实现图片到图片的翻译 摘要 我们研究了条件对抗网络作为图像到图像翻译问题的通用方案。…

【C++】inline 内联函数

文章目录&#x1f4d5; 概念&#x1f4d5; 使用前的准备&#x1f4d5; 使用&#x1f4d5; 特性&#x1f4d5; 概念 在 C 中&#xff0c;为了解决一些频繁调用的小函数大量消耗栈空间&#xff08;栈内存&#xff09;的问题&#xff0c;特别的引入了 inline 修饰符&#xff0c;表…

你需要同款“Unreal项目自动化编译、打包和部署”方案吗?

在过往几期的UWA Pipeline最佳实践案例中&#xff0c;我们分享了如何通过Pipeline实现性能优化、性能管理、游戏内容验收和云真机系统的应用&#xff08;实现批量真机设备的自动化测试&#xff0c;以及针对特效性能优化的方式&#xff09;&#xff0c;其实这些高效的方法并不局…

改进 YOLO V5 的密集行人检测算法研究(论文研读)——目标检测

改进 YOLO V5 的密集行人检测算法研究&#xff08;2021.08&#xff09;摘 要&#xff1a;1 YOLO V52 SENet 通道注意力机制3 改进的 YOLO V5 模型3.1 训练数据处理改进3.2 YOLO V5 网络改进3.3 损失函数改进3.3.1 使用 CIoU3.3.2 非极大值抑制改进4 研究方案与结果分析4.1 实验…

碰撞高校智慧,凝聚青春力量 | 因“AI”而“深”-高校开源专场顺利举办!

为聚焦AI新发展&#xff0c;探寻开源新环境&#xff0c;聆听高校声音&#xff0c;2月25日上午&#xff0c;第四届OpenI/O启智开发者大会以“因AI而深”为主题在深圳人才研修院举办高校开源专场&#xff0c;共同交流高校优质开源项目的发展经验、社区优秀开发者的心路历程及高校…

ROS2功能包Hello world(python)

文章目录环境准备Python创建工作空间、功能包及节点方法编译使用环境准备 为了便于日后复现&#xff0c;相关环境已经打包到docker中。 拉取docker镜像 docker pull 1224425503/ros2_foxy_full:latest新建容器 docker run -dit --rm --privilegedtrue --network host -e NV…

cnpm adduser 报错 409 Conflict

今天遇到一个问题&#xff0c;cnpm adduser 一直失败&#xff0c;返回 409 Conflict。 我们先来看下报错信息 409 Conflict - PUT http://registry.cnpm.xxxx.com.cn/-/user/org.couchdb.user:mingyu6 - conflict第一步 分析 http 错误码 409 Conflict&#xff1a;请求与服务…