Spring Cloud--从零开始搭建微服务基础环境【三】

😀前言
本篇博文是关于Spring Cloud–从零开始搭建微服务基础环境【三】,希望你能够喜欢

🏠个人主页:晨犀主页
🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

文章目录

  • 微服务基础环境搭建
    • 创建使用会员微服务模块-service consumer
      • 需求说明/图解
      • 思路分析/图解
      • 实现步骤
        • 创建Moduel & 完成配置
          • 创建member-service-consumer-80 微服务模块[使用会员服务]
          • 修改member-service-consumer-80 的pom.xml , 加入相关依赖
          • 创建resources/application.yml
          • 创建主启动类com/my/springcloud/MemberConsumerApplication.java
        • 业务实现
          • 创建entity
          • 注入RestTemplate
            • 基本介绍
          • Controller
        • 完成测试
          • 首先启动微服务模块: member-service-provider-10000 和member-service-consumer-80
      • 注意事项和使用细节
        • 如果member-service-consumer-80 启动报错:
        • 添加会员数据库中为null 的解决方案
        • 开启Run DashBoard
          • 什么是Run Dashboard
          • 如图
          • 开启Run Daahboard/Service 的步骤

微服务基础环境搭建

创建使用会员微服务模块-service consumer

需求说明/图解

示意图

image-20230825104729176

-浏览器: http://localhost/member/consumer/get/1

image-20230825104749433

测试添加会员: http://localhost/member/consumer/save

image-20230825104914674

image-20230825105008231

思路分析/图解

1、创建Moduel(member-service-consumer-80) & 完成配置
2、创建controller
3、完成测试

实现步骤

创建Moduel & 完成配置

创建member-service-consumer-80 微服务模块[使用会员服务]

由于创建模块步骤一致,这里不做描述。

创建模块完成后,父工程的pom.xml-会做相应变化,管理member-service-consumer-80 微服务子模块

image-20230825105513638

修改member-service-consumer-80 的pom.xml , 加入相关依赖
<?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>e-commerce-center</artifactId><groupId>com.my.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>member-service-consumer-80</artifactId><!--引入相关的依赖: 我们引入了当前需要的依赖,后面如果有其它需要,再灵活调整--><dependencies><!--引入sleuth + zipkin 依赖 说明 1. 使用的是版本仲裁 2.starter-zipkin包含了sleuth  --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency><!--引入eureka client 场景启动器starter--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!--引入web-starter 说明我们使用版本仲裁(从父项目继承了版本)--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--说明:starter-actuator 是springboot程序的监控系统, 可以实现系统的健康检测可以通过http://localhost:10000/actuator 看到相关的连接,和信息--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--引入e_commerce_center-common-api--><dependency><groupId>com.my.springcloud</groupId><artifactId>e_commerce_center-common-api</artifactId><version>${project.version}</version></dependency></dependencies></project>
创建resources/application.yml
server:port: 80
创建主启动类com/my/springcloud/MemberConsumerApplication.java
@SpringBootApplication
public class MemberConsumerApplication {public static void main(String[] args) {SpringApplication.run(MemberConsumerApplication.class,args);}
}

业务实现

创建entity
@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;
}

创建com/my/springcloud/entity/Result.java

/**
* 1. 用于返回结果, 利于json 格式
* 2. 这个工具类, 在网上也可找到
*/
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;}
}
注入RestTemplate
基本介绍

1、RestTemplate 是Spring 提供的用于访问Rest 服务的模板类。

2、RestTemplate 提供了多种便捷访问远程Http 服务的方法。

3、说明:小伙伴可以这样理解, 通过RestTemplate, 我们可以发出http 请求(支持Restful 风格), 去调用Controller 提供的API 接口, 就像我们使用浏览器发出http 请求,调用该API 接口一样。

4、使用简单便捷。

官网及使用

官网地址:https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html

image-20230825111004605

创建配置类: com/my/springcloud/config/CustomizationBean.java

@Configuration
public class CustomizationBean {//说明: 配置注入RestTemplate bean/对象//这里的@LoadBalanced 就是赋予 RestTemplate 负载均衡的能力//默认是使用轮询算法来访问远程调用接口/地址@Bean@LoadBalancedpublic RestTemplate getRestTemplate() {return new RestTemplate();}
}
Controller

