`
coolwaterever
  • 浏览: 7007 次
  • 性别: 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服务集成spring及连接池

    thrift是为了解决facebook系统中各系统间大数据量的传输通信以及系统之间语言环境不同需要跨平台的特性。thrift服务支持多种程序语言。...thrift集成spring。thrift集成连接池。使通信服务更简单。

    Thrift-server与spring集成

    - 在Spring配置中,设置Thrift服务器的监听端口和处理程序,启动服务器以提供服务。 - 可以通过Spring的`@PostConstruct`注解确保服务器在应用启动后立即启动。 5. **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 数据库上进行...

    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带来的灵活性和广泛兼容性。...

    SpringCloud微服务基础

    项目集群是指在多台服务器上部署相同应用,形成一个集群,通过负载均衡设备共同对外提供服务,以提高系统的可用性和可扩展性。RPC作为进程间通信的方式,使得不同服务器上的应用能够相互通信,如同调用本地接口一样...

    JavaSpringBootSamples:SpringBoot,Dubbo,SpringCloud的各种集成示例:Atomikos,gRPC,Thrift,Seata,ShardingSphere,Dubbo,Hmily,Nacos,Consul,Ribbon,Jedis,Lettuce,Redisson等框架

    在本项目"JavaSpringBootSamples"中,开发者提供了一系列基于SpringBoot、Dubbo和SpringCloud的集成示例,旨在帮助用户理解和实践各种流行的框架和技术。下面将详细解析这些知识点: 1. **SpringBoot**:SpringBoot...

    SpringCloud详细介绍

    服务层中包含业务逻辑,只需要对外提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。 RPC 远程调用 RPC 的全称是 Remote Procedure Call,是一种进程间通信方式。它允许程序调用...

Global site tag (gtag.js) - Google Analytics