摘要:
说明 为了实现Ribbon细粒度的划分,让调用不同的微服务时采用不同的客户端负载均衡策略, 通常情况下我们会自定义配置策略。 本文以内容中心(content center)调用户中心微服务(user center)为例子进行演示 内容中心包结构如下图所 阅读全文
摘要:
CountDownLatch和CyclicBarrier的功能看起来很相似,不易区分,有一种谜之的神秘。本文将通过通俗的例子并结合代码讲解两者的使用方法和区别。 CountDownLatch和CyclicBarrier都是java.util.concurrent包下面的多线程工具类。 从字面上理解, 阅读全文
摘要:
需要注意的点 注意上述脚本的名字一定不能和需要kill的进程名字相同,否则该脚本会自杀掉,导致后续的脚本(启动项目)不执行 阅读全文
摘要:
本文将介绍在spring项目中自定义注解,借助redis实现接口的限流 自定义注解类 使用注解 我们在需要进行接口防刷的类或者方法上加上该注解即可, 例 使用拦截器,在拦截方法时拿到注解上的属性 @Override public boolean preHandle(HttpServletReques 阅读全文
摘要:
maven依赖 kaptcha配置 生成验证码 在这里我们把正确的验证码放到redis中,便于后续的验证 前端使用 使用的方式很简单,直接img标签的src属性调用controller的接口即可 验证逻辑 阅读全文
摘要:
理论知识 redis分布式锁的实现方案请参考文章 "如何优雅地用redis实现分布式锁" 本案例简介 以秒杀活动为例子,在多线程高并发的情况下需要保证秒杀业务的线程安全性,确保秒杀记录与所扣库存数量想匹配。 加锁与解锁核心代码 该段代码可以解决理论知识 阅读全文
摘要:
示例代码 在上面的代码中,我们同时使用了@transactional和redis分布式锁(其他锁同理,比如synchronized同步锁也会出现这个问题) 问题分析 上面这个例子是无法保证数据的一致性.由于spring的aop,会在update方法之前开启事务,之后再加锁,当 阅读全文
摘要:
在HTML代码的head中添加一句 即可 阅读全文
摘要:
定义 WebSocket是通过单个TCP连接提供全双工(双向通信)通信信道的计算机通信协议。此WebSocket API可在用户的浏览器和服务器之间进行双向通信。用户可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器。 它可以让多个用户连接到同一个实时服务器,并通过API进行通信 阅读全文
摘要:
环境搭建 目录结构(ad-eureka为子模块) --ad-spring-cloud --ad-eureka --pom.xml --pom.xml 主pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave 阅读全文