SpringCodel微服务

news/2024/12/19 14:32:27/文章来源:https://www.cnblogs.com/woaini-xiaoan/p/18616347

SpringCodel微服务

docker启动命令:

systemctl start docker   启动docker
systemctl status docker  查看docker状态
systemctl enable docker  设置开机自启

设置容器开机自启

docker update status=aways 容器名

docker ps 格式化输出容器内容

(1)--format "docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}\t"

(2)自定义系统命令别名 /root/.bashrc

(3) 完成修改后需要让目录刷新一下 source /root/.bashrc

git查看用户名和emial命令

git config --global --list       查看修改
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

注意:修改需要新建一个目录,在新的目录里面去修改,不然改不了,对之前创建和使用的仓库不生效

SPI 自动加载,不根据包扫描 、、条件配置@ConditionalOnClass

  • nginx 配置文件 /conf/nginx.conf
  • 重要配置节点 http (发送的是http请求,此时就被这个节点处理)
    • server
      • listen (根据端口号决定找哪个server(虚拟主机))
      • location 根据路劲确定访问那个资源

  • 单体架构

    • 所有的项目都在一个项目中去开发
      • 特点:只打成一个jar包或者war包,只使用一个数据库
        • 优点:开发简单,部署简单,开发周期短
        • 缺点:团队协作困难大,协作成本高,代码jar包冲突频率高,系统发布效率低,扩展困难
      • 适用场景:小项目或者创业型小企业
  • 微服务架构

    • 服务:提供一个完整的功能的内容!(小到工具类、接口,大到一个工程模块),实际开发中具备独立完整功能一个项目模块

    • 核心思想:拆分(横向拆分、垂直拆分)

    • 特点:

      • 每一个服务连接单独的数据库
      • 每一个服务单独打包,单独部署
      • 指责单一
      • 团队协作方便(团队自治)
      • 服务自治
    • 优点:

      • 有利于项目的扩展与维护服务之间解耦,易于理解和维护

      • 每个服务可以独立扩展,提高资源利用效率

    • 缺点:

      • 项目复杂性增加
      • 管理困难
      • 不便于维护和监控
    • 适用场景:大型公司

    微服务项目一定是分布式项目

springCloud

  • spring cloud
    • spring cloud 微服务开发组件集合
    • spring cloud 和 spring boot
      • spring clode 是基于spring boot 他俩是一一对应的
      • spring cloud 是按照spring boot 约定编写的组件
    • spring cloud Alibaba
      • spring cloud 汇集 全球知名顶尖公司 微服务开发过程中长期时间的好用的组件和解决方案的集合!

springboot与springCloud的版本控制

@RequiredArgsConstructor 自动创建构造器 构造器注入

负载均衡

服务端负载均衡

  • 客户端:服务调用方称为客户端(购物车服务)
  • 服务端:服务被调用方成为服务端(商品服务)

Nginx负载均衡

在nginx中,conf/conf.html文件中修改 添加这一段

