自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 Spring Cloud Alibaba微服务从入门到进阶(八)(消息驱动的微服务-Spring Cloud Alibaba RocketMQ)

微服务集成了Stream,Stream的Destination Binder创建了两个Binding,左边的Binding连接Rabbit MQ右边的Binding连接Kafka,左边的Binding从Rabbit MQ消费消息,然后通过中间这段代码处理,把处理结果输送到Kafka里面。前往http://rocketmg.apache.org/release notes/release-notes-4.51/,下载 Binary 文件即可。分布式事务消息的三种状态(半消息不属于消息事务状态)

2024-03-18 22:00:58 522

原创 Spring Cloud Alibaba微服务从入门到进阶(七)(服务容错-Sentinel)

调用服务后再刷新控制台,可以看到服务(sentinel和ribbon一样都是懒加载的)我们把基础服务故障,导致上层服务故障,并且这个故障不断放大的过程,成为雪崩效应。将注解加在服务初始化类上,就可以给RestTemplate整合Sentinel了。服务整合Sentinel后,通过actuator/sentinel可以访问到。配置sentinel流控规则,实现效果是“一个默认用户”,而不是抛异常了。(断路器模式设计了半开状态,远程api恢复后,断路器可以再次闭合。

2024-03-17 11:12:24 707

原创 Spring Cloud Alibaba微服务从入门到进阶(六)(声明式HTTP客户端-Feign)

尽量使用Feign,杜绝RestTemplate 不要让他们两个在一个项目里共存,大多数情况下共存带来的往往不是相得益彰,都是问题!(只要声明一个接口,Feign就会通过你定义的接口自动给你构造请求的目标地址,并帮助你请求)在前面的例子中,我们的FeignClient调用的都是注册在Nacos上的微服务api。现在实现用FeignClient调用一个没有注册在Nacos上的外部服务接口。用Feign重构前面RestTemplate方式的服务间调用。改造前面RestTemplate请求的代码。

2024-03-16 09:02:10 530

原创 Spring Cloud Alibaba微服务从入门到进阶(五)(负载均衡-Ribbon)

服务集成Ribbon后,会自动获取Nacos Server注册中心的服务列表,用负载均衡算法计算出一个实例,交给RestTemplate去请求。因为Nginx是部署在服务器端的,所以用Nginx实现的负载均衡被称为服务器端负载均衡。Ribbon是Netflix开源的客户端负载均衡器。加注解 @LoadBalanced。Ribbon内置的负载均衡规则。手写一个客户端侧负载均衡器。1、服务器端负载均衡。项目整合Ribbon。

2024-03-16 07:55:19 906

原创 Spring Cloud Alibaba微服务从入门到进阶(四)(服务发现-Nacos )

在SpringCloud子项目中,Feign是属于OpenFeign,Sentinel、Nacos是属于alibaba的,记住这些可以帮助我们快速添加依赖。访问nacos,默认 用户/密码 nacos/nacos。作为服务发现注册组件Nacos Server。启动服务,就注册到Nacos上了。加注解(现在可以不加了)

2024-03-14 22:13:55 657

原创 Spring Cloud Alibaba微服务从入门到进阶(三)(Spring Cloud Alibaba)

项目整合Spring Cloud Aliibaba,要先整合Spring Cloud。Spring Cloud Alibaba的主要组件(红框内是开源的)Spring Cloud提供了很多分布式功能。是spring Cloud的子项目。Spring Cloud常用子项目。是快速构建分布式系统的工具集,

2024-03-13 14:51:57 470

原创 Spring Cloud Alibaba微服务从入门到进阶(二)(SpringBoot配置 .properties、 .yml、Spring Boot Profile)

如果工程中同时存在application.properties文件和 application.yml文件,yml文件会先加载,而后加载的properties文件会覆盖yml文件。需要配置多个application-xxx-properties文件,application.properties文件用来配置是所有环境公用的配置。.properties文件,通过 . 来连接,通过 = 来赋值,结构上,没有分层的感觉,但比较直接。为在不同环境下使用不同的配置提供了支持,我们可以通过指定参数方式快速切换环境。

2024-03-12 22:45:15 484

原创 Spring Cloud Alibaba微服务从入门到进阶(一)(SpringBoot三板斧、SpringBoot Actuator)

访问显示结果:status=UP表示健康,total总磁盘量,free剩余,free剩余低于threshold就预示是不健康的。其中localhost:8080/actuator/info,是Actuator描述型端点,加配置,访问可以查到配置信息。Actuator只有Health、info是默认暴露的端点,Actuator其他端点需要配置才能暴露出来。太多了,选择性激活,在配置里配上就行。Actuator health状态。SpringBoot导航端点。所有端点都可以看到了。

2024-03-11 22:54:11 628

原创 Maven的settings.xml配置

举个例子,http://maven.NET.cn/content/groups/public/ 是中央仓库 http://repo1.maven.org/maven2/ 在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务。镜像是仓库的镜子,保存了被镜像仓库的所有的内容,主要针对远程仓库而言。**标签servers:**一般,仓库的下载和部署是在pom.xml文件中的repositories和distributionManagement元素中定义的。profile的唯一标识。

2024-03-04 14:51:31 482

原创 负载均衡Ribbon和LoadBalancer

是一个客户端负载均衡器,它是一个Java库,可以在客户端应用程序中使用。通过在客户端应用程序中维护服务实例列表,并使用负载均衡算法来选择要请求的服务实例,从而实现负载均衡。Ribbon适用于客户端负载均衡,它是一个进程内负载均衡,将负载均衡逻辑集成到消费方进程中,消费者通过它来获取到服务提供方的地址。是一个服务器端负载均衡器,它是一个独立的服务,可以在服务器集群中运行。LoadBalancer通过接收客户端请求,并使用负载均衡算法来选择要处理请求的服务器实例,从而实现负载均衡。

2024-02-29 17:06:24 844

原创 Hutool对象转JSON详解

在日常开发中,我们可能会遇到一些需要将日期转换为固定格式的场景,在Hutool中,我们可以使用JSONUtil中的特性来实现。以上代码中的obj为Java对象,将其通过BeanUtil转换为Map,然后为Map中的Date类型字段按照指定格式格式化,最后使用JSONUtil将其转换为JSON字符串。我们也可以使用Hutool的BeanUtil将Java对象转换为Map,然后使用JSONUtil将其转换为JSON字符串。以上代码中的jsonStr是JSON格式的字符串,T代表Java对象。

2024-01-30 11:11:20 4480

转载 Java获取请求者的IP地址

import javax.servlet.http.HttpServletRequest;import java.net.InetAddress;import java.net.UnknownHostException;/**http工具类*/public class HttpUtils {/**获取请求ip@param request@return*/public static String getIP(HttpServletRequest request){String

2022-04-21 15:30:39 5895

原创 多线程并发

业务需求有一张表,字段很多,每天通过跑job进行维护数据,数据来源是访问7,8个接口来拼凑成表中所有数据。1.传统写法按顺序分别调用每个接口,然后取出来数据拼凑到表对应类里面,这样拼凑后插入到表中一条数据大约要14s,1分钟4条。而需要同步的用户数据有上万条,也就是每天更不同步不完。2.并发写法用Future并发调用所有接口,执行时间就是最久返回的接口的调取数据时间。通过xx.get获取获取数据。大概就是用到spring异步注解(@Async) ,Future 接口 调用结果 之后 就能自己阻

2021-06-09 14:48:17 134

原创 mybatis配置多数据源

先将spring boot自带的DataSourceAutoConfiguration禁掉,因为它会读取application.properties文件的spring.datasource.*属性并自动配置单数据源。在@SpringBootApplication注解中添加exclude属性即可:@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class})public class Application {

2021-04-27 17:21:18 2076 1

原创 redis 雪崩、穿透、击穿

缓存雪崩指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,然后大量并发请求转发到DB,导致数据库、CPU和内存负载过高,甚至宕机。解决方案1、将缓存失效时间分散开,比如我们可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。2、Redis 中保存的 key 永不失效,这样就不会出现大量缓存同时失效的问题,但是随之而来的就是Redis 需要更多的存储空间。3、优化缓存过期时间,设计缓存时,为每一个 key

2021-04-25 16:30:34 121

原创 maven知识点

Maven 用于Java 平台的项目构建、依赖管理和项目信息管理。Maven 要负责项目的自动化构建,以编译为例,Maven 要想自动进行编译,那么它必须知道 Java 的源文件保存在哪里,这样约定之后,不用我们手动指定位置,Maven 能知道位置,从而帮我们完成自动编译。Maven 常用命令mvn clean :清除项目目录中的生成结果。mvn compile :编译源代码。mvn package :根据项目生成的 jar/war 等。mvn install :在本地 Repository 中

2021-04-10 11:11:51 131

原创 线程池

定长线程池1.newFixedThreadPoolpublic class OneMoreStudy { public static void main(String[] args) { ExecutorService fixedThreadPool = Executors.newFixedThreadPool(4); for (int i = 0; i < 1000; i++) { final int index = i;

2021-04-10 08:44:56 81

原创 JAVA中循环删除list中元素的方法总结

循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,去科普了一下后发现这是一个误区。下面就来讲一讲:JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。1、for循环遍历listfor(int i=0;i<list.size();i++){ if(list.get(i).equals("del")) list.remove(i);}这种方式的问题在

2021-03-30 16:52:39 416

原创 JDK1.8 新特性

Lambda表达式一、lambda表达式本质上是一段匿名内部类,也可以是一段可以传递的代码例子:筛选不同价格商品信息1.定义商品对象@Datapublic class Product { private Double price; private String color;}2.定义一个MyPredicate接口public interface MyPredicate <T> { boolean test(T t);}3.定义过滤方法及lambda

2021-03-18 17:18:39 229 2

原创 @Transactional实现原理

Transactional是spring中定义的事务注解,在方法或类上加该注解开启事务。主要是通过反射获取bean的注解信息,利用AOP对编程式事务进行封装实现。spring事务注解:自定义一个注解/** * @Target 作用域(作用在方法上,类上,或是属性上) * @Retention 运行周期 * @interface 定义注解 */@Target(value = ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)

2021-03-08 17:07:01 3439

原创 Spring Cloud 知识点(一)

Spring Cloud 是什么Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。SpringCloud的优缺点优点:1.耦合度比较低。不会影响其他模

2021-03-01 23:12:16 183

原创 java 虚拟机(一)

Java虚拟机其实是一种规范,不同的虚拟机对各个区域实现的具体方式是不一样的,今天主要讨论的是现在使用最广的hotspot。虚拟机内存模型示意图程序计数器:这个对我们开发者来说很少了解,但是在程序运行时其实使用频率是最高的,因为在任意确定时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令,为了线程切换又恢复后能回到原来正确的执行位置,每条线程都需要有一个独立的计数器,各条线程之间计数器互不影响,独立存储我们称这类的内存区为”线程私有”的内存。如果线程正在执行的是一个java方法

2021-02-25 22:53:01 90

原创 Mybatis 知识点

什么是Mybatis?(1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。直接编写原生态sql,可以严格控制sql执行性能,灵活度高。(2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。(3)通过xml 文件或注解的方式将要执行的各种 statement 配置

2021-02-22 23:15:50 194

原创 Spring Boot 整理

SpringFramework 最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。

2021-02-21 23:30:56 109

原创 Spring MVC知识点

Spring MVCSpring MVC是一个基于Java的实现了MVC设计模式的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发。MVC的理解MVC全名是Model View Controller模型视图控制器,每个部分各司其职。Model:数据模型,JavaBean的类,用来进行数据封装。View:指JSP、HTML用来展示数据给用户。Controller:用来接收用户的请求,整个流程的控制器。用来进行数据校验等。简单

2021-02-20 23:58:11 203

原创 SpringAOP知识点

SpringAOP的一点理解其实springaop就是一个拦截器,springaop通过代理模式实现方法的拦截。SpringAOP的基本术语1、切面(@Aspect):拦截器类,其中会定义切点以及通知2、通知:切面当中的方法,包括:前置通知(@Before):在动态代理反射原先方法前调用的方法后置通知(@After):在动态代理反射完原有方法后调用的方法返回通知(@AfterReturning):如果方法正常执行,在调用完后置通知后,就调用返回通知异常通知(@AfterThrowing):如

2021-02-19 23:45:28 142

原创 SpringIOC 实现原理

什么是SpringIOCspring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合。控制反转是一种通过描述(在Java中可以是xml或注解)并通过第三方去产生或者获取对象的方式SpringIOC容器的设计主要是基于BeanFactory和AppilicationContext两个接口BeanFactory是Spring定义的最底层的接口,AppilicationContext是BeanFactory的子

2021-02-19 23:16:49 531

原创 Redis 知识点(一)

什么是RedisRedis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。另外,R

2021-02-19 10:32:14 145 3

原创 RabbitMQ知识点(三)

如何保证RabbitMQ消息的可靠传输?消息不可靠的情况可能是消息丢失,劫持等原因;丢失又分为:生产者丢失消息、消息列表丢失消息、消费者丢失消息;(1)生产者丢失消息:从生产者弄丢数据这个角度来看,RabbitMQ提供transaction和confirm模式来确保生产者不丢消息;transaction机制就是说:发送消息前,开启事务(channel.txSelect()),然后发送消息,如果发送过程中出现什么异常,事务就会回滚(channel.txRollback()),如果发送成功则提交..

2021-01-20 16:31:22 118

原创 RabbitMQ知识点(二)

消息如何分发?若该队列至少有一个消费者订阅,消息将以循环(round-robin)的方式发送给消费者。每条消息只会分发给一个订阅的消费者(前提是消费者能够正常处理消息并进行确认)。通过路由可实现多消费的功能消息怎么路由?消息提供方->路由->一至多个队列消息发布到交换器时,消息将拥有一个路由键(routing key),在消息创建时设定。通过队列路由键,可以把队列绑定到交换器上。消息到达交换器后,RabbitMQ 会将消息的路由键与队列的路由键进行匹配(针对不同的交换器有不..

2021-01-20 16:30:07 79

原创 RabbitMQ知识点(一)

什么是 RabbitMQ?RabbitMQ是一款开源的,Erlang编写的,消息中间件;最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦。可以用它来:解耦、异步、削峰。rabbitmq 的使用场景(1)服务间异步通信(2)顺序消费(3)定时任务(4)请求削峰RabbitMQ 基本概念Broker: 简单来说就是消息队列服务器实体。Exchange: 消息交换机,它指定消息按什么规则,路由到哪个队列。Queue: 消息队列载体,每个消息都会被投入到一个或多个队列。.

2021-01-15 17:49:31 196 1

原创 vue知识点(mst)汇总(四)

16.vue几种常用的指令v-for 、 v-if、v-else 、v-bind、v-on、v-show17.怎么定义 vue-router 的动态路由? 怎么获取传过来的值在 router 目录下的 index.js 文件中,对 path 属性加上 /:id,使用 router 对象的 params.id 获取。18.vue常用的修饰符?.prevent: 提交事件不再重载页面;.stop: 阻止单击事件冒泡;.self: 当事件发生在该元素本身而不是子元素的时候会触发;.capture: 事件

2021-01-13 16:16:25 84

原创 vue知识点(mst)汇总(三)

11.vue路由的钩子函数首页可以控制导航跳转,beforeEach,afterEach等,一般用于页面title的修改。一些需要登录才能调整页面的重定向功能。beforeEach主要有3个参数to,from,next:to:route即将进入的目标路由对象,from:route当前导航正要离开的路由next:function一定要调用该方法resolve这个钩子。执行效果依赖next方法的调用参数。可以控制网页的跳转。12.vue-cli如何新增自定义指令?(1)创建局部指令var app

2021-01-13 15:43:56 152

原创 vue知识点(mst)汇总(二)

6.对于MVVM的理解MVVM 是 Model-View-ViewModel 的缩写。Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。  View 代表UI 组件,它负责将数据模型转化成UI 展现出来。  ViewModel 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View。viewmodel和model实现双向数据绑定7.Vue的生命周期(1)什么是vue生命周期?     Vue实例从创

2021-01-13 15:26:35 163

原创 vue知识点(mst)汇总(一)

1.vuex的作用?vuex是一个专门为vue.js应用程序开发的状态管理模式vuex可以帮助我们管理共享状态,也就是管理全局变量vuex的几个核心概念:vuex使用一个store对象管理应用的状态,一个store包括:state,getter,mutation,action四个属性state:state意为’状态’,是vuex状态管理的数据源getter:getter的作用与filters有一些相似,可以将state进行过滤后输出mutation:mutation是vuex中改变state的

2021-01-13 14:49:53 162

原创 ZooKeeper 简单理解

ZooKeeper 概览ZooKeeper 是一个开源的分布式协调服务,ZooKeeper 框架最初是在“Yahoo!"上构建的,用于以简单而稳健的方式访问他们的应用程序。ZooKeeper 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。ZooKeeper 一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心。服务生产者将自己提供的

2020-12-24 16:17:44 254 1

原创 kafka 架构原理(虽然内容多,特别好理解!!!)

一、kafka 架构原理Kafka最初由Linkedin公司开发,是一个分布式的、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常用于web/nginx日志、访问日志、消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。二、kafka的特性高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒;可扩展性:kafka集群支持热扩展;持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止丢失

2020-12-23 11:34:29 267

原创 java设计模式【三】工厂模式(下)抽象工厂模式

前面已经介绍过简单工厂模式和工厂方法模式,这里继续介绍第三种工厂模式 - 抽象工厂模式,还是以汽车的制造为例。例子背景:随着客户的要求越来越高,宝马车需要不同配置的空调和发动机等配件。于是这个工厂开始生产空调和发动机,用来组装汽车。这时候工厂有两个系列的产品:空调和发动机。宝马320系列配置A型号空调和A型号发动机,宝马230系列配置B型号空调和B型号发动机。概念:抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。比如宝马320系列使用空调型号A和发动机型号A,而宝马230

2020-12-23 09:56:34 72

原创 java设计模式【三】工厂模式(上)简单工厂模式、工厂方法模式

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些情况下,新对象的建立就是一个 “过程”,不仅是一个操作,像一部大机器中的一个齿轮传动。模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实例的细节和复杂过程呢

2020-12-21 15:03:03 82

原创 java设计模式【二】代理模式(下)动态代理

二、动态代理动态代理不同于静态代理的特点是它更为灵活,因为动态代理就是在运行期间动态生成代理类。我们沿用上面的例子,假设有五百个不一样的人要卖房,都交房产中介公司来操办,那么按照静态代理的思路来做,我们需要写五百个真实角色,并且代理角色持有这五百个真实角色。这显然不合逻辑。这时候动态代理就应运而生了。动态代理分两种:一种是基于接口实现的Java Proxy(Java自带的)。一种是基于继承实现的cglib代理。下面会给出一个小demo,并且从源码解析角度来解析二者动态代理的实现。Java Prox

2020-12-20 17:15:42 87 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除