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);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值