当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Robotframework框架基础
  • 自然语言处理系列五十三》文本聚类算法》文本聚类介绍及相关算法
  • 江协科技STM32学习- P11 中断系统,EXTI外部中断
  • DNS解析与网络通信中的套接字与协议栈工作机制详解
  • 概率学 笔记一 - 概率 - 随机变量 - 期望 - 方差 - 标准差(也不知道会不会有二)
  • Maven使用指南的笔记
  • Class3——Esp32|Thonny——网络连接主机-wifi连接(源代码带教程)
  • 《深度学习》OpenCV轮廓检测 轮廓近似 解析及实现
  • 代码随想录:377. 组合总和 Ⅳ
  • Nginx核心配置文件结构
  • 树莓派3B点灯(2)
  • 翻译器大分享,这5款你选哪款?
  • 鸿蒙(API 12 Beta6版)图形加速【Vulkan平台】超帧功能开发
  • Python游戏编程:用Python打造经典贪吃蛇小游戏
  • Kafka:浅谈对Kafka的认识
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [数据结构]链表的实现在PHP中
  • 【剑指offer】让抽象问题具体化
  • 03Go 类型总结
  • canvas 五子棋游戏
  • DOM的那些事
  • HashMap ConcurrentHashMap
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Mybatis初体验
  • npx命令介绍
  • PV统计优化设计
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 阿里云购买磁盘后挂载
  • 初识 beanstalkd
  • 初识MongoDB分片
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 前端存储 - localStorage
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 再次简单明了总结flex布局,一看就懂...
  • 主流的CSS水平和垂直居中技术大全
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • Nginx实现动静分离
  • #单片机(TB6600驱动42步进电机)
  • $().each和$.each的区别
  • (70min)字节暑假实习二面(已挂)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (二)换源+apt-get基础配置+搜狗拼音
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (七)Java对象在Hibernate持久化层的状态
  • (四)Android布局类型(线性布局LinearLayout)
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一) 初入MySQL 【认识和部署】
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)Unity3DUnity3D在android下调试
  • (自用)交互协议设计——protobuf序列化
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net后端程序发布到nignx上,通过nginx访问