定义RMI:远程方法调用(Remote Method Invocation),是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口.它使得客户机上的运行的程序能够调用远程服务器上的对象的对象.此远程调用特性就是为了能够在网络环境中分布操作.RMI就是简化了远程调用. RPC:远程过程调用,是在分布式中常用到的一个协议,此协议就是能够让调用远程对象如同调用本地对象一样,RMI就是其实现方式的一种,当然了,还有很多中实现方式,比如说rest方式等等.现在主要说一下RMI方式; 原理 RMI主要由三个部分组成: registry(JDK提供的一个可独立运行的程序) serve ...
dubbo踩坑教训
前言这篇文章主要总结一下自己踩过的dubbo的坑,因为不管是在配置的时候或者说调用的时候都会出现很多问题,碰到过很多坑,特此总结一下.持续更新.说明一下,这里使用的dubbo是apache旗下的,不是alibaba旗下的. dubbo 配置消费方显示端口已经占用错误如下 :这个原因是因为在默认配置的情况下使用的qos端口号都是22222.但是在消费方想要用这个端口的时候,服务提供方已经占用了,这个时候就需要去配置一下qos来实现部署的. qos就是Dubbo的在线运维命令. 可以对服务进行动态的配置,控制以及查询. 具体配置如下: 使用dubbo.properties文件进行配置加上 ...
dubbo配置过程
dubbodubbo背景在如今设备配置已经到达极限的时候,则需要进行分布式进行处理,将一些应用功能分开管理,但是又必须得互相有沟通,可以通过简单的接口暴露和RPC引用远程服务,通过配置URL地址进行调用,通过F5等硬件进行负载均衡.但是当应用服务规模再进一步扩大的情况下,如果只是简单的通过RMI等方法暴露接口的话,服务的URL配置和管理将变得特别的困难,这个时候就需要实现一个注册中心,动态地注册和发现服务,使得服务的位置透明,并通过在消费方获取服务提供地址列表,实现软负载均衡但是如果在进一步发展,服务器的依赖关系变得错综复杂,甚至分不清那个服务在那个服务之前启动,这个时候需要自动画出应用间的依 ...
Java-SPI机制
SPI简介SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件.SPI其实就是 基于接口的编程 + 策略模式 + 配置文件 组合实现的动态加载机制.Java SPI就是提供一个机制,通过为某个接口寻找服务的一个实现机制.通过读取你在配置文件中配置的参数,来为你提供相应的服务.核心思想就是解耦.将程序的装配权移动到程序之外,也就是配置文件中. 使用场景就是调用这可以根据实际需要,启用,扩展和替换一些实现的策略.举个例子: 数据库驱动加载接口实现类的加载.jdbc通过配置不同,实现不同的数据库驱 ...
java-NIO之Buffer
简介Java NIO类在jdk中有了源生支持,实现了一套自己的NIO框架,当然了底层依然是系统调用.但是在NIO中必不可少的就是缓冲区,随后的Channel和Selector随后在介绍. Buffer这就是Buffer的大致继承体系,很多都没有罗列出来,因为主要讲解的是ByteBuffer.这里大概说一下,Buffer是一个抽象类,包括一个Buffer的最基本属性,比如,容量,位置,上界,标记.子类通过调用父类构造方法来实例化这几个参数,子类也都有各自的容量实现.比如ByteBuffer类用字节数组当缓冲区.旗下又有两个自己的实现类.在jdk中,buffer有很多中实现,例如intBuffer ...
java NIO之Selector
概述Selector 是一个选择器,主要用法就是,通过将一个通道注册到selector中,然后在通过select方法获取到你监听的事件绑定的键. 相当于是以前需要不断轮询去判断io流是否可读,或者可写,或者新的连接已经到来.现在通过Selector帮你判断,当有可用的连接或者可读可写时,selectKeys()方法会返回一个可用的通道集合.通过调用selector.select()来实现,这个方法是阻塞的,当没有准备就绪的通道会阻塞.当然了,这一切包括通道和注册事件都是由一个SelectionKey保存的.所以在讲解selector之前必须得现有一个SelectionKey和Channel的概 ...
java正则表达式
正则表达式正则表达式是处理字符串的强大工具,它并不是java的特性.但是java有一套工具类提供了正则表达式的匹配功能. 用途 字符串匹配 字符串查找 字符串替换 Java类java中正则表达式主要包括两个类: Pattern: 此对象是一个正则表达式的编译表示.此类没有共有的构造方法,只能通过静态编译方法来获得一个Pattern对象.比如Pattern.compile(“\d”); 这个样子.参数就是要编译的正则表达式. Matcher: 是对输入字符串进行解释和匹配的引擎,它也没有公共的构造方法,只能通过Pattern对象的match方法来获得一个Matcher对象 Java中的 ...
java编译优化
java编译java编译器为我们做了很多优化,比如在java中泛型并不是真正的泛型,在编译的时候会进行泛型擦除,使用的时候再进行类型转换.或者Integer自动装箱和拆箱.foreach循环遍历等等. 泛型擦除在java中泛型并不是真正的泛型,因为有一个java早期没有泛型的时候都是通过Object来代替泛型的,因为java中每个对象都是继承自Object的.在通过类型转换来实现泛型.现在有了泛型.通过泛型来指定类型.但是这个泛型也不是真正的泛型.在编译期间都会进行泛型擦除.使其变为普通的类型.下面来看个例子源代码ArrayList<Integer> ls = new ArrayL ...
ThreadLocal概览
ThreadLocal简介ThreadLocal是java中将非线程安全变为线程安全的一个神器.通过为每一个线程保存一个线程本地变量来保证数据的安全性,通过set()和get()方法来使用. 因为每个线程都拥有变量的副本.不和其他线程变量交互,所以不会出现线程安全问题.所以这里有一个点就是ThreadLocal应用的场景应该是变量的访问是没有依赖关系的,每个线程只和自己的数据副本打交道. 属性public class ThreadLocal<T> { //每个线程有自己的HashCode,并不是根据线程计算的,而是Local分配的 private fi ...