As you all know,thrift可以通过servlet提供服务。如果能与Spring集成起来就更方便了,因为我们的大部分类是通过Spring注入的。
所以,下面介绍Spring和Thrift集成来提供服务。
原理是Spring的HttpRequestHandler。详见http://www.codeproject.com/Tips/251636/How-to-inject-Spring-beans-into-Servlets
第一步:定义基本HttpRequestHandler
package com.test.service.servlet; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.annotation.PostConstruct; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.thrift.TException; import org.apache.thrift.TProcessor; import org.apache.thrift.protocol.TCompactProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.protocol.TProtocolFactory; import org.apache.thrift.transport.TIOStreamTransport; import org.apache.thrift.transport.TTransport; import org.springframework.web.HttpRequestHandler; public abstract class TestThriftServlet implements HttpRequestHandler{ protected TProcessor processor ; protected static TProtocolFactory inProtocolFactory = new TCompactProtocol.Factory(); protected static TProtocolFactory outProtocolFactory = new TCompactProtocol.Factory(); @PostConstruct protected void invokeInit(){ init(); } abstract void init(); @Override public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if(processor == null){ throw new RuntimeException("You have to override init method and init processor firstly"); } TTransport inTransport = null; TTransport outTransport = null; try { response.setContentType("application/x-thrift"); InputStream in = request.getInputStream(); OutputStream out = response.getOutputStream(); TTransport transport = new TIOStreamTransport(in, out); inTransport = transport; outTransport = transport; TProtocol inProtocol = inProtocolFactory.getProtocol(inTransport); TProtocol outProtocol = outProtocolFactory.getProtocol(outTransport); processor.process(inProtocol, outProtocol); out.flush(); } catch (TException te) { throw new ServletException(te); } } }
第二步:提供我们的接口
其中service类就是我们需要注入的bean
package com.test.service.servlet; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.test.core.common.Logger; import com.test.core.service.PasswordService; @Component public class FooThriftHandler extends TestThriftServlet{ private static final Logger logger = Logger.getLogger(FooThriftHandler.class); @Autowired private ThriftService.Iface service; @Override void init() { processor = new ThriftService.Processor<ThriftService.Iface>(service); logger.info("FooThriftHandler init complete"); } }
第三步,增加web.xml配置
<servlet> <servlet-name>fooThriftHandler</servlet-name> <servlet-class>org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>fooThriftHandler</servlet-name> <url-pattern>/fooThriftHandler</url-pattern> </servlet-mapping>
第四步,将FooThriftHandler增加到Spring的Bean中
-------------------------------------------------------
这样子,我们使用http://127.0.0.1:8080/fooThriftHandler 就可以调用这个Thrift服务了
相关推荐
将 Spring 与 Thrift 集成,可以利用 Spring 的强大功能来管理和调度 Thrift 服务,同时借助 Thrift 实现高效的数据传输和跨语言服务调用。 集成 Spring 和 Thrift 主要涉及以下几个步骤: 1. **创建 Thrift IDL ...
- 在Spring配置中,设置Thrift服务器的监听端口和处理程序,启动服务器以提供服务。 - 可以通过Spring的`@PostConstruct`注解确保服务器在应用启动后立即启动。 5. **Thrift客户端消费服务**: - 客户端也需要...
集成Spring可以让Thrift服务更好地融入到Spring框架中,利用Spring的依赖注入、事务管理等特性,简化服务的开发和管理。而集成连接池,比如Apache Commons Pool或HikariCP,可以有效地管理Thrift客户端的连接,提高...
总的来说,Spring和Thrift的集成为开发者提供了一种强大的工具,可以构建可扩展的、跨语言的分布式服务。通过理解Thrift的工作原理和Spring的bean管理机制,我们可以轻松地构建高效、可靠的服务器和客户端。
spring-cloud-starter-thrift简介spring-cloud-starter-thrift提供Spring Cloud对可伸缩的跨语言服务调用框架Apache Thrift的封装和集成。spring-cloud-starter-thrift包括客户端spring-cloud-starter-thrift-client...
Thrift的核心思想是通过定义一种中间描述文件(.thrift),来实现数据结构和服务接口的跨语言共享。这个"thrift-Demo"应该是一个演示如何使用Thrift的实例,包含了一系列的步骤和文件,帮助初学者理解Thrift的工作...
这是一个示例,展示了如何在不使用Spring Boot的情况下将集成到Spring应用程序中。 相反,它依赖于Spring的WebApplicationInitializer类,因此不需要web.xml。 如何建造 让Maven编译代码: mvn compile 如果出现...
通过Thrift的IDL,我们可以定义清晰的服务接口,而Spring则提供了一流的依赖注入和管理,使得服务的实现和调用更加简洁。同时,Thrift支持多种编程语言,这意味着你可以在Java服务上使用Python、Go或者其他语言的...
SpringBoot集成Thrift框架-实现RPC服务; SpringBoot集成Nacos框架-实现配置中心; SpringBoot集成Jedis框架-实现Redis调用; SpringBoot集成Lettuce框架-实现Redis调用; SpringBoot集成Redisson框架-实现Redis调用; ...
海豚基于spring boot支持thrift序列化的http的微服务框架特征支持thrift序列化的http协议兼容spring cloud ribbon配置支持基于ribbon负载均衡的retryRetryLoadBalancerInterceptor快速开始客户1.springboot启动时...
在实际开发中,结合 Apache Thrift 和 Spring Data Couchbase,开发者可以创建一个高性能、跨平台的微服务架构,其中后端服务通过 Thrift 接口提供服务,而 Spring Data Couchbase 则负责在 Couchbase 数据库上进行...
本资源是基于Spring Cloud,Dubbo和Thrift微服务框架整合开发的即时通讯(IM)社交系统,集成了Adaboost人脸识别技术。该系统采用先进的微服务架构设计,通过Spring Cloud实现服务治理、配置管理和断路器等功能,...
- **定义**: 多台服务器部署相同的应用程序构成集群,通过负载均衡设备共同对外提供服务,用于解决高并发问题。 - **作用**: 实现高可用性和高并发处理能力。 #### 三、RPC远程调用技术 1. **RPC(Remote ...
在IT行业中,Thrift和Spring Http Invoker是两种常见的服务通信框架。Thrift是由Facebook开源的一种高性能、跨语言的服务框架,而Spring Http Invoker是Spring框架的一部分,用于实现基于HTTP的远程方法调用。这篇...
将Thrift服务集成到Spring、Docker或其他微服务架构中,以实现更复杂的系统设计。 总之,Java通过Thrift实现通信是一个涉及服务定义、代码生成、服务处理程序实现、客户端调用等多个环节的过程。Thrift的优势在于...
总结,本文详细介绍了如何将Dubbox与Spring Boot集成,利用Avro和Thrift协议构建REST服务。通过这种方式,开发者可以充分利用Spring Boot的便捷性和Dubbo的高性能,同时享受到RESTful API带来的灵活性和广泛兼容性。...
此框架旨在简化在 Hadoop 生态系统中的开发工作,提供了一种更加面向 Spring 的方式来处理 MapReduce 任务、HDFS 文件系统操作以及与 HBase 和 Hive 等数据存储系统的集成。 #### 二、Spring 和 Hadoop ##### 2.1 ...