微服务环境搭建

我们这次是使用的电商项目的商品、订单、用户为案例进行讲解

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模块

  1. 在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>
  2. 创建实体类

    /**
    * -----------------------------
    * 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 创建用户微服务

步骤:

  1. 创建模块
  2. 创建SpringBoot主类
  3. 加入配置文件
  4. 创建必要的接口和实现类

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

  1. 创建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>
  2. 编写主类

    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);
    }
    }
  3. 创建配置文件

    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 创建商品微服务

  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">
    <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>
  2. 创建工程主类

    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);
    }
    }
  3. 创建配置文件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
  4. 创建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> {
    }
  5. 创建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();
    }
    }
  6. 创建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;
    } }
  7. 启动工程

2.6 创建订单微服务

  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">
    <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>
  2. 创建工程主类

    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);
    }
    }
  3. 创建配置文件

    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
  4. 创建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> {
    }
  5. 创建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);
    }
  6. 创建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();
    }
    }
  7. 创建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);
    } }
  8. 启动工程,通过浏览器访问服务进行测试

SpringCloudAlibaba 微服务讲解(二)微服务环境搭建的更多相关文章

  1. 总结Selenium自动化测试方法(二)测试环境搭建

    (接上期内容) 二.测试环境搭建 1.安装python 现在python3.0比python2.0多了一些改进的功能(详见http://zhidao.baidu.com/link?url=3sT1g7 ...

  2. C# NX二次开发环境搭建

    在网上看到一篇C#二次开发环境搭建的文章:NX二次开发-使用NXOPEN C#手工搭建开发环境配置 ,写得非常好.我按照文章操作,过程中遇到几个问题,把问题分享给大家,希望对各位有帮助. 注意三点: ...

  3. Redash 二开 - 后端环境搭建

    Redash 二开 - 后端环境搭建 一.操作系统选择 官方文档有一句话:Windows users: while it should be possible to run Redash on a W ...

  4. 若依微服务版本 Windows下开发环境搭建

    看了若依官网的教程,搭建环境还是踩了坑,简单整理一下 1.下载地址:https://gitee.com/y_project/RuoYi-Cloud 2.本地环境(仅供参考) JDK1.8 Mysql  ...

  5. 二.django项目环境搭建

    Ⅰ.web框架介绍 1.socket 服务端 1)客户端(手机中各种app.浏览器)是用来与服务端(网站的服务器程序)进行交互的 2)服务端类似发电厂,客户端类似电器,socket类似插座,互联网的数 ...

  6. Docker下kafka学习三部曲之二:本地环境搭建

    在上一章< Docker下kafka学习,三部曲之一:极速体验kafka>中我们快速体验了kafka的消息分发和订阅功能,但是对环境搭建的印象仅仅是执行了几个命令和脚本,本章我们通过实战来 ...

  7. 从零学习Fluter(二):win10上环境搭建以及模拟器和真机调试

    今天呢,又继续看了flutter 弗拉特 的东西,绝的这个东西绝对是比ReactNative更高一层次的,在2018年12月5好,flutter的第一个stale1.0发布了,我们在GitHub上可以 ...

  8. 第一周博客之二---OA项目环境搭建及开发包部署

    OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...

  9. Vue项目二、vue环境搭建以及Vue-cli使用及详解

    一.Vue多页面应用的环境搭建 每一次页面跳转的时候,后台服务器都会给返回一个新的html文档,这种类型的网站也就是多页网站,也叫做多页应用. 环境的搭建如下,在页面中引入如下框架 <scrip ...

  10. Flutter入门教程(二)开发环境搭建

    学习Flutter,首先需要搭建好Flutter的开发环境,下面我将一步步带领大家搭建开发环境并且成功运行flutter项目. Flutter环境配置主要有这几点: 系统配置要求 Java环境 Flu ...

随机推荐

  1. Spring Security Auth/Acl 实践指南

    目录 导语 Web Api Authentication/Authorization 示例接口 添加 Maven 依赖 实现接口 访问接口 认证/鉴权 配置认证/鉴权 添加 Maven 依赖 创建数据 ...

  2. Solution -「AGC 012F」「AT 2366」Prefix Median

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_{2n-1}\}\),将 \(\{a_{2n-1}\}\) 按任意顺序排列后,令序列 \(b_i\) 为前 ...

  3. Java 线程的 5 种状态

    线程状态图: 线程共包括以下 5 种状态: 1. 新建状态(New): 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread(). 2. 就绪状态(Runna ...

  4. pypi服务器搭建

    pypi服务器搭建 [root@localhost ~]# hostnamectl set-hostname --static pypi-server [root@pypi-server ~]# yu ...

  5. 设计模式在实际业务应用中的介绍之3——外观或门面模式Facade对AOP装配业务工厂的应用

    在C#中实现的基于外观或门面模式打造的业务应用案例 以前一直没有想过写一些东西来把项目中用到的知识点及技术实现做一个归纳整理并分享出来.现在打算逐渐的把项目中的一些东西整理并分享出来,与大家共勉! 外 ...

  6. 记一次对ctf试题中对git文件泄露的漏洞的挖掘

    拿到题,先f12查看代码 发现情况直接进行访问 最后试了发现flag.js可以访问  服务器返回了如下图所示的乱码 很显然有可能是git泄露  话不多说,直接利用https://github.com/ ...

  7. BI工具是什么,有什么用,怎么用?

    BI工具是什么,有什么用,怎么用?这应该是很多刚刚接触BI工具的读者最开始想了解的问题,经常在看到数据可视化.数据分析.数据仓库和大数据等词汇时会有的摸不着头脑,本次小编就围绕BI工具是什么,有什么用 ...

  8. C语言中sizeof()的用法

    语法 sizeof有三种语法形式: 1.sizeof(object); //sizeof(对象); 2.sizeof(type_name); //sizeof(类型); 3.sizeof object ...

  9. 案例二:shell脚本获取当前日期和时间及磁盘使情况

    习题分析 本题有两个核心知识点: 1. 如何自动表示当天的日期 2. 磁盘使用情况 打印日期的命令为 date,示例命令如下: # date 2017 年 12 月 20 日 星期三 16:26:55 ...

  10. 跟k8s工作负载Deployments的缘起缘灭

    跟k8s工作负载Deployments的缘起缘灭 考点之简单介绍一下什么是Deployments吧? 考点之怎么查看 Deployment 上线状态? 考点之集群中能不能设置多个Deployments ...