横沥做网站,网站怎么上传ftp,公司如何在百度宣传,免费发布黄页广告网站1.微服务
简单来说#xff0c;微服务架构风格[1]是一种将一个单一应用程序开发为一组小型服务的方法#xff0c;每个服务运行在 自己的进程中#xff0c;服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并 且可通过全自动部署机制独立部署。这…1.微服务
简单来说微服务架构风格[1]是一种将一个单一应用程序开发为一组小型服务的方法每个服务运行在 自己的进程中服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并 且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理服务可用不同的语言开 发使用不同的数据存储技术
1.1单体架构 优点: 1:部署简单:由于是完整的结构体可以直接部署在一个服务器上即可。 2:技术单一:项目不需要复杂的技术栈往往一套熟悉的技术栈就可以完成开发。 缺点: 1:系统启动慢一个进程包含了所有的业务逻辑涉及到的启动模块过多导致系统的启动、重 启时间周期过长; 2:系统错误隔离性差、可用性差任何一个模块的错误均可能造成整个系统的宕机; 3:可伸缩性差:系统的扩容只能只对这个应用进行扩容无法结合业务模块的特点进行伸缩。 4: 线上问题修复周期长:任何一个线上问题修复需要对整个应用系统进行全面升级。 5: 跨语言程度差- 6: 不利于安全管理所有开发人员都拥有全量代码。 项目规模比较小。 WMS OA办公系统 1.2微服务的特点 1:微服务是一种 项目架构思想(风格) 2:微服务架构是一系列小服务的组合组件化与多服务) 3:任何一个微服务都是一个独立的进程(独立开发、独立维护、独立部署) 4:轻量级通信http协议(跨语言,跨平台) 5:服务粒度(围绕业务功能拆分---模块拆分【系统管理服务】【日志服务】【焦虑测试】【抑郁测试系 统】) 6:去中心化管理(去中心化地治理技术、去中心化地管理数据) 1.3微服务框架的优势 1.易于开发和维护 一个微服务只关注一个特定的业务功能所以它的业务清晰、代码量较少。开发和维护单个微服务相对 比较简单整个应用是由若干个微服务构建而成所以整个应用也会维持在可控状态; ⒉.单个微服务启动较快 单个微服务代码量较少所以启动会比较快; 3.局部修改容易部署 单体应用只要有修改就要重新部署整个应用微服务解决了这样的问题。一般来说对某个微服务进 行修改只需要重新部署这个服务即可 4.技术栈不受限 在微服务中我们可以结合项目业务及团队的特点合理地选择技术栈 5.按需伸缩 焦虑系统访问量大只需要对焦虑系统进行扩展 1.4SpringCloud与微服务关系 Springcloud为微服务思想提供了完美的解决方案 Springcloud是一些列框架的集合体服务的注册与发现【注册中心】、服务间远程调用、服务降级、服务熔断、服务限流、分布式事务网关等等) 一般我们说springc1oud 其实指的是Springc1oud-netflixSpringcloud并不是造轮子只是把Netflix公司的组件做二次开发。 1.6SpringBoot和SpringCloud关系 SpringBoot专注于快速方便的开发单个个体微服务。 SpringCloud是关注全局的微服务协调、整理、治理的框架它将SpringBoot开发的单体整合并管理起来。 SpringBoot可以离开SpringCloud独立使用开发项目但是SpringCloud离不开SpringBoot属于依赖关系。 2.搭建
springboot要3.0.0
1.父模块的pom
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.0.0/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.ghx/groupIdartifactIddemowei02-parent/artifactIdversion0.0.1-SNAPSHOT/versionnamedemowei02-parent/namedescriptiondemowei02-parent/descriptionmodulesmodulespringcloud-common/modulemodulespringcloud-product/modulemodulespringcloud-order/module/modules!-- 父工程管理的子模块--!-- 打包方式--packagingpom/packaging!-- 定义版本号 --propertiesjava.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncoding!-- springcloud的版本 --spring-cloud.version2022.0.0/spring-cloud.version!-- springcloud阿里巴巴的版本 --spring-cloud-alibaba.version2022.0.0.0-RC1/spring-cloud-alibaba.version/properties!-- dependencyManagement:他只负责jar的管理不负责jar的下载。子模块在引用时无需再指定版本号 --dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project2.1
package com.ghx.order.service.impl;import com.ghx.common.entity.Order;
import com.ghx.common.entity.Product;
import com.ghx.order.dao.OrderDao;
import com.ghx.order.feig.ProducFeign;
import com.ghx.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.net.URI;
import java.util.List;
import java.util.Random;/*** author guo* date Created in 2025/2/28 15:07* description* version:*/
Service
public class OrderServiceImpl implements OrderService {Autowiredprivate RestTemplate restTemplate;Autowiredprivate OrderDao orderDao;Overridepublic String insert(int num,int pid) {Order order new Order();order.setNumber(num);order.setUid(1);order.setUsername(guo);//获取商品的信息通过HTTP协议调用其他微服务。自己封装Http工具》spring提供RestTemplate 没有交于spring管理//url: 路径--服务提供者的路径//Class: 返回值类型反射类Product productrestTemplate.getForObject(http://localhost:8001/product/getById?pidpid, Product.class);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setPid(product.getPid());int insert orderDao.insert(order);return insert 0 ? 下单成功 : 下单失败;}
}
3.服务治理 服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。 服务注册在服务治理框架中都会构建一个*注册中心*每个服务单元向注册中心登记自己提供服务的详细信息。并在注册中心形成一张服务的*清单*服务注册中心需要以*心跳30s 90s*的方式去监测清单中 的服务是否可用如果不可用需要在服务清单中剔除不可用的服务。 服务发现服务调用方向服务注册中心咨询服务并获取*所有服务*的实例清单实现对具体服务实 3.1常见的注册中心软件 Zookeeper zookeeper是一个分布式服务框架是Apache Hadoop 的一个子项目它主要是用来解决分布式 应用中经常遇到的一些数据管理问题如统一命名服务、状态同步服务、集群管理、分布式应用 配置项的管理等。 Eureka Eureka是Springcloud Netflix中的重要组件主要作用就是做服务注册和发现。但是现在已经闭 源 停更不停用。 Consul Consul是基于GO语言开发的开源工具主要面向分布式服务化的系统提供服务注册、服务发现 和配置管理的功能。Consul的功能都很实用其中包括服务注册/发现、健康检查、Key/Value 存储、多数据中心和分布式一致性保证等特性。Consul本身只是一个二进制的可执行文件所以 安装和部署都非常简单只需要从官网下载后在执行对应的启动脚本即可。 Nacos (服务治理 配置中心) Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它是 Spring Cloud Alibaba 组件之一负责服务注册发现和服务配置. [服务治理的作用和微服务配置管理] 3.2nacos服务治理
1.引入依赖
!-- nacos--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency
2.配置注册中心的地址和名称例如
#设置注册中心的地址
spring.cloud.nacos.server-addrlocalhost:8848
spring.application.namespringcloud-product
3.获取
Service
public class OrderServiceImpl implements OrderService {Autowiredprivate RestTemplate restTemplate;Autowiredprivate OrderDao orderDao;Autowired//可以获取注册中心的服务private DiscoveryClient discoveryClient;Overridepublic String insert(int num,int pid) {Order order new Order();order.setNumber(num);order.setUid(1);order.setUsername(guo);//获取商品的信息通过HTTP协议调用其他微服务。自己封装Http工具》spring提供RestTemplate 没有交于spring管理//url: 路径--服务提供者的路径//Class: 返回值类型反射类ListServiceInstance instances discoveryClient.getInstances(springcloud-product);ServiceInstance serviceInstance instances.get(0);String path serviceInstance.getUri().toString();
// Product productrestTemplate.getForObject(http://localhost:8001/product/getById?pidpid, Product.class);Product productrestTemplate.getForObject(path/product/getById?pidpid, Product.class);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setPid(product.getPid());int insert orderDao.insert(order);return insert 0 ? 下单成功 : 下单失败;}
} 4.负载均衡 4.1手动写
package com.ghx.order.service.impl;import com.ghx.common.entity.Order;
import com.ghx.common.entity.Product;
import com.ghx.order.dao.OrderDao;
import com.ghx.order.feig.ProducFeign;
import com.ghx.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.net.URI;
import java.util.List;
import java.util.Random;/*** author guo* date Created in 2025/2/28 15:07* description* version:*/
Service
public class OrderServiceImpl implements OrderService {Autowiredprivate RestTemplate restTemplate;Autowiredprivate OrderDao orderDao;Autowired//可以获取注册中心的服务private DiscoveryClient discoveryClient;Overridepublic String insert(int num,int pid) {Order order new Order();order.setNumber(num);order.setUid(1);order.setUsername(guo);//获取商品的信息通过HTTP协议调用其他微服务。自己封装Http工具》spring提供RestTemplate 没有交于spring管理//url: 路径--服务提供者的路径//Class: 返回值类型反射类ListServiceInstance instances discoveryClient.getInstances(springcloud-product);int index new Random().nextInt(instances.size());ServiceInstance serviceInstance instances.get(index);String path serviceInstance.getUri().toString();order.setPname(product.getPname());order.setPprice(product.getPprice());order.setPid(product.getPid());int insert orderDao.insert(order);return insert 0 ? 下单成功 : 下单失败;}
} 4.2使用springcloud LoadBalancer
1.添加依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId
/dependency
2.在RestTemplate类上使用LoadBalanced 3.修改代码
package com.ghx.order.service.impl;import com.ghx.common.entity.Order;
import com.ghx.common.entity.Product;
import com.ghx.order.dao.OrderDao;
import com.ghx.order.feig.ProducFeign;
import com.ghx.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.net.URI;
import java.util.List;
import java.util.Random;/*** author guo* date Created in 2025/2/28 15:07* description* version:*/
Service
public class OrderServiceImpl implements OrderService {Autowiredprivate RestTemplate restTemplate;Autowiredprivate OrderDao orderDao;Autowired//可以获取注册中心的服务private DiscoveryClient discoveryClient;Overridepublic String insert(int num,int pid) {Order order new Order();order.setNumber(num);order.setUid(1);order.setUsername(guo);//获取商品的信息通过HTTP协议调用其他微服务。自己封装Http工具》spring提供RestTemplate 没有交于spring管理//url: 路径--服务提供者的路径//Class: 返回值类型反射类ListServiceInstance instances discoveryClient.getInstances(springcloud-product);int index new Random().nextInt(instances.size());ServiceInstance serviceInstance instances.get(index);String path serviceInstance.getUri().toString();Product productrestTemplate.getForObject(http://springcloud-product/product/getById?pidpid, Product.class);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setPid(product.getPid());int insert orderDao.insert(order);return insert 0 ? 下单成功 : 下单失败;}
} 4.3使用openfeign完成服务调用
原来使用restTemplate完成服务之间的调用: 它不符合我们的编程习惯。---在某层需要另一层的对象时直接通过Autowire注入并通过对象调用其他的方法传入相关的参数。
4.3.1什么是OpenFeign
OpenFeign是Spring Cloud提供的一个声明式的伪Http客户端 它使得调用远程服务就像调用本地服务一样简单 只需要创建一个接口并添加一个注解即可。
Nacos很好的兼容了OpenFeign OpenFeign负载均衡默认集成了SpringCloudLoadBalance 所以在Nacos下使用OpenFegin默认就实现了负载均衡的效果。 4.3.2使用
1.引入依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId
/dependency
2.创建openfeign接口
package com.ghx.order.feig;import com.ghx.common.entity.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;/*** author guo* date Created in 2025/3/3 11:34* description* version:*/
FeignClient(value springcloud-product)
public interface ProducFeign {GetMapping(/product/getById)public Product getById(RequestParam Integer pid);
}
3.开启openfeign注解驱动 4.修改代码