feign远程调用及异步调用丢失请求头问题 文章主要讨论了Feign在远程调用时丢失请求头的问题及其解决方案。对于同步调用,Feign会创建一个新的请求对象,但默认情况下不会携带原始请求的请求头信息。为解决这一问题,可以通过实现`RequestInterceptor`接口,并将其注册到Spring容器中,从而在新的请求中同步旧请求的请求头数据。此外,文章还介绍了异步调用场景下如何通过`CompletableFuture`结合`RequestContextHolder`将主线程中的请求属性复制到子线程,确保异步任务能够访问到正确的上下文信息。这些方法有效解决了Feign调用过程中请求头信息丢失的问题。 2021-07-21 4760 0 java 问题 Feign 多线程 微服务
SpringSession整合redis,解决分布式session问题 Spring Session是一个专注于解决session管理问题的项目,能够简单快速地集成到应用中,替代传统的HttpSession。其核心原理基于装饰者模式,通过`@EnableRedisHttpSession`注解导入配置类,实现对请求的拦截与处理。在每个请求经过`SessionRepositoryFilter`时,原生的HttpServletRequest和HttpServletResponse会被包装,并重写相关方法以调用自定义的session存储逻辑。使用Spring Session需要引入相应的依赖并配置Redis作为后端存储,同时可以通过自定义序列化器和CookieSerializer来扩展session的作用域及序列化方式。此外,通过简单的HTTP请求处理示例展示了如何在实际应用中保存和获取session信息。 2021-07-16 2322 0 java 总结 redis 分布式 微服务
SpringCache Spring从3.1版本开始引入了`Cache`和`CacheManager`接口来统一不同缓存技术,并支持JCache(JSR-107)注解以简化开发。`Cache`接口的实现包括`RedisCache`、`EhCacheCache`等。每次调用需要缓存的方法时,Spring会检查该方法是否已执行过,若存在结果则直接返回缓存中的数据;否则执行方法并将结果缓存后返回。 使用步骤如下: 1. 添加依赖:`spring-boot-starter-cache`。 2. 在配置文件中指定缓存类型(如Redis)及过期时间。 3. 编写配置类设置缓存序列化方式及其他属性。 4. 通过`@EnableCaching`启用缓存功能。 Spring Cache提供了多个注解如`@Cacheable`用于定义缓存、`@CachePut`更新缓存、`@CacheEvict`清除缓存等。此外,`@Caching`可以组合多种缓存操作。对于缓存问题,如穿透、击穿和雪崩,Spring提供了相应解决方案,例如缓存空值、加锁以及随机过期时间策略。针对读多写少且一致性要求不高的场景,Spring Cache是一个很好的选择。 2021-07-03 1891 0 java 总结 锁 springboot 分布式 微服务
分布式锁Redisson Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, B 2021-07-02 1956 0 java 总结 锁 redis 分布式 微服务
本地缓存与分布式缓存 缓存在服务端编程当中,缓存主要是指将数据库的数据加载到内存中,之后对该数据的访问都在内存中完成,从而减少了对数据库的访问,解决了高并发场景中数据库容易成为性能瓶颈的问题;以及基于内存的访问速度高于磁盘的访问速度的原理(数据库读取数据一般需要从磁盘读取),提高了数据的访问速度和程序性能。本地缓存本地缓 2021-07-01 1193 0 java 总结 redis 分布式 微服务
Spring Cloud Gateway Spring Cloud Gateway是基于Spring 5.0、Spring Boot 2.0和Project Reactor等技术开发的微服务网关,旨在提供统一的API路由管理方式。它替代了Zuul,支持异步IO,具有更高的效率,并且与Spring Cloud紧密集成。Spring Cloud Gateway内置了多种Router和Filter,支持通过配置或编码使用。其三大核心概念包括Route(定义路由规则)、Predicate(匹配请求条件)和Filter(处理请求和响应)。通过简单的配置,可以实现基于时间、Cookie、Header、Host、请求方式、路径、参数及IP地址等多种条件的路由匹配。此外,还可以组合多个Predicates以实现复杂的路由逻辑。配置文件中添加相关依赖和服务发现后,即可快速搭建并测试网关功能。 2021-05-28 1848 0 总结 spring cloud gateway 分布式 微服务
Docker的安装(centos) Doker:Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 2021-05-25 1065 0 docker java 分布式 微服务
分布式的基本概念 当计算机的程序和数据通过网络分布在多于一个的计算机上时,计算就成为“分布式的”微服务:微服务架构风格,就像是把一个单独的应用程序开发为一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API。这些服务围绕业务能力来构建,并通过完全自动化部署机制来独立部署,这些服务使用不 2021-05-24 1298 0 java 总结 分布式 微服务