服务消费微服务
文章目录
- 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,这一开放源代码的创新平台,旨在实现应用程序部署、扩展与运维的自动化…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

Axure Rp 11 安装、汉化、授权
Axure Rp 11 安装、汉化、授权 1、前言2、汉化2.1、汉化文件下载2.2、windows汉化流程2.3、 macOs汉化流程 3、授权 1、前言 Axure Rp 11官方下载链接:https://www.axure.com/downloadthanks 2、汉化 2.1、汉化文件下载 链接: https://pan.baidu.com/s/18Clf…...

VSCode 没有添加Windows右键菜单
关键字:VSCode;Windows右键菜单;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意,实际使用的时候发现 VSCode 在 Windows 菜单栏…...
Three.js + Vue3 加载GLB模型项目代码详解
本说明结合 src/App.vue 代码,详细解释如何在 Vue3 项目中用 three.js 加载并显示 glb 模型。 1. 依赖与插件导入 import {onMounted, onUnmounted } from vue import * as THREE from three import Stats from stats.js import {OrbitControls } from three/examples/jsm/co…...