原文:《Reactive programming 一种技术 各自表述》前言作为一名 Java 开发人员,尤其是 Java 服务端工程师,对于 Reactive Programming 的概念似乎相对陌生。随着 Java 9 以及 Spring Framework 5 的相继发布,Reactive 技术逐渐开始被广大从业人员所注意,笔者作为其中一员,更渴望如何理解 Reactive Programming,以及它所带来的哪些显著的编程变化,更为重要的是,怎么将其用于实际生产环境,解决当前面临的问题。然而,随着时间的推移和了解的深入,笔者对 Reactive Programming 的热情逐渐被浇息,对它的未来保持谨慎乐观的态度。本文从理解 Reactive Programming 的角度出发,尽可能地保持理性和中立的态度,讨论 Reactive Programming 的实质。初识 Reactive笔者第一次接触 Reactive 技术的时间还要回溯到 2015年末,当时部分应用正使用 Hystrix 实现服务熔断,而 Hystrix 底层依赖是 RxJava 1.x,RxJava 是

原文:https://www.liaocp.cn/archives/67.html常见的 Java 源代码,首先通过 javac 编译成字节码(bytecode),然后字节码通过 JVM 解释为机器码执行。此时 JVM 可以理解为解释执行模式。这也是常见的说法:Java 是解释执行的语言。但是在常见的 JVM 中,例如 Oracle JDK 的 Hotspot JVM ,里面提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT 能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行。解释执行使用 -Xint 参数,可以指定 JVM 只通过解释执行,不对代码进行编译。这种模式会降低运行速度,因为它抛弃了 JIT 的性能优势。java -Xint -version java version "1.8.0_71" Java(TM) SE Runtime Environment (build 1.8.0_71-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.7

Feign是声明式的 Web Service客户端,它让微服务之间的调用变得更简单了,类似 Controller 调用 Service。Spring Cloud 集成了 Ribbon 和 Eureka ,可在使用 Feign 时提供负载均衡的 HTTP 客户端。使用方法添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> [email protected]("userservice") public interface UserClient { @GetMapping("/user/{id}") User findById(@PathVariable("id") Long id); } [email protected] private Us

新增配置 DataID:需要唯一不重复,建议使用 微服务名称 + 环境名 + 后缀名(yaml等) 启动流程 项目启动 读取 Nacos 配置文件,通过 bootstrap.yml 文件 读取本地配置文件 application.yml 创建 Spring 容器 加载 bean …… 读取配置 引入客户端依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> 在项目的 resource 目录新增 bootstrap.yml 文件,此文件是引导文件,优先级高于 application.yml spring: application: name: userservic

角色注册中心一般有三种角色: 服务提供者:启动时,向 Nacos 注册服务信息。 服务消费者:定时(间隔30s)拉取服务(pull),将拉取的信息缓存在服务列表中。同时 Nacos 发现服务信息变更,会主动推送变更消息 (push)。 注册中心:Nacos 。 实例Nacos 会将服务提供者划分为 临时实例 和 非临时实例 ,Nacos 对这两种实例的健康监测是不一样的。默认情况下:所有的实例都是临时实例。推荐临时实例,非临时实例对服务器压力大。 临时实例:采用心跳监测。如果服务不存在,从列表中删除。 非临时实例:Nacos 发起请求检测。如果服务不存在,并不会从列表中删除,而是标记不健康,等待恢复健康。 配置非临时实例,通过更改项目配置spring: cloud: nacos: server-addr: localhost:8848 discovery: cluster-name: GZ namespace: 62c75d23-5839

Eureka 是 Netflix 开发的服务发现框架,本身是一个基于 REST 的服务,主要用于定位运行在 AWS 域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。 Spring Cloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 Spring Cloud 的服务发现功能。Eureka 角色在 Eureka 架构中,微服务角色有两类:Eureka Server:服务端,注册中心 记录服务信息 心跳监控 Eureka Client:客户端 Provider:服务提供者 注册自己的信息到 Eureka Server 每隔 30 秒向 Eureka Server 发送心跳 Consumer:服务消费者 根据服务名称从 Eureka Server 拉取服务列表 基于服务列表做负责均衡,选中一个微服务后发起远程调用 搭建 Eureka Server 创建项目,引入下面依赖 <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spr

转载:https://mp.weixin.qq.com/s/BhfjVuMwXkFFQhgvw2KypA日常开发中,为了更好管理线程资源,减少创建线程和销毁线程的资源损耗,我们会使用线程池来执行一些异步任务。但是线程池使用不当,就可能会引发生产事故。线程池默认使用无界队列,任务过多导致OOMJDK 为开发者提供了线程池的实现类,我们基于 Executors 组件,就可以快速创建一个线程池。日常工作中,一些小伙伴为了开发效率,反手就用Executors 新建个线程池。写出类似以下的代码:public class NewFixedTest { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(10); for (int i = 0; i < Integer.MAX_VALUE; i++) { executor.execute(() ->

微服务是一种经过良好架构设计的分布式架构方案,微服务具有以下特征: 单一职责:微服务拆分粒度更小,每个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发。 面向服务:微服务对外暴露业务接口。 自治:团队独立、技术独立、数据独立、部署独立。 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题。 架构优缺点单体架构简单方便、高度耦合、扩展性差,适合小型项目。将业务的所有功能集中在一个项目中开发,打成一个包部署。优点 架构简单 部署成本低 缺陷 耦合度高 分布式架构松耦合,扩展性好。但架构复杂,难度大。适合大型互联网项目。微服务是一种良好的分布式架构方案。优点 降低耦合度 有利于服务升级扩展 缺点 复杂度增加 部署难度增加 技术栈作用 \ 框架DubboSpring CloudSpring Cloud Alibaba注册中心ZooKeeper、RedisEureka、ConsulNacos、Eureka服务远程调用Dobbo 协议Feign (http 协议)Dubbo、Feign配置中心无Spring Cloud ConfigSpring C

概述从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算都是叫位运算,即将符号位共同参与运算的运算。Java 中有以下的运算符:运算符名称示例结果说明<<左移4<<216符号左边的操作数左移指定的位数>>右移4>>12将符号的左边的操作数右移指定位数>>>无符号右移4>>>10将符号左边的操作数右移指定的位数&与运算4&20两个二进制位,只要有一个为0,那么结果就为0,否则结果为1|或运算4!26两个二进制位,只要有一个为1,那么结果就为1,否则结果为0^异或运算4^26相同二进制位,结果为0;不同的二进制位,结果为1~取反-4-5二进制位,0变1;1变0与、或、异或、取反class Playground {     public static void main(String[ ] args) {         int a = 3, b = 4;   &