Spring Cloud

Netty 如何实现心跳机制与断线重连?

筅森魡賤 提交于 2020-05-08 16:02:11
作者:sprinkle_liz www.jianshu.com/p/1a28e48edd92 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 注:心跳包还有另一个作用,经常被忽略,即: 一个连接如果长时间不用,防火墙或者路由器就会断开该连接。 如何实现 核心Handler —— IdleStateHandler 在 Netty 中, 实现心跳机制的关键是 IdleStateHandler, 那么这个 Handler 如何使用呢? 先看下它的构造器: public IdleStateHandler(int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds) { this((long)readerIdleTimeSeconds, (long)writerIdleTimeSeconds, (long)allIdleTimeSeconds, TimeUnit.SECONDS); } 这里解释下三个参数的含义: readerIdleTimeSeconds: 读超时. 即当在指定的时间间隔内没有从 Channel 读取到数据时, 会触发一个 READER_IDLE 的

LinkedHashMap 源码分析,底层竟这么简单!

☆樱花仙子☆ 提交于 2020-05-08 14:30:00
作者:Pz cnblogs.com/panzi/p/10845079.html LinkedHashMap 是一个键有序的 HashMap, 可以将 LinkedHashMap 理解为 LinkList + HashMap。 所以研究 LinkedHashMap 之前要先看 HashMap 代码,这里不再赘述。 其实 LinkedHashMap 无非就是通过链表结构将存储在 HashMap 中的数据通过 beofre,after 连接起来。 作为一个链表结构 head , tail 必不可少 /** * The head (eldest) of the doubly linked list. */ transient LinkedHashMap.Entry<K,V> head; /** * The tail (youngest) of the doubly linked list. */ transient LinkedHashMap.Entry<K,V> tail; 还要有一个存储 前节点和后节点的数据结构 /** * HashMap.Node subclass for normal LinkedHashMap entries. */ static class Entry<K,V> extends HashMap.Node<K,V> { Entry<K,V> before,

Java趣味分享:try & finally

会有一股神秘感。 提交于 2020-05-08 14:29:15
考虑以下四个测试方法,它们会输出什么? public class Test { public static void main(String\[\] args) { System.out.println(test1()); System.out.println(test2()); System.out.println(test3()); System.out.println(test4()); } private static int test1() { int i = 1; try { return i; } catch (Exception e) { e.printStackTrace(); } finally { i = 0; } return i; } private static int test2() { int i = 1; try { return i; } catch (Exception e) { e.printStackTrace(); } finally { i = 0; return i; } } private static User test3() { User user = new User("u1"); try { return user; } catch (Exception e) { e.printStackTrace(); } finally

学习java多线程,这必须搞懂的这几个概念,很重要。

走远了吗. 提交于 2020-05-08 14:09:15
同步和异步 同步,Synchronous,即调用方法开始,一旦调用就必须等待方法执行完返回才能继续下面的操作。 举个例子,你去银行ATM取钱,你必须等到ATM吐完钱你拿到钱取完卡你才能离开。 异步,Asynchronous,即不关心方法执行的过程,触发要调用的方法就继续执行下面的操作,不会像同步那样阻塞直要到方法完成才继续。 举个例子,你这次要取钱,数量较大,你直接电话或者APP预约银行说你要取多少万现金,这段时间银行会为你准备钱,而这与你都没什么关系,然后你只要按预定的时候去取就行了,对你于而言,你们是触发了一个异步动作而已。 并发和并行 并发,Concurrency,即一段时间内多个任务在执行,但不一定是同时在执行,它们可能是交替在运行,也有可能是串行运行的。 并行,Parallelism,这个就是多个任务在同时执行,可以理解为并发里面有一部分任务在并行执行。 单核CPU不会有并行操作,应为一个CPU一次只能执行一条指令,并行操作只存在于多核CPU中。 阻塞和非阻塞 阻塞,Blocking,如果一个线程占用了一个公共资源而没有释放对它的锁,另外别的一些线程想要继续执行就只能等它释放锁,这时候就造成阻塞了。 非阻塞,Non-Blocking,就是没有阻塞,线程可以自由运行,没有锁定公共资源,不相互阻塞运行。 推荐去我的博客阅读更多: 1. Java JVM、集合、多线程

学习java多线程,这必须搞懂的这几个概念,很重要。

谁说我不能喝 提交于 2020-05-08 13:12:36
同步和异步 同步,Synchronous,即调用方法开始,一旦调用就必须等待方法执行完返回才能继续下面的操作。 举个例子,你去银行ATM取钱,你必须等到ATM吐完钱你拿到钱取完卡你才能离开。 异步,Asynchronous,即不关心方法执行的过程,触发要调用的方法就继续执行下面的操作,不会像同步那样阻塞直要到方法完成才继续。 举个例子,你这次要取钱,数量较大,你直接电话或者APP预约银行说你要取多少万现金,这段时间银行会为你准备钱,而这与你都没什么关系,然后你只要按预定的时候去取就行了,对你于而言,你们是触发了一个异步动作而已。 并发和并行 并发,Concurrency,即一段时间内多个任务在执行,但不一定是同时在执行,它们可能是交替在运行,也有可能是串行运行的。 并行,Parallelism,这个就是多个任务在同时执行,可以理解为并发里面有一部分任务在并行执行。 单核CPU不会有并行操作,应为一个CPU一次只能执行一条指令,并行操作只存在于多核CPU中。 阻塞和非阻塞 阻塞,Blocking,如果一个线程占用了一个公共资源而没有释放对它的锁,另外别的一些线程想要继续执行就只能等它释放锁,这时候就造成阻塞了。 非阻塞,Non-Blocking,就是没有阻塞,线程可以自由运行,没有锁定公共资源,不相互阻塞运行。 推荐去我的博客阅读更多: 1. Java JVM、集合、多线程

LinkedHashMap 源码分析,底层竟这么简单!

亡梦爱人 提交于 2020-05-08 12:32:02
作者:Pz cnblogs.com/panzi/p/10845079.html LinkedHashMap 是一个键有序的 HashMap, 可以将 LinkedHashMap 理解为 LinkList + HashMap。 所以研究 LinkedHashMap 之前要先看 HashMap 代码,这里不再赘述。 其实 LinkedHashMap 无非就是通过链表结构将存储在 HashMap 中的数据通过 beofre,after 连接起来。 作为一个链表结构 head , tail 必不可少 /** * The head (eldest) of the doubly linked list. */ transient LinkedHashMap.Entry<K,V> head; /** * The tail (youngest) of the doubly linked list. */ transient LinkedHashMap.Entry<K,V> tail; 还要有一个存储 前节点和后节点的数据结构 /** * HashMap.Node subclass for normal LinkedHashMap entries. */ static class Entry<K,V> extends HashMap.Node<K,V> { Entry<K,V> before,

springcloud之hystrix熔断器-Finchley.SR2版

試著忘記壹切 提交于 2020-05-08 10:01:07
本篇和大家分享的是springcloud-hystrix熔断器,其主要功能是对某模块调用失败做断路和降级,简单点就当某个模块程序出问题了并达到某阈值就限制后面请求,并降级的方式提供一个默认返回数据。最近在琢磨hystrix源码,琢磨思路写一个自己的简易熔断器,希望大家后期关注。 springcloud版本说明 hystrix可用于工作中场景 springcloud-hystrix运用 feign客户端使用hystrix springcloud版本说明 由于市面上其版本比较多,版本不一可能造成了读者尝试时版本问题,所以这里指明当前作者写文章时使用的cloud版本 springboot版本: 1 <parent> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-parent</artifactId> 4 <version> 2.0 . 7 .RELEASE</version> 5 <relativePath/> <!-- lookup parent from repository --> 6 </parent> springcloud版本: 1 <properties> 2 <java.version> 1.8 </java.version> 3 <spring-cloud

Eureka 应用手册

戏子无情 提交于 2020-05-08 09:49:36
持续更新在工作中使用eureka遇到的问题以及一些配置说明 ----集成篇---- Eureka为我们提供服务发现的能力, 在微服务体系中, 有很重要的地位(最核心和基础的组件), 主要用来实现各个微服务之间的自动化注册与彼此可见(发现) Spring cloud Eureka是对netflix Eureka的二次封装, 使其成为spring cloud微服务治理体系中的一员 eureka在应用时, 要两种模式互相配合使用, 一种为服务注册中心(discover-center), 一种为服务提供者(product) 在springboot环境中集成eureka非常简单, 具体步骤如下: 注册中心和服务提供者配置是不一样的, 一定要注意下 1. 引入依赖(需要配置springCloud依赖管理) 使用springboot脚手架新建两个springboot空项目(一个是注册中心, 一个是服务提供者) <!-- 注册中心依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!-- 服务提供者依赖 --> <dependency> <groupId

Spring Cloud Alibaba系列(一)nacos作为服务注册中心

*爱你&永不变心* 提交于 2020-05-08 09:45:42
Spring Cloud Alibaba各组件版本关系 Spring Cloud Alibaba Version Sentinel Version Nacos Version RocketMQ Version Dubbo Version Seata Version 2.2.1.RELEASE 1.7.1 1.2.1 4.4.0 2.7.6 1.1.0 2.2.0.RELEASE 1.7.1 1.1.4 4.4.0 2.7.4.1 1.0.0 2.1.2.RELEASE or 2.0.2.RELEASE 1.7.1 1.2.1 4.4.0 2.7.6 1.1.0 2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE 1.7.0 1.1.4 4.4.0 2.7.3 0.9.0 2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE 1.6.3 1.1.1 4.4.0 2.7.3 0.7.1 毕业版本依赖关系 Spring Cloud Version Spring Cloud Alibaba Version Spring Boot Version Spring Cloud Hoxton.SR3 2.2.1.RELEASE 2.2.5.RELEASE Spring Cloud Hoxton.RELEASE 2

SpringCloud Feign通过FallbackFactory显示异常信息

百般思念 提交于 2020-05-08 08:59:13
SpringCloud Feign可以进行服务消费,而且内置了Hystrix,能够进行熔断。 Feign可以通过fallback指定熔断回调的类。代码示例及讲解可见: https://www.cnblogs.com/expiator/p/10826852.html 但是,有时候我们还需要记录异常信息,可以通过fallbackFactory实现。 ###服务提供者  示例如下: @RestController public class UserController { @PostMapping("/user/name/{id}") public JSONObject getUserNameById(@PathVariable("id") Integer id ) throws Exception { System.out.println("==========================>getUserNameById(),id为:"+id); //直接抛异常,是为了方便测试服务熔断和降级。 throw new Exception("getUserNameByIdException"); } @PostMapping("/user") public User getUserById(@RequestParam("id") Integer id ) throws Exception