服务消费微服务
文章目录
- 1.示意图
- 2.环境搭建
- 1.创建会员消费微服务模块
- 2.删除不必要的两个文件
- 3.检查父子模块的pom.xml文件
- 1.子模块
- 2.父模块
- 4.pom.xml 添加依赖(刷新)
- 5.application.yml 配置监听端口和服务名
- 6.com/sun/springcloud/MemberConsumerApplication.java 创建启动类测试
- 7.测试执行
- 1.发现80端口被占用
- 2.打开命令行输入 netstat -anb 查看是谁占用了80端口
- 3.只能更换端口,使用 netstat -aon | findstr :81 来查看81端口被没被占用
- 4.application.yml 更换端口和名字为81
- 5.再次测试运行,成功在81端口监听
- 6.浏览器请求测试
- 7.更换项目名称为81(这样直接就知道这个服务在81端口监听)
- 8.细节说明
- 1.如果报错说数据库有问题,可能就是在pom.xml中保留了mybatis的依赖
- 2.解决方案:启动类排除数据源自动配置
- 3.代码实现
- 1.com/sun/springcloud/entity/Member.java 创建entity与会员中心模块保持一致
- 2.com/sun/springcloud/util/Result.java 创建Result工具类
- 3.RestTemplate 基本介绍
- 4.com/sun/springcloud/config/CustomizationBean.java 配置类注入RestTemplate的bean对象
- 5.com/sun/springcloud/controller/MemberConsumerController.java 作为会员中心微服务 save接口的中转站
- 6.启动两个微服务进行测试
- 1.首先启动会员中心微服务
- 2.启动服务消费微服务
- 3.postman测试
- 4.数据库信息
- 7.注意事项
- 1.RestTemplate发送请求的细节
- 2.entity实体类需要实现Serializable接口实现可序列化
- 3.在这个案例中
- 8.com/sun/springcloud/controller/MemberConsumerController.java 新增方法
- 9.postman测试
- 10.注意事项和细节
- 1.开启Run Dashboard/Service
- 1.打开 .idea/workspace.xml
- 2.粘贴配置代码到这里
- 3.配置代码
- 4.重启项目
- 5.查看Services
- 6.可以在这启动项目
- 7.启动之后的效果
- 2.关于微服务的细节
- 1.对微服务的理解
- 2.每个微服务接口的组成
- 4.创建一个共用模块
- 1.创建公共模块 e_commerce_center-common-api
- 2.检查父子的pom.xml
- 1.子pom.xml
- 2.父pom.xml
- 3.pom.xml 引入依赖(刷新)
- 4.抽取共用api
- 5.maven打成jar包
- 6.target目录生成jar包
- 7.package和install的区别(部署项目的时候打包使用package)
- 8.工程重构
- 1.删除两个模块的Member和Result类,此时会报错
- 2.两个模块的pom.xml都引入刚才的jar包
- 1.查找公共模块jar包的坐标
- 2.pom.xml分别引入jar包
- 3.重启两个模块进行测试
- 1.重启
- 2.测试
1.示意图

2.环境搭建
1.创建会员消费微服务模块

2.删除不必要的两个文件

3.检查父子模块的pom.xml文件
1.子模块

2.父模块

4.pom.xml 添加依赖(刷新)
<dependencies><!-- springboot web starter 用来监听端口--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 如果在子工程/模块指定了 version,则以指定为准 --></dependency><!--1. starter-actuator 是 springboot 程序的监控系统,可以实现健康检查,info 信息等2. 访问 http://localhost:10000/actuator 可以看到相关链接, 还可以做相关设置. --><!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
5.application.yml 配置监听端口和服务名
server:port: 80 # 监听80端口
spring:application:name: member-service-consumer-80
6.com/sun/springcloud/MemberConsumerApplication.java 创建启动类测试
package com.sun.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** Description:** @Author sun* @Create 2024/3/24 13:58* @Version 1.0*/
@SpringBootApplication
public class MemberConsumerApplication {public static void main(String[] args) {SpringApplication.run(MemberConsumerApplication.class, args);}
}
7.测试执行
1.发现80端口被占用

2.打开命令行输入 netstat -anb 查看是谁占用了80端口

3.只能更换端口,使用 netstat -aon | findstr :81 来查看81端口被没被占用
- 没有响应,说明没有被占用

4.application.yml 更换端口和名字为81
server:port: 81 # 监听81端口
spring:application:name: member-service-consumer-81
5.再次测试运行,成功在81端口监听

