SpringCloudAlibaba 微服务讲解(二)微服务环境搭建
微服务环境搭建
我们这次是使用的电商项目的商品、订单、用户为案例进行讲解
2.1 案例准备
2.1.1 技术选型
- maven :3.3.9
- 数据库:mysql
- 持久层:SpringData JPA
- SpringCloud Alibaba技术栈
2.1.2 模块设计
- springcloud-alibaba 父工程
- shop-common 公共模块
- shop-user 用户模块
- shop-product 商品模块
- shop-order 订单模块
2.1.3 微服务调用
在微服务架构中,最常见的场景就是微服务之间的相互调用。我们以电商系统中常见的用户下单为例来 演示微服务的调用:客户向订单微服务发起一下单的请求,在进行保存订单之前需要调用商品微服务 查询商品的信息
我们一般把服务的主动调用方称为服务消费者,把服务的被调用方称为服务提供者.
2.2创建父工程
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
<groupId>com.ityml</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-cloud-alibaba.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</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>
</dependencies>
</dependencyManagement>
</project>
对应版本:
https://www.cnblogs.com/onehm/p/13931711.html
2.3创建基础模块
2.3.1 shop-common模块
在pom中添加依赖
<?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> <parent>
<groupId>com.ityml</groupId>
<artifactId>springcloud-alibaba</artifactId>
<version>1.0-SNAPSHOT</version>
</parent> <groupId>com.ityml</groupId>
<artifactId>shop-common</artifactId>
<version>1.0-SNAPSHOT</version> <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.79</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency> </dependencies> </project>
创建实体类
/**
* -----------------------------
* PackageName: com.ityml.entity
* ClassName:User
* Description:用户
*
* @author:it-yml CreateTime:2022-03-22
* -----------------------------
*/
@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;
}
/**
* -----------------------------
* PackageName: com.ityml.entity
* ClassName:Product
* Description:商品
*
* @author:it-yml CreateTime:2022-03-22
* -----------------------------
*/
@Entity(name = "shop-product")
@Data
public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private String pname; private Double price; private Integer stock;
}
/**
* -----------------------------
* PackageName: com.ityml.entity
* ClassName:Order
* Description:订单
*
* @author:it-yml CreateTime:2022-03-22
* -----------------------------
*/
@Entity(name = "shop-order")
@Data
public class Order {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long oid; private Integer uid; private String username;
}
2.4 创建用户微服务
步骤:
- 创建模块
- 创建SpringBoot主类
- 加入配置文件
- 创建必要的接口和实现类
创建一个shop-user模块,然后进行下面操作
创建pom
<?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> <parent>
<groupId>com.ityml</groupId>
<artifactId>springcloud-alibaba</artifactId>
<version>1.0-SNAPSHOT</version>
</parent> <groupId>com.ityml</groupId>
<artifactId>shop-user</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.ityml</groupId>
<artifactId>shop-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies> </project>
编写主类
package com.ityml; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* -----------------------------
* PackageName: com.ityml
* ClassName:UserApplication
* Description:启动类
*
* @author:it-yml CreateTime:2022-03-22
* -----------------------------
*/
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class,args);
}
}创建配置文件
server:
port: 8080
spring:
application:
name: service-user
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc://
username:
data-password: jpa:
properties:
hibernate:
hbm2ddl:
auto: update
dialect: org.hibernate.dialect.MySQL.5InnoDDialect
2.5 创建商品微服务
创建一个名为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">
<modelVersion>4.0.0</modelVersion> <parent>
<groupId>com.ityml</groupId>
<artifactId>springcloud-alibaba</artifactId>
<version>1.0-SNAPSHOT</version>
</parent> <groupId>com.ityml</groupId>
<artifactId>shop-product</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.ityml</groupId>
<artifactId>shop-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies> </project>
创建工程主类
package com.ityml; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* -----------------------------
* PackageName: com.ityml
* ClassName:ProductApplication
* Description:商品主类
*
* @author:it-yml CreateTime:2022-03-23
* -----------------------------
*/
@SpringBootApplication
public class ProductApplication {
public static void main(String[] args) {
SpringApplication.run(ProductApplication.class,args);
}
}
创建配置文件application.yml
server:
port: 8080
spring:
application:
name: service-product
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc://
username:
data-password: jpa:
properties:
hibernate:
hbm2ddl:
auto: update
dialect: org.hibernate.dialect.MySQL.5InnoDDialect
创建ProductDao接口
package com.ityml.dao; import com.ityml.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository; /**
* -----------------------------
* PackageName: com.ityml.dao
* ClassName:ProductDao
* Description:
*
* @author:it-yml CreateTime:2022-03-23
* -----------------------------
*/
public interface ProductDao extends JpaRepository<Product,Integer> {
}
创建ProductService接口和实现类
package com.ityml.service; import com.ityml.entity.Product; /**
* -----------------------------
* PackageName: com.ityml.service
* ClassName:ProductService
* Description:
*
* @author:it-yml CreateTime:2022-03-23
* -----------------------------
*/
public interface ProductService {
Product findById(Integer pid);
}
package com.ityml.impl; import com.ityml.dao.ProductDao;
import com.ityml.entity.Product;
import com.ityml.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; /**
* -----------------------------
* PackageName: com.ityml.impl
* ClassName:ProductServiceImpl
* Description:实现类
*
* @author:it-yml CreateTime:2022-03-23
* -----------------------------
*/
@Service
public class ProductServiceImpl implements ProductService {
@Autowired
private ProductDao productDao;
@Override
public Product findById(Integer pid) {
return productDao.findById(pid).get();
}
}创建Controller
package com.ityml.controller; import com.ityml.entity.Product;
import com.ityml.service.ProductService;
import lombok.extern.slf4j.Slf4j;
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; /**
* -----------------------------
* PackageName: com.ityml.controller
* ClassName:ProductController
* Description:主类
*
* @author:it-yml CreateTime:2022-03-23
* -----------------------------
*/
@RestController
@Slf4j
public class ProductController { @Autowired
private ProductService productService; @GetMapping("/product/{pid}")
public Product product(@PathVariable("pid") Integer pid){
Product product = productService.findById(pid);
return product;
} }
启动工程
2.6 创建订单微服务
创建一个名为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">
<modelVersion>4.0.0</modelVersion> <parent>
<groupId>com.ityml</groupId>
<artifactId>springcloud-alibaba</artifactId>
<version>1.0-SNAPSHOT</version>
</parent> <groupId>com.ityml</groupId>
<artifactId>shop-order</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.ityml</groupId>
<artifactId>shop-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
创建工程主类
package com.ityml; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* -----------------------------
* PackageName: com.ityml
* ClassName:OrderApplication
* Description:主类
*
* @author:it-yml CreateTime:2022-03-23
* -----------------------------
*/
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class,args);
}
}
创建配置文件
server:
port: 8080
spring:
application:
name: service-order
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc://
username:
data-password: jpa:
properties:
hibernate:
hbm2ddl:
auto: update
dialect: org.hibernate.dialect.MySQL.5InnoDDialect
创建OrderDao接口
package com.ityml.dao; import com.ityml.entity.Order;
import org.springframework.data.jpa.repository.JpaRepository; /**
* -----------------------------
* PackageName: com.ityml.dao
* ClassName:ProductDao
* Description:
*
* @author:it-yml CreateTime:2022-03-23
* -----------------------------
*/
public interface OrderDao extends JpaRepository<Order,Integer> {
}
创建OrderService接口和实现类
package com.ityml.service; import com.ityml.entity.Order; /**
* -----------------------------
* PackageName: com.ityml.service
* ClassName:ProductService
* Description:
*
* @author:it-yml CreateTime:2022-03-23
* -----------------------------
*/
public interface OrderService {
void save(Order order);
}
创建RestTemplate
package com.ityml; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate; /**
* -----------------------------
* PackageName: com.ityml
* ClassName:OrderApplication
* Description:主类
*
* @author:it-yml CreateTime:2022-03-23
* -----------------------------
*/
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class,args);
}
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
创建Controller
package com.ityml.controller; import com.ityml.entity.Order;
import com.ityml.entity.Product;
import com.ityml.service.OrderService;
import lombok.extern.slf4j.Slf4j;
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.RestController;
import org.springframework.web.client.RestTemplate; /**
* -----------------------------
* PackageName: com.ityml.controller
* ClassName:OrderController
* Description:主类
*
* @author:it-yml CreateTime:2022-03-23
* -----------------------------
*/
@RestController
@Slf4j
public class OrderController { @Autowired
private OrderService orderService; @Autowired
private RestTemplate restTemplate; /**
* 准备买一件商品
* @param pid
*/
@GetMapping("/order/prod/{pid}")
public void Order(@PathVariable("pid") Integer pid) {
Product product = restTemplate.getForObject("http:/localhost:8081/product" + pid, Product.class);
Order order = new Order();
orderService.save(order);
} }
启动工程,通过浏览器访问服务进行测试
SpringCloudAlibaba 微服务讲解(二)微服务环境搭建的更多相关文章
- 总结Selenium自动化测试方法(二)测试环境搭建
(接上期内容) 二.测试环境搭建 1.安装python 现在python3.0比python2.0多了一些改进的功能(详见http://zhidao.baidu.com/link?url=3sT1g7 ...
- C# NX二次开发环境搭建
在网上看到一篇C#二次开发环境搭建的文章:NX二次开发-使用NXOPEN C#手工搭建开发环境配置 ,写得非常好.我按照文章操作,过程中遇到几个问题,把问题分享给大家,希望对各位有帮助. 注意三点: ...
- Redash 二开 - 后端环境搭建
Redash 二开 - 后端环境搭建 一.操作系统选择 官方文档有一句话:Windows users: while it should be possible to run Redash on a W ...
- 若依微服务版本 Windows下开发环境搭建
看了若依官网的教程,搭建环境还是踩了坑,简单整理一下 1.下载地址:https://gitee.com/y_project/RuoYi-Cloud 2.本地环境(仅供参考) JDK1.8 Mysql ...
- 二.django项目环境搭建
Ⅰ.web框架介绍 1.socket 服务端 1)客户端(手机中各种app.浏览器)是用来与服务端(网站的服务器程序)进行交互的 2)服务端类似发电厂,客户端类似电器,socket类似插座,互联网的数 ...
- Docker下kafka学习三部曲之二:本地环境搭建
在上一章< Docker下kafka学习,三部曲之一:极速体验kafka>中我们快速体验了kafka的消息分发和订阅功能,但是对环境搭建的印象仅仅是执行了几个命令和脚本,本章我们通过实战来 ...
- 从零学习Fluter(二):win10上环境搭建以及模拟器和真机调试
今天呢,又继续看了flutter 弗拉特 的东西,绝的这个东西绝对是比ReactNative更高一层次的,在2018年12月5好,flutter的第一个stale1.0发布了,我们在GitHub上可以 ...
- 第一周博客之二---OA项目环境搭建及开发包部署
OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...
- Vue项目二、vue环境搭建以及Vue-cli使用及详解
一.Vue多页面应用的环境搭建 每一次页面跳转的时候,后台服务器都会给返回一个新的html文档,这种类型的网站也就是多页网站,也叫做多页应用. 环境的搭建如下,在页面中引入如下框架 <scrip ...
- Flutter入门教程(二)开发环境搭建
学习Flutter,首先需要搭建好Flutter的开发环境,下面我将一步步带领大家搭建开发环境并且成功运行flutter项目. Flutter环境配置主要有这几点: 系统配置要求 Java环境 Flu ...
随机推荐
- Linux组管理
首先查看文件所有者.文件所在组等信息:ls -l 1.改变文件所有者:chown 用户名 文件名 执行 chown xm Hello.java 后,可以看到文件所有者现在是属于xm这个用户的了 2.改 ...
- 【前端开发日记 】VSCODE被初始化之后重新设置的这些事
不知到什么插件的原因,导致我的vscode编辑器,在输入比如div的时候按tab不会识别成html标签,在设置了推荐词之后还是不好使,于是初始化了自己的编辑器设置 ,导致所有的插件和个性化设置都不见了 ...
- Python内置模块(re+collections+time等模块)
Python内置模块(re+collections+time等模块) 1. re模块 import re 在python要想使用正则必须借助于模块 re就是其中之一 1.1 findall功能( re ...
- 7、架构--location、LNMP架构、uwsgi部署、BBS项目部署
笔记 1.晨考 1.Nginx中常用的模块 autoindex stub_status allow 和 deny basic limit_conn limit_req 2.配置步骤 1.创建连接池 2 ...
- 36、python并发编程之多线程(操作篇)
目录: 一 threading模块介绍 二 开启线程的两种方式 三 在一个进程下开启多个线程与在一个进程下开启多个子进程的区别 四 练习 五 线程相关的其他方法 六 守护线程 七 Python GIL ...
- KC705E增强版基于FMC接口的 Kintex-7 XC7K325T PCIeX8 接口卡
一.板卡概述 本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8.64bit DDR3容量 ...
- opencv笔记--HOGDescriptor
特征描述提取图像区域上有用信息而忽略无用信息,不同目标下有用信息与无用信息定义不同.这里提取的有用信息用于分类器输入并期望产生正确的分类. HOG(Histogram of Oriented Grad ...
- 日行一算(Table-文字输出)
题目 +---+---+---+ | | | | +---+---+---+ | | | | +---+---+---+ | | | | +---+---+---+ 题目描述 上图是一个Mysql查询 ...
- CentOS7更新OpenSSH8
今天使用漏洞扫描工具扫描了一下系统漏洞,发现有一个openssh版本的漏洞.所以本着安全的原则修复一下. 第一时间打开百度搜索相关内容,大多数是编译安装的.每个人的环境和版本也不一样.有一定连不上去的 ...
- 以Docker容器的形式运行GVM-11
OpenVAS(Open Vulnerability Assessment System)是在nessus基础上发展起来的一个开源的漏洞扫描程序,其核心部件是一套漏洞测试程序,可以检测远程系统和应用程 ...