RestTemplate微服务项目

前言

因为要运用 Spring Cloud Alibaba 开源组件到分布式项目中,所以这里先搭建一个不通过 Spring Cloud只通过 RestTemplate 来让SpringBoot和Mybatis进行模块之间

通讯,之后会在此基础上再添加Spring Cloud Alibaba框架及各个组件。

一、项目整体概述

这里整理了一张图,代表接下来这个项目的模块划分,同时用到的一些组件

从这幅图可以看出整个项目所需要用到的组件有:

 GateWay(网关),
Feign(服务调用),
Nacos(注册中心+配置中心),
Zipkin(链路追踪组件),
Sentinel(流量控制组件)

一共创建了三个服务

商品微服务
订单微服务
用户微服务

这篇博客的目的就是搭建上面三个服务,而不添加任何微服务的组件。

二、项目环境和数据库设计

上面已经说过,一共有三个微服务(商品微服务,订单微服务,用户微服务),所以这里也一共有三个数据库。

1、商品微服务

1).创建商品微服务的数据库

CREATE DATABASE mall_goods

2).创建商品表

CREATE TABLE `goods` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`goods_name` varchar(524) DEFAULT NULL COMMENT '商品名称',
`price` int DEFAULT NULL COMMENT '商品价格(分)',
`goods_img` varchar(524) DEFAULT NULL COMMENT '商品封⾯图',
`summary` varchar(1026) DEFAULT NULL COMMENT '概述',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

3).表里插入几条模拟商品数据

INSERT INTO `goods` (`id`, `goods_name`, `price`, `goods_img`, `summary`, `create_time`)
VALUES
(1,'男士纯棉短袖T恤',1800,'www.txun.com','很休闲的一款T恤','2021-04-03 11:48:46'),
(2,'2021秋季风衣女装',7200,'www.fy.com','很好的一件风衣','2021-04-03 11:48:46'),
(3,'2021春装新款简约显瘦圆领连衣裙',3600,'www.lyq.com','很好一件连衣裙','2021-04-03 11:48:46');

2、订单微服务

1).创建订单微服务的数据库

CREATE DATABASE mall_orders

2).创建订单表

CREATE TABLE `goods_order` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`order_no` varchar(64) DEFAULT NULL COMMENT '订单号',
`total_fee` int DEFAULT NULL COMMENT '⽀付⾦额,单位分',
`goods_id` int DEFAULT NULL COMMENT '商品ID',
`goods_title` varchar(256) DEFAULT NULL COMMENT '商品标题',
`goods_img` varchar(256) DEFAULT NULL COMMENT '商品图⽚',
`user_id` int DEFAULT NULL COMMENT '⽤户id',
`state` int DEFAULT NULL COMMENT '0表示未⽀付,1表示已⽀付',
`create_time` datetime DEFAULT NULL COMMENT '订单⽣成时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

3).表里插入几条模拟订单数据

INSERT INTO `goods_order` (`id`, `order_no`, `total_fee`, `goods_id`, `goods_title`, `goods_img`, `user_id`, `state`, `create_time`)
VALUES
(1,'2021033000001-1',1800,1,'男士纯棉短袖T恤','www.txun.com',1,1,'2021-04-03 11:48:46'),
(2,'2021033000001-2',7200,2,'2021秋季风衣女装','www.fy.com',2,1,'2021-04-03 11:48:46');

3、用户微服务

1).创建用户微服务的数据库

CREATE DATABASE mall_user

2).创建用户表

CREATE TABLE `user` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`phone` varchar(32) DEFAULT NULL COMMENT '手机号',
`pwd` varchar(128) DEFAULT NULL COMMENT '密码',
`sex` int(2) DEFAULT NULL COMMENT '性别',
`img` varchar(128) DEFAULT NULL COMMENT '头像',
`username` varchar(128) DEFAULT NULL COMMENT '用户名',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARSET = utf8mb4;

3).表里插入几条用户数据

INSERT INTO `user` (`id`, `phone`, `pwd`, `sex`, `img`, `username`, `create_time`)
VALUES
(1,'18812345678','123456',1,'www.touxiang.com','小小','2021-04-03 11:48:46'),
(2,'18887654321','654321',2,'www.touxiang.com','张三','2021-04-03 11:48:46');

三、项目搭建

1、技术架构

项目总体技术选型

SpringBoot2.3.3 + Maven3.5.4 +JDK8

2、项目整体结构

mall-parent  #父工程
|
---mall-common #公共模块
|
---mall-goods #商品服务(端口:6001)
|
---mall-order #订单服务(端口:7001)
|
---mall-user #用户服务(端口:8001)

说明 有关项目具体的代码我这边就不放上去了,文章最下面会附上GitHub地址。

四、测试

这里主要测试两点

1)各模块连接数据库是否成功
2)订单服务调商品服务接口能否成功

1、订单接口代码

