`
coolwaterever
  • 浏览: 7029 次
  • 性别: 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实现服务治理、配置管理和断路器等功能,...

    基于springboot支持thrift序列化的http的微服务框架_hy4.zip

    每个服务可以被独立开发、部署和管理,有利于提高开发效率、提升系统稳定性,并且能够实现持续集成和持续部署。Spring Boot正是实现微服务架构的不二选择,它简化了基于Spring的应用开发,通过提供一系列的Starter ...

    SpringCloud我服务基础教程

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

    基于springboot支持thrift序列化的http的微服务框架_hy5.zip

    Spring Boot中的自动配置和启动器可以帮助开发者快速搭建服务,而Thrift则能够提供高效的序列化支持,这对于处理大量数据的微服务来说尤为重要。 在项目管理和代码组织方面,使用Spring Boot可以轻松地将应用程序...

    Thrift转SpringHttpInvoker

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

    基于springboot支持thrift序列化的http的微服务框架.zip

    Spring Boot作为一个独立的、生产级别的Spring基础框架,它为快速构建微服务应用提供了便捷的方式。结合Spring Boot的特性,能够使得开发人员专注于业务逻辑的开发,而不是项目的配置和部署。 而Thrift是一种接口...

    基于Java语言的Thrift框架设计源码学习与实践指南

    Java作为一种广泛使用的编程语言,与Thrift的结合为开发者提供了丰富的接口和服务实现的可能。本指南旨在帮助开发者深入理解Thrift框架,并通过Java语言的实践来掌握其设计和应用。 首先,我们需要了解Thrift框架的...

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

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

Global site tag (gtag.js) - Google Analytics