`
coolwaterever
  • 浏览: 7023 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring和Thrift集成,提供服务

阅读更多

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 集成,可以利用 Spring 的强大功能来管理和调度 Thrift 服务,同时借助 Thrift 实现高效的数据传输和跨语言服务调用。 集成 Spring 和 Thrift 主要涉及以下几个步骤: 1. **创建 Thrift IDL ...

    Thrift-server与spring集成

    - 在Spring配置中,设置Thrift服务器的监听端口和处理程序,启动服务器以提供服务。 - 可以通过Spring的`@PostConstruct`注解确保服务器在应用启动后立即启动。 5. **Thrift客户端消费服务**: - 客户端也需要...

    thrift服务集成spring及连接池

    集成Spring可以让Thrift服务更好地融入到Spring框架中,利用Spring的依赖注入、事务管理等特性,简化服务的开发和管理。而集成连接池,比如Apache Commons Pool或HikariCP,可以有效地管理Thrift客户端的连接,提高...

    Spring集成Thrift--Server AND Client

    总的来说,Spring和Thrift的集成为开发者提供了一种强大的工具,可以构建可扩展的、跨语言的分布式服务。通过理解Thrift的工作原理和Spring的bean管理机制,我们可以轻松地构建高效、可靠的服务器和客户端。

    spring-cloud-starter-thrift:spring-cloud-starter-thrift提供SpringCloud对可伸缩的跨语言服务调用框架Apache Thrift的封装和集成

    spring-cloud-starter-thrift简介spring-cloud-starter-thrift提供Spring Cloud对可伸缩的跨语言服务调用框架Apache Thrift的封装和集成。spring-cloud-starter-thrift包括客户端spring-cloud-starter-thrift-client...

    thrift-Demo

    Thrift的核心思想是通过定义一种中间描述文件(.thrift),来实现数据结构和服务接口的跨语言共享。这个"thrift-Demo"应该是一个演示如何使用Thrift的实例,包含了一系列的步骤和文件,帮助初学者理解Thrift的工作...

    spring-thrift-integration:示例如何将Thrift集成到Spring应用程序中

    这是一个示例,展示了如何在不使用Spring Boot的情况下将集成到Spring应用程序中。 相反,它依赖于Spring的WebApplicationInitializer类,因此不需要web.xml。 如何建造 让Maven编译代码: mvn compile 如果出现...

    Apache Thrift 初学小讲(六)【spring】

    通过Thrift的IDL,我们可以定义清晰的服务接口,而Spring则提供了一流的依赖注入和管理,使得服务的实现和调用更加简洁。同时,Thrift支持多种编程语言,这意味着你可以在Java服务上使用Python、Go或者其他语言的...

    SpringBoot、SpringCloud的各种集成例子大全

    SpringBoot集成Thrift框架-实现RPC服务; SpringBoot集成Nacos框架-实现配置中心; SpringBoot集成Jedis框架-实现Redis调用; SpringBoot集成Lettuce框架-实现Redis调用; SpringBoot集成Redisson框架-实现Redis调用; ...

    海豚:基于spring boot支持thrift序列化的http的微服务框架

    海豚基于spring boot支持thrift序列化的http的微服务框架特征支持thrift序列化的http协议兼容spring cloud ribbon配置支持基于ribbon负载均衡的retryRetryLoadBalancerInterceptor快速开始客户1.springboot启动时...

    common-thrift-bson-3.0.0-M2.zip

    在实际开发中,结合 Apache Thrift 和 Spring Data Couchbase,开发者可以创建一个高性能、跨平台的微服务架构,其中后端服务通过 Thrift 接口提供服务,而 Spring Data Couchbase 则负责在 Couchbase 数据库上进行...

    基于Spring Cloud,Dubbo,Thrift微服务框架整合开发的IM社交系统(Adaboost人脸识别技术).zip

    本资源是基于Spring Cloud,Dubbo和Thrift微服务框架整合开发的即时通讯(IM)社交系统,集成了Adaboost人脸识别技术。该系统采用先进的微服务架构设计,通过Spring Cloud实现服务治理、配置管理和断路器等功能,...

    SpringCloud我服务基础教程

    - **定义**: 多台服务器部署相同的应用程序构成集群,通过负载均衡设备共同对外提供服务,用于解决高并发问题。 - **作用**: 实现高可用性和高并发处理能力。 #### 三、RPC远程调用技术 1. **RPC(Remote ...

    Thrift转SpringHttpInvoker

    在IT行业中,Thrift和Spring Http Invoker是两种常见的服务通信框架。Thrift是由Facebook开源的一种高性能、跨语言的服务框架,而Spring Http Invoker是Spring框架的一部分,用于实现基于HTTP的远程方法调用。这篇...

    Java通过Thrift框架实现通讯的示例代码

    将Thrift服务集成到Spring、Docker或其他微服务架构中,以实现更复杂的系统设计。 总之,Java通过Thrift实现通信是一个涉及服务定义、代码生成、服务处理程序实现、客户端调用等多个环节的过程。Thrift的优势在于...

    springboot-dubbox-simple:Dubbox整合Spring Boot基于Avro,Thrift协议构建REST服务

    总结,本文详细介绍了如何将Dubbox与Spring Boot集成,利用Avro和Thrift协议构建REST服务。通过这种方式,开发者可以充分利用Spring Boot的便捷性和Dubbo的高性能,同时享受到RESTful API带来的灵活性和广泛兼容性。...

    spring data hadoop reference

    此框架旨在简化在 Hadoop 生态系统中的开发工作,提供了一种更加面向 Spring 的方式来处理 MapReduce 任务、HDFS 文件系统操作以及与 HBase 和 Hive 等数据存储系统的集成。 #### 二、Spring 和 Hadoop ##### 2.1 ...

Global site tag (gtag.js) - Google Analytics