简单实现Springcloud跨项目相互调用

news2025/7/27 3:59:33

目录

一、前置准备

二、项目准备

三、实现跨项目调用


一、前置准备

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

 技术选型

maven:3.5.4
数据库:MySQL 5.7
持久层: SpingData Jpa/Mybatis-plus
其他: SpringCloud Alibaba 技术栈

模块设计

springcloud-shop父工程
shop-common 公共模块【实体类】
shop-user 用户微服务 【端口: 8070】
shop-product 商品微服务 【端口: 8080】
shop-order 订单微服务 【端口: 8090】

二、项目准备

接下来我们做实现微服务的项目准备环节:

1、创建父工程 

父工程是maven项目

 创建完成过后更改maven地址!!!

 2、导入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>

    <groupId>com.zq</groupId>
    <artifactId>springcloud-shop</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-boot.version>2.3.2.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- SpringBoot 依赖配置 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

在这里我们需要注意的一点事Springcloud与Springboot的版本问题:

这里给出对应的版本对应关系表:

3、创建基础模块

基础模块也是Maven项目所以步骤和上面创建父工程一样

 4、导入基础模块的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">
    <parent>
        <artifactId>springcloud-shop</artifactId>
        <groupId>com.zq</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.44</version>
        </dependency>
    </dependencies>

</project>

在这里区别创建Maven和Springboot项目,我们创建Maven项目,在父工程的pom.xml中会自动的产生子模块的标记:而springboot项目需要自己手动添加 

5、创建实体类放于基础模块

这里小编就是放入的三个实体类

 6、创建用户微服务

导入用户服务的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud-shop</artifactId>
        <groupId>com.zq</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>shop-user</artifactId>

    <dependencies>
        <!--springboot-web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--shop-common-->
        <dependency>
            <groupId>com.zq</groupId>
            <artifactId>shop-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

7、创建商品微服务

导入商品微服务的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud-shop</artifactId>
        <groupId>com.zq</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>shop-product</artifactId>

    <dependencies>
        <!--springboot-web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--shop-common-->
        <dependency>
            <groupId>com.zq</groupId>
            <artifactId>shop-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

8、创建订单微服务

导入订单的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud-shop</artifactId>
        <groupId>com.zq</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>shop-order</artifactId>

    <dependencies>
        <!--springboot-web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--shop-common-->
        <dependency>
            <groupId>com.zq</groupId>
            <artifactId>shop-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

9、修改三个微服务的访问端口

到这里我们的准备OK了,接下来就是代码实现微服务的相互调用了。

三、实现跨项目调用编码

3.1用户微服务Controller代码编写

package com.zq.shopuser.controller;

import com.zq.entity.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author张强
 * @site www.zq.com
 * @create  2022-11-25 15:26
 */
@RequestMapping("/user")
@RestController
public class UserController {
    @RequestMapping("/get/{id}")
    public User get(@PathVariable("id") Integer id){
//        查询数据库
        return new User(id,"zq","123456","15679031652");
    }
}

3.2商品微服务Controller代码编写

package com.zq.shopproduct.controller;

import com.zq.entity.Product;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author张强
 * @site www.zq.com
 * @create  2022-11-25 15:31
 */
@RestController
@RequestMapping("/product")
public class ProductController {
    @RequestMapping("/get/{pid}")
    public Product get(@PathVariable("pid") Integer pid){
        Product p = new Product(pid, "香荷泥煎面", 36d, 36);
        return p;
    }
}

3.3订单微服务Controller代码编写

package com.zq.shoporder.controller;

import com.zq.entity.Order;
import com.zq.entity.Product;
import com.zq.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @author张强
 * @site www.zq.com
 * @create  2022-11-25 15:35
 */
