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

技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值