MQ消息队列
MQ消息队列消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.
目比较常见的MQ实现:
ActiveMQ
RabbitMQ
RocketMQ
Kafka
几种常见MQ的对比:
RabbitMQ
ActiveMQ
RocketMQ
Kafka
公司/社区
Rabbit
Apache
阿里
Apache
开发语言
Erlang
Java
Java
Scala&Java
协议支持
AMQP,XMPP,SMTP,STOMP
OpenWire,STOMP,REST,XMPP,AMQP
自定义协议
自定义协议
可用性
高
一般
高
高
单机吞吐量
一般
差
高
非常高
消息延迟
微秒级
毫秒级
毫秒级
毫秒以内
消息可靠性
高
一般
高
一般
追求可用性:Kafka、 RocketMQ 、RabbitMQ
追求可靠性:RabbitMQ、RocketMQ
追求吞吐能力:RocketMQ、Kafka
追求消息低延迟:RabbitMQ、Kafka
RabbitMQ安装我们同样基于Docker来安装Ra ...
JavaSTL
JavaSTLString定义:
1String s1="HelloWorld"
判断字符是否为空:
1System.out.println(s1.isEmpty());// False
获取字符串长度:
1System.out.println(s1.length()); 10
获取字符串中的某个字符:
1System.out.println(s1.charAT(0)); //H
将字符串转化为全大写或全小写:
12System.out.println(s1.toLowerCase()); //helloworldSystem.out.println(s1.toUpperCase()); //HELLOWORLD
去除字符串前后的空格:
1System.out.println(" hell o world ".trim()); //hell o world
比较字符串:
1s2 ="helloWorld";
1System.out.pringln(s1.equals(s2)); ...
微服务保护
微服务保护和分布式事务微服务保护的方案有很多,比如:
请求限流
线程隔离
服务熔断
这些方案或多或少都会导致服务的体验上略有下降,比如请求限流,降低了并发上限;线程隔离,降低了可用资源数量;服务熔断,降低了服务的完整度,部分服务变的不可用或弱可用。因此这些方案都属于服务降级的方案。但通过这些方案,服务的健壮性得到了提升,
SentinelSentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。官方网站:
https://sentinelguard.io/zh-cn/
Sentinel 的使用可以分为两个部分:
核心库(Jar包):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。在项目中引入依赖即可实现服务限流、隔离、熔断等功能。
控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。
控制台搭建为了方便监控微服务,我们先把Sentinel的控制台搭建出来。
1)下载jar包
2) ...
微服务网关及配置管理
微服务网关及配置管理现在我已经将黑马商城拆分为5个微服务:
用户服务
商品服务
购物车服务
交易服务
支付服务
由于每个微服务都有不同的地址或端口,入口不同,相信大家在与前端联调的时候发现了一些问题:
请求不同数据时要访问不同的入口,需要维护多个入口地址,麻烦
前端无法调用nacos,无法实时更新服务列表
单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,这就存在一些问题:
每个微服务都需要编写登录校验、用户信息获取的功能吗?
当微服务之间调用时,该如何传递用户信息?
网关网关就是网络的关口。数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的路由****和转发以及数据安全的校验。
前端请求不能直接访问微服务,而是要请求网关:
网关可以做安全控制,也就是登录身份校验,校验通过才放行
通过认证后,网关再根据请求判断应该访问哪个微服务,将请求转发过去
在SpringCloud当中,提供了两种网关实现方案:
Netflix Zuul:早期实现,目前已经淘汰
SpringCloudGate ...
微服务服务调用
微服务服务调用把原本本地方法调用,改造成跨微服务的远程调用(RPC,即Remote Produce Call)。
因此,现在查询购物车列表的流程变成了这样:
RestTemplateSpring给我们提供了一个RestTemplate的API,可以方便的实现Http请求的发送。
org.springframework.web.client public class RestTemplate
extends InterceptingHttpAccessor
implements RestOperations
-—————————————————————————————————————
同步客户端执行HTTP请求,在底层HTTP客户端库(如JDK HttpURLConnection、Apache HttpComponents等)上公开一个简单的模板方法API。RestTemplate通过HTTP方法为常见场景提供了模板,此外还提供了支持不太常见情况的通用交换和执行方法。 RestTemplate通常用作共享组件。然而,它的配置不支持并发修改,因此它的配置通常是在启动时准备的。如果需要, ...
MybatisPlus
MybatisPlus基本用法1.引入依赖
12345<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version></dependency>
2.定义Mapper
自定义的mapper需要继承MybatisPlus提供的BaseMapper接口
123public interface UserMapper extends BaseMapper<User>{ }
常见注解MyBatisPlus通过扫描实体类。并基于反射获取实体类信息作为数据库表信息
这个过程遵循一些约定俗成:
驼峰转下划线
名为id发字段作为主键
若不符合约定,则通过注解来得到数据库表信息
@TableName:用来指定表名
@TableId:用来指定表中的主键字段信息
@TableField ...
Spring微信支付实现
Spring微信支付实现时序图:
Spring Cache
Spring CacheSpring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用JCache(JSR-107)注解简化我们开发
Spring Cache 是一个框架,实现了了基于注解的缓存功能,只需要简单地添加一个注解,就能实现缓存功能。
Spring Cache提供了一层抽象,底层可以切换不同的缓存实现,例如:
EHCache
Caffeine
Redis
导入cache的maven坐标:
12345<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> <version>2.7.3</version></dependency>
若你想通过Redis来作为具体的缓存实现,只需在p ...
算法学习笔记-动态规划
动态规划本质:空间换时间
求解步骤:
设计状态
确定状态转移方程
确定初始状态
执行状态转移
计算最终的解
题目递推力扣第70题-爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
12345输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶
示例 2:
123456输入:n = 3输出:3解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶
解答:
12345678910class Solution { public int climbStairs(int n) { int[] F=new int[46]; F[0]=F[1]=1; for(int i=2;i<=n;i++){ F[i]=F[i-1]+F[i-2]; } return F[n]; ...
springboot常用注解整理
Springboot常用注解整理通用1.@Autowired作用:自动注入 Spring 容器中的 bean。
用途:可以用于构造函数、字段或 setter 方法,简化依赖注入的过程。
12@Autowiredprivate UserRepository userRepository;
2. @Component作用:将类标识为 Spring 组件,使其可以被 Spring 管理。
用途:用于任何 Spring 管理的类,如果不适用更特定的注解(如 @Service、@Controller、@Repository),可以使用这个注解。
是一个类级别的注解,通常用于标记一个类作为 Spring 管理的组件。Spring 会自动扫描带有 @Component 注解的类,并将其实例化为 bean。
更常用于自动扫描的组件,适合用于标记服务层、控制器层、数据访问层等。可以与其他注解(如 @Service、@Controller、@Repository)结合使用,以便在语义上更清晰。
1234@Componentpublic class MyComponent { // 业 ...