创建:com/my/springcloud/controller/MemberConsumerController.java

@RestController
@Slf4j
public class MemberConsumerController {//定义member_service_provider_url 这是一个基础url地址//使用shift+ctrl+u 进行字母大小写的切换/*** 说明:* 1. MEMBER-SERVICE-PROVIDER 就是服务提供方[集群], 注册到Eureka Server 的名称* 2. 也就是服务提供方[集群]对外暴露的名称为 MEMBER-SERVICE-PROVIDER* 3. MEMBER-SERVICE-PROVIDER 目前有 两个 Availability Zones member-service-provider:10000*    还有一个 member-service-provider:10002*    需要增加一个注解@LoadBalanced 赋予 RestTemplate 负载均衡的能力,也就是会根据你的负载均衡算法*    来选择某个服务去访问, 默认是轮询算法, 当然我们也可以自己配置负载均衡算法*/public static final String MEMBER_SERVICE_PROVIDER_URL ="http://MEMBER-SERVICE-PROVIDER"; //后面这里地方会修改成提供服务模块的注册别名//装配RestTemplate bean/对象@Resourceprivate RestTemplate restTemplate;//方法/接口 添加member对象到数据库/表//说明: 这还有一个坑, 一会就解决.@PostMapping("/member/consumer/save")public Result<Member> save(Member member) {log.info("service-consumer member={}", member);//说明//请的完整的url :MEMBER_SERVICE_PROVIDER_URL + "/member/save" => http://localhost:10000/member/save//member : 就是通过restTemplate 发出的post请求携带数据(对象)//Result.class: 返回对象类型//这里通过restTemplate 调用服务提供模块的接口, 就是一个远程调用 RPCreturn restTemplate.postForObject(MEMBER_SERVICE_PROVIDER_URL+ "/member/save", member, Result.class);}//方法/接口 , 根据id 调用服务接口,返回member对象信息@GetMapping("/member/consumer/get/{id}")public Result<Member> getMemberById(@PathVariable("id") Long id) {return restTemplate.getForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/get/" + id, Result.class);}}

完成测试

首先启动微服务模块: member-service-provider-10000 和member-service-consumer-80

浏览器: http://localhost/member/consumer/get/1

image-20230825111512637

注意事项和使用细节

如果member-service-consumer-80 启动报错:

springBoot 启动If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.

//加入排除DataSourceAutoConfiguration 自动配置
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class MemberConsumerApplication {public static void main(String[] args) {SpringApplication.run(MemberConsumerApplication.class, args);}
}

添加会员数据库中为null 的解决方案

通过网络发送相当于流的形式,底层会重新变成对象以json形式传播,不做处理就会添加空。需要通过序列化发送才能反序列化恢复

image-20230825111640248

image-20230825111704396

开启Run DashBoard

什么是Run Dashboard

当springcloud 的服务有多个时,管理多个服务的启动使用run 会不好管理,这样我们就可以使用Run Dashboard。

如图

image-20230825112055848

新版的2020 的IDEA 当你同时启动两个微服务时,不会弹出启动Run Dashboard 窗口的提示,是因为IDEA2020 将Run Dashboard 添加到控制台Service 中

开启Run Daahboard/Service 的步骤
  1. 找到你的项目/.idea/workspace.xml 文件在其中添加下面的代码即可

image-20230825112134016

  1. 重新启动idea2020.2 , 会看到如下界面, 如果没有看到这个Services, 参考第3 步添加一下即可

image-20230825112204153

  1. 如果没有看到这个Services, 添加一下即可

image-20230825112221324

image-20230825112228202

image-20230825112236576