@RequestMapping("/order")
@RestController
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/get/{uid}/{pid}")
    public Order get(@PathVariable("uid") Integer uid,
                     @PathVariable("pid") Integer pid){
        User user = restTemplate.getForObject("http://localhost:8070/user/get/" + uid, User.class);
        Product product = restTemplate.getForObject("http://localhost:8090/product/get/" + pid, Product.class);
        Order order = new Order();
        order.setNumber(2);
        order.setOid(System.currentTimeMillis());
        order.setPid(pid);
        order.setPname(product.getPname());
        order.setPprice(product.getPprice() * order.getNumber());
        order.setUid(user.getUid());
        order.setUsername(user.getUsername());
        return order;
    }
}

测试结果:

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

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

相关文章

浅谈智能化能源管理系统平台在企业中的应用

安科瑞 时丽花 摘要&#xff1a;对焦化企业的智能化能源管理系统应用进行了较全面的分析&#xff0c;在企业节能减排、提升经济效益、优化生产组织等方面具有较高的应用价值&#xff0c;智能化能源管理系统在企业转型升级改造中具有广阔的前景。 关键词&#xff1a;智能化&am…

少样本苹果分类机器深度学习

场景&#xff1a; 样本少&#xff0c;且只有部分进行了标注。负样本类别&#xff08;不是被标注的那些&#xff09;不可穷尽&#xff0c;图像处理 步骤&#xff1a; 1&#xff0c;数据增强,扩充确认为普通苹果的样本数量 2&#xff0c;特征提取,使用VGG16模型提取图像特征 3…

国内优秀的多用户商城系统盘点(2022年整理)

电商战略时代&#xff0c;越来越多的企业或商家选择将消费者引入自己建设的独立商城&#xff0c;如零食行业的良品铺子、三只松鼠&#xff0c;从而打造属于自己的IP形象。此时&#xff0c;挑选一款优秀的商城源码是企业的不二之选&#xff0c;既降低了电商从业者和创业者的入门…

Dubbo

致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案 使用zookeeper作为注册中心registry dubbo.config.annotation下相关注解 Service&#xff1a;被该注解修饰的类&#xff0c;会对外发布&#xff0c;包括IP、端口、路径到注册中心Reference&am…

深度学习之路=====10=====>>Resnext(tensorflow2)

简介 类型&#xff1a;2017CVPR 作者&#xff1a; Kaiming He组 和其他轻量级网络特点一样&#xff0c;Resnext也是通过降低参数量来改进模型&#xff0c;提高模型精度的。该模型基于Inception的split-transform-merge范式和VGG堆叠网络&#xff0c;将Resnet的单路卷积变成多…

程序员注意!35岁前,别靠死工资过日子

《2022程序员职场洞察报告》显示&#xff0c;六成受访者的职级和薪酬原地踏步&#xff0c;仅38.3%程序员群体的工作发生过变动&#xff0c;升职加薪、搞副业、自由工作等。 近两年&#xff0c;伴随疫情及行业发展的不确定性&#xff0c;企业招聘以及人才求职双方都变得谨慎。越…

MFC程序设计——用button更改静态文本+显示内容并弹出新内容+静态文本动态打开位图

目录 一、新建基于对话框的MFC编程项目 二、设计界面 2.设置启动项 2.找到资源视图和Dialog 3.拖入控件 三、创建变量&#xff08;关联对话框与静态文本&#xff09; 四、写入控件代码 1.在文本上的应用 2.在图像上的应用 2.1初始化的方法 2.2控件导入的方法 3.控件…

TSC TTP244Pro 打码机出现的问题及解决方案

背景&#xff1a; 最近在使用TSC的TTP 244 Pro 打码机的过程中&#xff0c;出现了几个小问题&#xff0c;最后请教了专业的人员才解决了问题&#xff0c;现把需要注意的点记录如下&#xff1a; 准备&#xff1a; 先去TSC的** 官网 **上找关于适用于你的打码机和使用环境的驱…

数据结构(高阶)—— AVL树

目录 一、AVL树的基本概念 二、AVL树的结点定义 三、AVL树的插入 四、AVL树的旋转 1. 右单旋 2. 左单旋 3. 右左双旋 4. 左右双旋 五、AVL树的验证 六、AVL树的性能 七、源代码 一、AVL树的基本概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或…

CXL 2.0 Device配置空间寄存器组成