6.浏览器请求测试

7.更换项目名称为81(这样直接就知道这个服务在81端口监听)

8.细节说明
1.如果报错说数据库有问题,可能就是在pom.xml中保留了mybatis的依赖

2.解决方案:启动类排除数据源自动配置

3.代码实现
1.com/sun/springcloud/entity/Member.java 创建entity与会员中心模块保持一致
- 因为需要使用这个实体类来接收信息,然后调用会员中心模块
package com.sun.springcloud.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;/*** Description:** @Author sun* @Create 2024/3/24 14:21* @Version 1.0*/
@AllArgsConstructor
@NoArgsConstructor
@Data
//Serializable 加上,后面可能使用
public class Member implements Serializable {private Long id;private String name;private String pwd;private String mobile;private String email;private Integer gender;
}
2.com/sun/springcloud/util/Result.java 创建Result工具类
package com.sun.springcloud.util;/*** Description:** @Author sun* @Create 2024/3/24 14:21* @Version 1.0*/
public class Result<T> {private String code;private String msg;private T data;public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public T getData() {return data;}public void setData(T data) {this.data = data;}public Result() {}public Result(T data) {this.data = data;}public static Result success() {Result result = new Result<>();result.setCode("200");result.setMsg("success");return result;}public static <T> Result<T> success(T data) {Result<T> result = new Result<>(data);result.setCode("200");result.setMsg("success");return result;}public static <T> Result<T> success(String msg, T data) {Result<T> result = new Result<>(data);result.setCode("200");result.setMsg(msg);return result;}public static Result error(String code, String msg) {Result result = new Result();result.setCode(code);result.setMsg(msg);return result;}public static <T> Result<T> error(String code, String msg, T data) {Result<T> result = new Result<>(data);result.setCode(code);result.setMsg(msg);return result;}}
3.RestTemplate 基本介绍

