Category: Java Architecture
[汇总] RabbitMQ经验
SpringBoot+RabbitMQ ,保证消息100%投递成功并被消费(附源码) SpringBoot +RabbitMQ 做智能家居 rabbitmq有两种协议,我们平时接触的消息队列是用的AMQP协议,而用在智能硬件中的是MQTT协议。 RabbitMQ和Kafka的显著差异 只要我们是单个消费者,那么接收到的消息就是有序的。然而,一旦有多个消费者从同一个队列中读取消息,那么消息的处理顺序就没法保证了。 Kafka能够保证发送到相同主题分区的所有消息都能够按照顺序处理。
[汇总]JVM, OOM经验
记一次隐藏很深的 JVM 线上惨案的分析、排查、解决! JVM在反射代码执行的过程导致Full GC ArrayList插入1000w条数据之后,我怀疑了jvm… 加个 -XX:+PrintGCDetails -XX:+PrintGCDateStamps,看下第一次是不是有Full GC 案例实战:每日上亿请求量的电商系统,JVM年轻代垃圾回收参数如何优化? 神奇的 perfma:一站式解决所有 JVM 疑难杂症! JVM参数分析的链接地址:https://opts.console.perfma.com/ 生产实践经验:线上系统的 JVM 内存是越大越好吗? 所以很多人在用Elasticsearch的时候就是这样的一个问题,老是觉得ES读取速度慢,几个亿的数据写入ES,读取的时候要好几秒。那能不花费好几秒吗?你要是ES集群部署的时候,给JVM内存过大,给os cache留了几个GB的内存,导致几亿条数据大部分都在磁盘上,不在os cache里,最后读取的时候大量读磁盘,耗费个几秒钟是很正常的。 所以说,针对类似Kafka、Elasticsearch这种生产系统部署的时候,应该要给JVM比如6GB或者几个GB的内存就可以了。因为他们可能不需要耗费过大的内存空间,不依赖JVM内存管理数据,当然具体是设置多少,需要你精准的压测和优化。 但是对于这类系统,应该给os cache留出来足够的内存空间,比如32GB内存的机器,完全可以给os cache留出来20多G的内存空间,那么此时假设你这台机器总共就写入了20GB的数据,就可以全部驻留在os cache里了。然后后续在查询数据的时候,不就可以全部从os cache里读取数据了,完全依托内存来走,那你的性能必然是毫秒级的,不可能出现几秒钟才完成一个查询的情况。 为什么我们选择Java开发高频交易系统?...
[汇总]网关Gateway经验
8秋API接口设计风格与11种API协议 8种API风格:RESTful, WebSocket, SOAP, Webhook, GraphQL,gRPC,MQTT,AMQP。 11种API协议:REST, gRPC, GraphQL, Websocket, SOAP, Webhooks, SSE, AMQP, MQTT, API协议,EDA,EDI REST API 授权认证方法 编码,加密,令牌化 这样讲API网关,你应该能明白了吧! 阿里大佬分享API网关在微服务架构中的应用 关于Spring Cloud Zuul 那些“不能说的秘密”! 如何设计 API 接口,实现统一格式返回? 基于 Apache APISIX,爱奇艺 API...
[汇总]分布式锁开发
Spring Boot 2实现分布式锁 早期,分布式锁的相关代码存在于Spring Cloud的子项目Spring Cloud Cluster中,后来被迁到Spring Integration中。 Spring Boot加一个注解,轻松实现 Redis 分布式锁