目录 1 配置空间 1.1 PCI Power Management Capability Structure 1.2 PCI Express Capability Structure 2 扩展配置空间 2.1 PCIe DVSEC for CXL Device 2.2 GPF DVSEC for CXL Devices 2.3 PCIe DVSEC for Flex Bus Port 2.4 Register Locator DVSEC CXL设备配置空间…

ThinkPHP架构

文章目录一、架构总览1.1、有关常用的一些概念入口文件应用模块控制器操作模型视图驱动行为命名空间【全限定类名】1.补充二、生命周期三、入口文件四、URL访问五、模块设计六、命明空间七、自动加载八、Traits引入九、API友好一、架构总览 ThinkPHP5.0应用基于MVC&#xff08;…

前后端分页插件

PageHelper 是一个 MyBatis 的分页插件,支持多种数据库,可查看官网&#xff0c;负责将已经写好的 SQL 语句&#xff0c;进行SQL分页加工。无需你自己去封装以及关心 SQL 分页等问题&#xff0c;支持多种分页方式,如从第0或第一页开始, 使用很方便。 添加依赖 <dependency&…

线代 | 【提神醒脑】自用笔记串联二 —— 向量组 · 线性方程组 · 特征值与特征向量

本文总结参考于 kira 2023 线代提神醒脑技巧班。 笔记均为自用整理。加油!ヾ(◍∇◍)ノ゙ 四、向量组 4.1、向量组的线性相关性 ----------------------------------------------------------------------------------------------------------…

Linux 软链接 与 硬链接 的区别

Linux 软链接 与 硬链接 的区别 1、概念 ​  链接文件&#xff1a;是 Linux 操作系统中的一种文件&#xff0c;主要用于解决文件的共享使用问题&#xff0c;而链接的方式分为两种——软链接和硬链接。 ​  inode&#xff1a;是文件系统中存储文件元信息&#xff08;文件的…

Auddly Music Server的编译和安装

本文始于 2021 年 11 月&#xff0c;已经忘记了是什么原因一直没发&#xff0c;这次基本上全部重写了一遍&#xff0c;除了官方的图&#xff0c;所有图片都是重新截取的&#xff1b; 什么是 auddly &#xff1f; auddly 是一款自托管音乐流应用程序。 什么是 auddly-server &am…

模拟实现ATM系统——Java

目录 一、内容简介 二、基本流程 三、具体步骤 1.定义Account类 2.菜单栏 3.账户注册 (1)根据卡号查询账户信息 (2)生成随机卡号 (3)注册账户 4.账户登录 (1)验证码 (2)登录 5.账户展示界面 6.用户操作 (1)查询账户 (2)存款 (3)取款 (4)转账 (5)修改密码 …

旋转的骰子(二)

1.动画——旋转的骰子 上一次我们做了一个旋转的骰子(参看第2讲),这次我们想要点击按钮,让骰子旋转到特定的点数停下来! 2.分析需求——庖丁解牛 a.立方体特定的朝向

LiveData源码分析

先放整理流程图&#xff1a; 1.postValue调2次只触发1次&#xff1f; postValue本质是把新值保存到LiveData的mPendingData成员变量里&#xff0c;版本号1&#xff0c;把执行Runnable post到主线程&#xff0c;在主线程setValue。 多次调用会更新mPendingData的值&#xff0c…

opencv的极线几何

一、理论介绍 当我们使用针孔相机拍摄图像时&#xff0c;我们会丢失一个重要的信息&#xff0c;即图像的深度。一个解决方案如我们的眼睛的方式使用两个相机&#xff08;两只眼睛&#xff09;&#xff0c;这就是所谓的立体视觉。 PO1O2为极平面&#xff0c;l1和l2为极线,e1和…

基于webrtc的数据传输研究总结

什么是webrtc WebRTC (Web Real-Time Communications) 是一项实时通讯技术&#xff0c;它允许网络应用或者站点&#xff0c;在不借助中间媒介的情况下&#xff0c;建立浏览器之间点对点&#xff08;Peer-to-Peer&#xff09;的连接&#xff0c;实现视频流和&#xff08;或&…