Dubbo协议详解与超时设置

版权申诉
0 下载量 22 浏览量 更新于2024-07-21 收藏 806KB PDF 举报
"这份资料是2021年字节跳动面试中关于Java和Dubbo的部分,主要探讨了Dubbo支持的多种通信协议、各协议的适用场景、优缺点,以及Dubbo服务的超时时间和注册中心的相关知识。" 在Java开发中,Dubbo是一个广泛使用的分布式服务框架,它提供了丰富的协议选择来满足不同场景的需求。以下是各种协议的详细说明: 1. **dubbo协议**:这是Dubbo的默认协议,基于单一长连接和NIO(非阻塞I/O)异步通讯。这种协议适用于高并发、小数据量的服务调用,特别适合消费者数量远大于提供者的情况。它使用TCP作为传输协议,并采用Hessian进行序列化,以提高效率。 2. **rmi协议**:遵循JDK的RMI标准,要求传输的参数和返回值需实现Serializable接口,使用Java的序列化机制。rmi协议适合短连接,适合数据包大小混合的场景,消费者和提供者数量相当,同时可以传输文件。但需要注意的是,由于使用了旧版本的Common-Collections包和Java序列化,可能存在安全漏洞。 3. **webservice协议**:基于WebService,适用于系统集成和跨语言调用。它通过CXF实现,使用多个短连接,HTTP作为传输协议,同步传输。这种方式对传输的数据类型包容性强,但相对性能较低。 4. **http协议**:基于Http表单提交,适合Web应用和JavaScript调用。它使用Spring的HttpInvoke实现,也是多个短连接,HTTP传输,适合提供者数量多于消费者的情况。 5. **hessian协议**:集成Hessian服务,通过HTTP通讯,使用Servlet暴露服务。Dubbo默认使用Jetty作为服务器。该协议适用于参数较大的场景,提供者压力较大,可以传递文件,但同步传输可能增加延迟。 6. **memcache协议**和**redis协议**:这两种协议基于流行的缓存系统,实现了RPC功能,分别基于memcached和redis,用于快速的数据交换和服务调用。 关于Dubbo的超时时间设置,有两处可以配置:服务提供者端和服务消费者端。服务端设置的超时时间可以更好地反映服务特性,而消费者端的设置具有更高的优先级,能更灵活地控制调用。如果消费者端超时,服务端线程不会被占用,但会产生警告。 Dubbo支持多种注册中心,包括: 1. **Multicast注册中心**:使用网络中的组播地址进行服务注册和发现,无需中心节点,具备一定的容错能力。 2. **Zookeeper注册中心**:基于Apache Zookeeper,是一个分布式的、可靠的协调系统,常用于服务发现和配置管理。它提供了一致性的视图,适合需要高度可用性和稳定性的场景。 这些知识是面试中可能遇到的重点,理解并掌握它们对于成为一名合格的Java开发者,尤其是参与大型分布式系统开发的人员来说至关重要。