4.com/sun/springcloud/config/CustomizationBean.java 配置类注入RestTemplate的bean对象
package com.sun.springcloud.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;/*** Description: 配置类** @Author sun* @Create 2024/3/24 14:32* @Version 1.0*/
@Configuration
public class CustomizationBean {/*** 注入RestTemplate的bean对象* @return*/@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}
5.com/sun/springcloud/controller/MemberConsumerController.java 作为会员中心微服务 save接口的中转站
package com.sun.springcloud.controller;import com.sun.springcloud.entity.Member;
import com.sun.springcloud.util.Result;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import javax.annotation.Resource;/*** Description: 作为会员中心微服务对member表操作的网关** @Author sun* @Create 2024/3/24 14:42* @Version 1.0*/
@RestController
public class MemberConsumerController {/*访问会员中心微服务的前缀*/public static final String MEMBER_SERVICE_PROVIDER_URL = "http://localhost:10001";/*注入微服务之间通讯的RestTemplate的bean对象*/@Resourceprivate RestTemplate restTemplate;/*** 向会员中心微服务的save接口发送请求,携带member对象,接受返回的结果Result并以json的格式返回给浏览器** @param member 这里的参数必须是表单类型的,因为没有加@requestBody* @return*/@PostMapping("/member/consumer/save")public Result save(Member member) {// 注意:使用restTemplate发送请求时会将member转化为json格式的数据然后再发送请求,所以会员中心微服务的save接口必须加@requestBody注解return restTemplate.postForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/save", member, Result.class);}}
6.启动两个微服务进行测试
1.首先启动会员中心微服务

2.启动服务消费微服务

3.postman测试

4.数据库信息

7.注意事项
1.RestTemplate发送请求的细节
- 通过RestTemplate发送请求携带的参数会自动转换为json格式的数据
- 所以在接受RestTemplate的参数中必须要加@RequestBody注解
2.entity实体类需要实现Serializable接口实现可序列化
- 原因是使用RestTemplate传递参数时可能需要序列化
3.在这个案例中
- 参数并没有@RequestBody注解,所以需要通过表单传入数据
8.com/sun/springcloud/controller/MemberConsumerController.java 新增方法
/*** 接受id为路径参数,向会员中心微服务模块的getMemberById接口发送请求,根据id获取信息** @param id 请求参数* @return 根据id返回json类型的数据*/@GetMapping("/member/consumer/get/{id}") // 这里使用的路径参数public Result getMemberById(@PathVariable("id") Long id) {return restTemplate.getForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/get/" + id, Result.class);}
9.postman测试

10.注意事项和细节
1.开启Run Dashboard/Service
1.打开 .idea/workspace.xml

2.粘贴配置代码到这里

3.配置代码
<component name="RunDashboard"><option name="configurationTypes"><set><option value="SpringBootApplicationConfigurationType" /></set></option><option name="ruleStates"><list><RuleState><option name="name" value="ConfigurationTypeDashboardGroupingRule" /></RuleState><RuleState><option name="name" value="StatusDashboardGroupingRule" /></RuleState></list></option></component>
4.重启项目

5.查看Services

6.可以在这启动项目

7.启动之后的效果

2.关于微服务的细节
1.对微服务的理解
- 一个ip+端口就是一个微服务
- 访问微服务的方式是ip + 端口 + 上下文路径(可以是根目录)+ 资源路径
2.每个微服务接口的组成
- url
- 请求方式
- 参数
- 返回值
4.创建一个共用模块
1.创建公共模块 e_commerce_center-common-api

2.检查父子的pom.xml
1.子pom.xml

2.父pom.xml

3.pom.xml 引入依赖(刷新)
<dependencies><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><!-- optional为true表示两个模块之间依赖不传递,也就是其他模块引入这个共用模块时,不传递这个模块的lombok依赖 --><optional>true</optional></dependency></dependencies>
4.抽取共用api

5.maven打成jar包

6.target目录生成jar包

7.package和install的区别(部署项目的时候打包使用package)
package命令主要用于项目的编译和打包,但不会将产物安装到本地仓库,主要用于构建过程的测试和验证。install命令在执行package的基础上,进一步将打包后的文件安装到本地Maven仓库,便于其他项目的依赖引用。
8.工程重构
1.删除两个模块的Member和Result类,此时会报错

2.两个模块的pom.xml都引入刚才的jar包
1.查找公共模块jar包的坐标

2.pom.xml分别引入jar包
<!-- 公共模块的jar包 --><dependency><groupId>org.example</groupId><artifactId>e_commerce_center-common-api</artifactId><version>1.0-SNAPSHOT</version></dependency>
3.重启两个模块进行测试
1.重启

2.测试


相关文章:
服务消费微服务
文章目录 1.示意图2.环境搭建1.创建会员消费微服务模块2.删除不必要的两个文件3.检查父子模块的pom.xml文件1.子模块2.父模块 4.pom.xml 添加依赖(刷新)5.application.yml 配置监听端口和服务名6.com/sun/springcloud/MemberConsumerApplication.java 创…...
uni-app纵向步骤条
分享一下项目中自封装的步骤条,存个档~ 1. 话不多说,先看效果 2. 话还不多说,上代码 <template><!-- 获取一个数组,结构为[{nodeName:"流程发起"isAudit:falsetime:"2024-02-04 14:27:35"otherDat…...
【JavaEE -- 文件操作IO有关面试题】
文件操作IO有关面试题 1.查找硬盘上的文件位置1.1 思路1.2 执行代码 2. 实现文件复制2.1 思路2.2 代码执行 3. 打印搜索的词的文件路径3.1 思路3.2 代码执行 1.查找硬盘上的文件位置 给定一个文件名,去指定的目录中进行搜索,找到文件名匹配的结果&#…...
Open WebUI大模型对话平台-适配Ollama
什么是Open WebUI Open WebUI是一种可扩展、功能丰富、用户友好的大模型对话平台,旨在完全离线运行。它支持各种LLM运行程序,包括与Ollama和Openai兼容的API。 功能 直观的界面:我们的聊天界面灵感来自ChatGPT,确保了用户友好的体验。响应…...
[2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
今天在漏洞扫描的时候蹦出来一个zookeeper的漏洞问题,即使是非zookeeper的节点,或者是非集群内部节点,也可以通过nc扫描2181端口,获取极多的zk信息。关于漏洞的详细描述参考apache zookeeper官方概述:CVE-2018-8012: A…...
vscode添加gitee
1.创建仓库 2.Git 全局设置 3.初始化仓库 2.1 打开vscode打开需要上传到给git的代码文件 2.2.点击左边菜单第三个的源代码管理->初始化仓库 4.点击加号暂存所有更改 5.添加远程仓库 5.1 添加地址,回车 5.2 填写库名,回车 6.提交和推送 6.1 点击✔提交…...
数据库底层原理
本文将介绍数据库在储存和通讯时的原理 数据库储存 首先,数据库的作用持久化存储数据,数据库的存储形式就是文件,每一张表就是一个文件,其他数据也是文件形式,比如索引文件。 比如像mysql数据库,其中的数…...
JVM虚拟机-实战篇
专属小彩蛋:前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站(前言 - 床长人工智能教程) 目录 一、内存溢出和内存泄漏 什么是内存泄漏? 二、解决内存泄漏 解决内存泄漏的思路 top命令 发现问题 VisualVM 发现问…...
上岸跨考生的备考经验,送给零基础跨考计算机的你!
九个月的时间绝对是够用的,就算是跨考也够用! 一般来说,专业课要复习三轮,九个月的时间,复习三轮完全够用 复习资料:王道四本书王道真题 打基础阶段:3-6月: 学习目标:…...
js改变图片曝光度(高亮度)
方法一: 原理: 使用canvas进行滤镜操作,通过改变图片数据每个像素点的RGB值来提高图片亮度。 缺点 当前项目使用的是svg,而不是canvas 调整出来的效果不是很好,图片不是高亮,而是有些发白 效果 代码 …...
【NLP笔记】大模型prompt推理(提问)技巧
文章目录 prompt概述推理(提问)技巧基础prompt构造技巧进阶优化技巧prompt自动优化 参考链接: Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing预训练、提示和预测:NL…...
【目标检测】西红柿成熟度数据集三类标签原始数据集280张
文末有分享链接 标签名称names: - unripe - semi-ripe - fully-ripe D00399-西红柿成熟度数据集三类标签原始数据集280张...
Java File类(文件操作类)
背景: 在Java编程语言中,操作文件和目录是一项常见的任务。而File类,则是java.io包中的重要类,它是唯一代表磁盘文件本身的对象。通过File类提供的方法,我们可以轻松地创建、删除、重命名文件和目录等操作。 构造方法&…...
正则表达式 vs. 字符串处理:解析优势与劣势
title: 正则表达式 vs. 字符串处理:解析优势与劣势 date: 2024/3/27 15:58:40 updated: 2024/3/27 15:58:40 tags: 正则起源正则原理模式匹配优劣分析文本处理性能比较编程应用 1. 正则表达式起源与演变 正则表达式(Regular Expression)最早…...
1、goreplay流量回放
目的 在实际项目中,会有大量的回归测试工作,通常会使用自动化代码的手段来实现回归,但是对于一个庞大的系统来说,通过自动化脚本的方式来实现回归测试,又显得很费时费力。并且如果有定期将线上数据同步到测试环境的需求…...
Transformer的前世今生 day06(Self-Attention和RNN、LSTM的区别)
Self-Attention和RNN、LSTM的区别 RNN的缺点:无法做长序列,当输入很长时,最后面的输出很难参考前面的输入,即长序列会缺失上文信息,如下: 可能一段话超过50个字,输出效果就会很差了 LSTM通过忘…...
UDP send 出现大量“Resource temporarily unavailable”
背景 最近排查用户现场环境,查看日志出现大量的“send: Resource temporarily unavailable”错误,UDP设置NO_BLOCK模式,send又发生在进程上下文,并且还设置了SO_SNDBUF 为8M,在此情况下为什么还会出现发送队列满的情况…...
怎么拆解台式电脑风扇CPU风扇的拆卸步骤-怎么挑
今天我就跟大家分享一下如何选购电脑风扇的知识。 我也会解释一下机箱散热风扇一般用多少转。 如果它恰好解决了您现在面临的问题,请不要忘记关注本站并立即开始! 文章目录列表:大家一般机箱散热风扇都用多少转? 机箱散热风扇选择…...
Windows安装Odoo结合内网穿透实现公网访问本地企业管理系统
文章目录 前言1. 下载安装Odoo:2. 实现公网访问Odoo本地系统:3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件,是一个一站式全功能ERP及电商平台。 开源性质:Odoo是一个开源的ERP软件,这意味着企…...
Portainer的替代Dockge?又一个Docker Compose管理器?
Dockge:让Docker Compose管理触手可及,一图胜千言,轻松构建与管控您的容器服务栈!- 精选真开源,释放新价值。 概览 Docker,这一开放源代码的创新平台,旨在实现应用程序部署、扩展与运维的自动化…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...
python基础语法Ⅰ
python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器,来进行一些算术…...