http {upstream item_services {server 127.0.0.1:8081 weight=3;  # 分配较高权重server 127.0.0.1:7081 weight=2;  # 分配中等权重server 127.0.0.1:6081 weight=1;  # 分配较低权重}server {listen       80;  # 监听 80 端口,也可以根据需要更改server_name  localhost;  # 更改为你的域名或 IP 地址location /items {  # 这里可以根据需要调整路径前缀proxy_pass http://item_services;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 其他可选配置proxy_redirect off;proxy_buffering off;proxy_read_timeout 90;}}
}

添加完成后

重启或者重新加载nginx,需要在nginx所在的目录cmd,然后输入命令

1、首先需要向IOC容器中注入RestTemplate,RestTemplate用来进行发网络请求

2、首先先要在实现类里面注入RestTemplate

3、然后调用它里面的exchange方法

restTemplate.exchange("请求路径","请求方式","请求实体","返回值类型","请求参数")

		ResponseEntity<List<ItemDTO>> response = restTemplate.exchange("http://localhost:80/items?ids={ids}",HttpMethod.GET,//请求方式null,//请求实体new ParameterizedTypeReference<List<ItemDTO>>() {},//返回值类型CollUtils.join(itemIds, ","));//请求参数//处理结果List<ItemDTO> items = null;if(response.getStatusCode().is2xxSuccessful()){//查询成功,获取响应结果items = response.getBody();}

这样nginx就能实现负载均衡,根据权重能分发请求了。

服务端负载均衡是客户端请求到Nginx服务端有Nginx实现负载均衡。

客户端负载均衡是客户端在发起调用时自己实现了负载均衡的作用,自己通过负载均衡算法找到一个目标服务进行调用。

服务注册与发现流程

注册中心:提供服务注册接口,接受服务注册请求,保存服务实例信息,开源的注册中心中间件有很多,如Eureka、Nacos、Consul等

服务提供者:服务接口提供方,请求注册中心将服务信息注册到注册中心。

服务调用者:远程调用客户端,请求注册中心查询服务地址,通过负载均衡器选取目标服务地址进行调用。

服务注册于发现的流程:

  • 服务启动时就会注册自己的服务信息到注册中心。
  • 调用者可以从注册中心订阅想要的服务
  • 调用者作为客户端自己通过负载均衡算法挑选一个服务提供者实例进行远程调用,即客户端负载均衡
  • 调用者向该实例发起远程调用

代码实现步骤:

  • 引入依赖
  • 配置Nacos地址
  • 重启项目

依赖

<!--spring cloud-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><!--   type=pom ,scope=import 表示继承 和 parent 作用一样             --><type>pom</type><scope>import</scope>
</dependency>
<!--spring cloud alibaba-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope>
</dependency>

约定nacos-client版本

<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.4.0</version>
</dependency>

在服务提供者里面添加依赖,让nacos发现,项目启动时能够注册到注册中心

<!--nacos 服务注册发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

导完依赖后还需要再配置文件中加入这段代码

spring:application:name: item-service # 服务名称cloud:nacos:server-addr: 192.168.101.68:8848 # nacos地址

做完以上操作后即可重启项目,项目启动时,需要注意观察log日志,如果出现Success to connect to server [192.168.101.68:8848] on start up, connectionId ... 则表示注册成功

访问http://192.168.101.68:8848/nacos/即可看到

但是现在又是服务端跟注册中心连接了,而客户端还没有,所以现在需要让客户端也连接注册中心

<!--nacos 服务注册发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
spring:application:name: item-service # 服务名称cloud:nacos:server-addr: 192.168.101.68:8848 # nacos地址

这样客户端就能连接上注册中心了

但是现在这个服务名称nacos不认识,它只是一个地址,所以,此时需要负载均衡器

在服务提供者里面引入负载均衡器

<!--负载均衡器-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

此时nacos就可以通过负载均衡器来获取地址了,但是restTemplent它不知道,所以还得给它加一个注解@LoabBalanced

在新版本的SpringCloud中使用负载均衡器是 loadbalancer 而不再使用ribbion 应为它已经被淘汰了

OpenFeign

使用以上方式,代码量多,容易写错,所以使用OpenFeign能够大大减少代码错误,并且代码量也减少了很多

OpenFeign 是用来简化微服务间调用的组件!

开发步骤:

  • 引入依赖
  • 开发一个接口 @FeignClient 定义一个方法(参考服务提供方的controller)
  • 在引导类开启feign调用@EnableFeignClients

1、在服务的调用放引入OpenFeign 依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--负载均衡器-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

2、创建一个接口

@FeignClient(name = "item-service" path="/items")
public interface ItemClient {@GetMapping("/{id}")Item getItem(@PathVariable("id") String id);(根据提供方的controller来写)
}

3、在代码中注入接口

4、实现方法

5、在启动类上加@EnableFeignClients注解

现在重启项目即可

动态代理

1、动态代理(dynamic proxy)

​ 在运行时候,在JVM中动态 针对某一个类或者接口,产生一个对象

​ 特点:在不改变原有的类或者方法的基础上实现对类或者方法的增强

2、实现方法

  • 方法一:java的jdk中提供了一个类 Proxy静态方法 newProxyInstance(参数1,参数2,参数3)
    • 参数1:类加载器:负责加载.class文件到jvm内存
  • 方式二:Cglib中提供了一个类 Enhancer(英文:增强),方法 setSupperClass(...)

3、为什么要使用动态代理

增强一个类,在基础阶段,只有一种手段 就是继承!继承来实现类增强是有缺陷的,会造成子类爆炸,而且对方法破坏!于是动态代理就产生了,在不改变原有的代码的基础上对代码进行增强。

开发步骤:

  1. 必须要先定义一个接口
  2. 基于接口定义一个实现类
  3. 基于Proxy产生代理对象

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

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

相关文章

验证云通行证失败, 请求连接无效

新合新公有云登录协同开发平台登录时提示"验证云通行证失败, 请求连接无效", 其他私有环境都正常 解决方案: 需要通过金蝶引导程序更新一下BOS程序

给我2分钟,保证教会你在Vue3中实现一个定高的虚拟列表

前言 虚拟列表对于大部分一线开发同学来说是一点都不陌生的东西了,有的同学是直接使用第三方组件。但是面试时如果你简历上面写了虚拟列表,却给面试官说是通过三方组件实现的,此时空气可能都凝固了。所以这篇文章欧阳将会教你2分钟内实现一个定高的虚拟列表,至于不定高的虚…

盘点2024年10款最热门LLM网关/AI网关

随着人工智能技术的飞速发展,将大型语言模型(LLM)部署到生产环节变得日益复杂。特别是在AI和基于LLM的API需求激增的当下,这一挑战尤为突出。Gartner的预测显示,到2026年,由AI和LLM工具驱动的API需求将激增超过30%,这无疑强调了高效模型管理的重要性。 在这方面,企业面…

第四天案例练习-banner效果

Banner设计:是一种用于展示品牌、产品或服务信息的网络广告设计。 通常以横幅的形式出现在网页或移动端屏幕的顶部,也可以在社交媒体平台上使用<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name=&q…

从5天到1天,某大型国有集团的数智化转型经历了什么?

“只有决策快、公司运营快之后,公司才能实现降本增效”。 从北京到新疆、从中国到南非,从奥运会场馆的水泥混凝土到钱塘江畔拔地而起的高楼房产,无不存在着某大型国有集团的身影。 历经60多年沧桑巨变,该集团已发展成为以“新型绿色环保建材制造、贸易及服务,房地产开发经…

旅游开发流程中办公软件的关键作用,你知晓否?

在旅游行业的运营中,产品设计与客服协作的流畅性直接影响着游客的体验和公司的效益。对于 MBTI 中偏好秩序与规划的 J 人来说,选择合适的可视化团队协作办公软件尤为关键。这类软件能够让旅游业务流程清晰透明,促进各部门高效沟通与协作,提升工作效率与个人学习能力。以下将…

13-MSF常见漏洞复现

1、MS08-067、MS10-018漏洞复现,对比bind和reverse攻击模式的区别MS08-067 环境:使用kali中的MSF工具攻击Windows XP开启msfconsole,搜索MS08-067漏洞,进入漏洞利用模块 msfconsole search ms08-067 use exploit/windows/smb/ms08_067_netapi 查看配置项show options设置相…

vue-节流防抖函数的使用

第一步 安装underscore.js第二步引入

Map集合类和Set集合类介绍和题目演练

Map集合的介绍、定义和特点 Map是一种将键(key)映射到值(value)的对象。在Java中,它是一个接口,有像HashMap、TreeMap等多种实现类。定义:以键值对(key - value)的形式存储数据。键是唯一的,通过键可以快速查找、获取对应的值。例如,存储学生学号(键)和学生姓名(…

vue-实现loading页面

效果实现步骤 第一步先编写一个加载页面在APP.vue中引入将控制加载的变量添加到状态管理库中例如pinia或VueX中在loading页面中导入常量并控制主体是否显示在请求拦截器和响应拦截器里配置

超绝!基站/Wi-Fi/GPS定位技术详解与应用示例

今天特别分享定位相关示例,欢迎大家一起来探讨。一、基站/Wi-Fi/GPS定位概述 1.1 基站定位原理 基站定位也就是“LBS定位”,全称是Location Based Service,它包括两层含义: 首先是确定移动设备或用户所在的地理位置;其次是提供与位置相关的各类信息服务。意指与定位相关的…

LuaTools日志相关内容来喽~帮工程师朋友解决99%的问题

本文将详细介绍LuaTools日志的相关内容,帮助你解决在使用过程中可能遇到的99%的问题。 LuaTools新版下载/使用教程: https://docs.openluat.com/Luatools/ 一、LuaTools日志分类 LuaTools包括4种日志:工具本身的日志、用户日志、底层日志、死机日志。 1. 工具本身的日志 在工…