欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Mthrift服务调度

Mthrift服务调度

2025/9/21 11:56:20 来源:https://blog.csdn.net/m0_63803244/article/details/141965901  浏览:    关键词:Mthrift服务调度

认识

跨语言的rpc框架,用于各个服务之间通过网络通信进行服务调用。

跨语言实现,IDL语言接口定义,生成各种类客户端和服务端的模版代码。

IDL语言支持的基本数据类型,另外还可以使用容器(list、set、map)、枚举等。

bool:布尔类型(true or value),占一个字节
  
byte:有符号字节
  
i16:16位有符号整型
  
i32:32位有符号整型
  
i64:64位有符号整型
  
double64位浮点数
 
string:未知编码或者二进制的字符串

Thrift IDL 开发规范 (Copy)

常用的:

(1)定义类型

struct定义结构体、const定义常量、typeof定义别名、enum枚举,异常定义

required 必须参数 optional可选参数

(2)服务类型

service关键字定义,需要指明返回值和参数类型,可以使用extends继承

(3)namespace命名空间

namespace 语言类型 包名

编译命令:thrift -gen  java xx.thrift

                   thrift -gen py xx.thrift

快速开始

服务端开发

(1)添加依赖

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.sankuai</groupId>
            <artifactId>inf-bom</artifactId>
            <version>*.*.*</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
   
<dependencies>
    <dependency>
        <groupId>com.meituan.service.mobile</groupId>
        <artifactId>mtthrift</artifactId>
    </dependency>
</dependencies>

(2)编写thrift文件

//声明接口类的包路径(以java资源包为根目录)

namespace java com.maoyan.attractions.ticket.bff.service.entertainment.TAdminEntertainmentTradeService.thrift
struct TQueryEntOrderResponse {1:  bool success,2:  TError error,3:  TEntOrderInfo data
}
service TAdminEntertainmentTradeService {TQueryEntOrderResponse queryOrderByOrderId(1: TQueryEntOrderRequest arg0)                  
}

(3)通过在线编译器http://genthrift.sankuai.com/进行编译,生成接口文件。

注意的四大接口:Iface服务端向客户端提供具体的同步业务能力。Asynclface服务端向客户端提供异步业务能力。

Client客户端以同步方式访问服务端提供的服务。AsyncClient异步的方式访问1服务端提供的服务。

(4)生成appkey标记服务,将appkey、接口类、接口实现类、监听端口配置到server.xml中

(5)实现接口类中的抽象方法

import org.apache.thrift.TException;
 
public class HelloServiceImpl implements HelloService.Iface {
 
    public String sayHello(String username) throws TException {
        return "hello, " + username;
    }
 
    public String sayBye(String username) throws TException {
        return "bye, " + username;
    }
 
}

客户端开发

(1)在客户端的配置client.xml中添加本服务的app key、目标服务的app key、接口类。

(2)读取配置文件通过bean工厂生成客户端代理,代理获取bean对象。

import org.apache.thrift.TException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class Client {
 
    private static HelloService.Iface client;
 
    public static void main(String[] args) throws InterruptedException {
        BeanFactory beanFactory = new ClassPathXmlApplicationContext("client.xml");
        client = (HelloService.Iface) beanFactory.getBean("clientProxy");
         
        Thread.sleep(3000);
 
        try {
            String result = client.sayHello("meituan");
            System.out.println("\n" + result + "\n");
        catch (TException e) {
            e.printStackTrace();
        }
        System.exit(0);
    }
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com