  1. 启动你的微服务,就会在Service 面板上看到各个微服务模块, 也可以进行管理

image-20230825112250634

提醒: 不同版本的IDEA 开启Run DashBoard 有区别,如果和这里IDEA 版本不同,百度下解决。

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战-支付漏洞

免责声明 本文发布的工具和脚本&#xff0c;仅用作测试和学习研究&#xff0c;禁止用于商业用途&#xff0c;不能保证其合法性&#xff0c;准确性&#xff0c;完整性和有效性&#xff0c;请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利&#xff0c…

pdf怎么删除其中一页?

pdf怎么删除其中一页&#xff1f;现在&#xff0c;pdf文件已经深入影响着我们的工作和学习&#xff0c;如果你是一个上班族&#xff0c;那么几乎每天都会使用到pdf格式的电脑文件。当我们阅读一个页数众多的PDF文件时&#xff0c;可能会发现实际上只需要其中的一小部分内容。很…

羊城杯-2023-Crypto

文章目录 Danger_RSA题目描述&#xff1a;题目分析&#xff1a; Easy_3L题目描述&#xff1a;题目分析&#xff1a; XOR贯穿始终题目描述&#xff1a;题目分析&#xff1a; MCeorpkpleer题目描述&#xff1a;题目分析&#xff1a; SigninCrypto题目描述&#xff1a;题目分析&am…

【LeetCode】双指针妙解有效三角形的个数

Problem: 611. 有效三角形的个数 文章目录 题目分析讲解算法原理复杂度Code 题目分析 首先我们来分析一下本题的思路 看到题目中给出的示例 题目的意思很简单&#xff0c;就是将给到的数字去做一个组合&#xff0c;然后看看这三条边是否可以构成三角形。那判断的方法不用我说&a…

【前端】 Layui点击图片实现放大、关闭效果

实现效果&#xff1a;点击图片实现放大&#xff0c;点击空白处关闭效果。下图。 实现逻辑&#xff1a;二维码是使用JQ插件生成的&#xff0c;点击二维码&#xff0c;获取图片路径&#xff0c;通过Layui的弹窗显示放大后的图片。 Html <div id"qrcode" class&quo…

使用maven创建springboot项目

创建maven快速启动项目 命令行或者idea、eclipse快捷创建也可以 pom.xml下project项目下导入springboot 父工程 <!--导入springboot 父工程--> <parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.bo…

Mysql数据库事务隔离级别造成死锁

场景:如下代码,获取数据库连接,删除权限的时候,会造成数据库死锁. 代码 日志&#xff1a; 数据库&#xff1a; SHOW OPEN TABLES where In_use > 0; 问题分析&#xff1a;测试环境Centos7操作系统&#xff0c;Mysql5.7.40版本程序运行正常&#xff0c;开发环境Windows操…

lv3 嵌入式开发-3 linux shell命令(文件搜索、文件处理、压缩)

目录 1 查看文件相关命令 1.1 常用命令 1.2 硬链接和软链接 2 文件搜索相关命令 2.1 查找文件命令 2.2 查找文件内容命令 2.3 其他相关命令 3 文件处理相关命令 3.1 cut 3.2 sed 过滤 3.3 awk 匹配 4 解压缩相关命令 4.1 解压缩文件的意义 4.2 解压缩相关命令 1 …

vue3 ref reactive响应式数据 赋值的问题

文章目录 vue3 ref reactive响应式数据 赋值的问题场景1:将响应式数据赋值请求后的数据错误示范&#xff1a;直接赋值正确写法 场景2&#xff1a;响应式数据解构之后失去响应式原因分析解决办法 toRefs/toRef方法创建ref引用对象 vue3 ref reactive响应式数据 赋值的问题 doing…

docker安装及使用-Linux

前提 确保docker支持当前系统版本&#xff0c;docker支持centos 7及以上版本&#xff0c;要求Linux内核版本不低于3.10 cat /etc/redhat-release #查看系统版本 查看内核版本三种方式 cat /proc/version uname -a uname -r 一、安装docker 0、卸载docker&#xff08;根…

VLDB 2023 | CDSBen: 字节跳动 veDB 数据库存储系统性能测试模型

背景 随着业务爆炸式增长与云原生技术的日渐成熟&#xff0c;大量云原生分布式数据库产品如雨后春笋般涌现&#xff0c;其中一部分主打 OLTP 场景的分布式数据库强调的是从计算-存储分离架构获得弹性收益&#xff1b;对于业界各种计算-存储分离架构的数据库而言&#xff0c;怎么…

Weblogic漏洞(三)之 Weblogic 弱口令、任意文件读取漏洞

Weblogic 弱口令、任意文件读取漏洞 环境安装 此次我们实验的靶场&#xff0c;是vnlhub中的Weblogic漏洞中的weak_password靶场&#xff0c;我们 cd 到weak_password&#xff0c;然后输入以下命令启动靶场环境&#xff1a; docker-compose up -d输入以下的命令可以查看当前启…