@RestController
@RequestMapping("api/v1/goods_order")
public class OrderController { @Autowired
private RestTemplate restTemplate; @RequestMapping("getGoods")
public Object getGoods(int goodsId) {
Goods goods = restTemplate.getForObject("http://localhost:6001/api/v1/goods/findByGoodsId?goodsId=" + goodsId, Goods.class);
return goods;
}
}

2、测试

通过postMan测试

通过图片可以说明

1)商品服务连接数据库成功
2)订单服务调商品服务成功

说明 这只是一个学习的项目,所以比较简单,下面就是一步一步添加spring cloud alibaba 框架及相应组件。

github地址RestTemplateStudy

少说多做,句句都会得到别人的重视;多说少做,句句都会受到别人的忽视。(3)

Spring Cloud Alibaba(2)---RestTemplate微服务项目的更多相关文章

  1. Spring Cloud Alibaba+Nacos搭建微服务架构

    1. Spring Cloud Alibaba 简介    Spring Cloud Alibaba是阿里巴巴为分布式应用提供的一站式解决方案,能够更方便快捷地搭建分布式平台,nacos拥有着替换eu ...

  2. 阿里巴巴开源 Spring Cloud Alibaba,加码微服务生态建设

    本周,Spring Cloud联合创始人Spencer Gibb在Spring官网的博客页面宣布:阿里巴巴开源 Spring Cloud Alibaba,并发布了首个预览版本.随后,Spring Cl ...

  3. Spring Cloud Alibaba 使用RestTemplate进行服务消费

    创建服务提供者工程 创建spring-cloud-alibaba-service-member工程,会员中心服务该服务提供用户会员信息. pom.xml <?xml version=" ...

  4. 【spring cloud】子模块module -->导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做/或者 每次导入一个新的spring boot项目,IDEA不识别子module,启动类无法启动/右下角没有蓝色图标

    如题:导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做 或者说每次导入一个新的spring boot项目,IDEA不识别,启动类无法启动,怎么解决 下面分别 ...

  5. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

  6. SpringCloud(1)---基于RestTemplate微服务项目案例

    基于RestTemplate微服务项目 在写SpringCloud搭建微服务之前,我想先搭建一个不通过springcloud只通过SpringBoot和Mybatis进行模块之间额通讯.然后在此基础上 ...

  7. Spring Cloud和Docker搭建微服务平台

    用Spring Cloud和Docker搭建微服务平台 This blog series will introduce you to some of the foundational concepts ...

  8. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

  9. spring cloud+dotnet core搭建微服务架构:服务发现(二)

    前言 上篇文章实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A调用服务B,那么服务A访问的是服务B的负载均衡地址,通过负载均衡来指向到服务B的真实地址,上篇文章已经说了这 ...

随机推荐

  1. c# winform中窗体切换后释放及防止重复生成

    问题1:窗体切换后如何关闭,并释放资? c# winform中,2个窗体,form1和form2,互相切换的时候执行 this.Hide(); Form2 form2 = new Form2(); f ...

  2. Java进阶专题(二十六) 数据库原理研究与优化

    前言 在一个大数据量的系统中,这些数据的存储.处理.搜索是一个非常棘手的问题. 比如存储问题:单台服务器的存储能力及数据处理能力都是有限的, 因此需要增加服务器, 搭建集群来存储海量数据. 读写性能问 ...

  3. Windows 环境下搭建 RocketMQ

    Apache 官网: http://rocketmq.apache.org/ RocketMQ 的 Github 地址: English:https://github.com/apache/rocke ...

  4. es6 快速入门 系列 —— 变量声明:let和const

    其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' ...

  5. MongoDB 在Node中的应用

    转: MongoDB 在Node中的应用 文章目录 一 .什么是 MongoDB? 二.小Demo 三.Demo 增删改查 3.1 新增 3.2 查询 3.2.1 查询所有 [{},{}] 找不到返回 ...

  6. Hi3559板载u-boot、kernel及rootfs烧录过程及心得

    这一篇随笔讲叙述下基于Hi3559AV100的BOXER-8410AI板载u-boot.kernel及rootfs烧录具体过程及遇到问题的解决方法与心得. 1.前期板载启动测试和烧录手段 1.1.烧写 ...

  7. DatePicker 多时间粒度选择器组件

    使用方法: 在.vue文件引入 import ruiDatePicker from '@/components/rattenking-dtpicker/rattenking-dtpicker.vue' ...

  8. 话说 synchronized

    一.前言 ​ 说起java的锁呀,我们先想到的肯定是synchronized[ˈsɪŋ krə naɪ zd]了 ,这个单词很拗口,会读这个单词在以后的面试中很加分(我面试过一些人 不会读 ,他们说的 ...

  9. Python中OS对目录的操作以及引用

    路径的获取 对当前目录的获取 1 path = os.getcwd() 2 print("获取到的当前目录是:({})".format(path)) 获取当前文件所在的绝对路径 i ...

  10. 漏洞复现-fastjson1.2.24-RCE

              0x00 实验环境 攻击机:Win 10.Win Server2012 R2(公网环境,恶意java文件所在服务器) 靶机也可作为攻击机:Ubuntu18 (公网环境,docker ...