¿Cuáles son las características de Java de ahorro?
Apache Thrift es un marco de servicios en varios idiomas, que es esencialmente RPC. Cuando es necesario abrir el servicio que desarrollamos, encontraremos problemas de llamadas en varios idiomas que se han desarrollado para proporcionar UserService. servicios para obtener información del usuario, si el consumidor del servicio tiene PHP/Python/C++, etc., es imposible para nosotros adaptar los métodos de llamada correspondientes para todos los idiomas. A veces no tendremos más remedio que utilizar HTTP como protocolo de acceso. si el consumidor del servicio no puede usar HTTP y está más inclinado a usar el servicio operando API local, entonces necesitamos que Thrift brinde soporte.
Este artículo usa UserService como ejemplo para describir el uso del método de ahorro. y su principio...
1. service.thrift
estructura Usuario{
1:i64 id,
2: cadena nombre,
3:marca de tiempo i64,
4:bool vip
}
servicio UserService{
Usuario getById(1:i64 id)
}
2. Generar archivo API
Primero descargue e instale el cliente de segunda mano, por ejemplo, en la plataforma Windows. , Descargue thrift.exe, pero debe recordarse aquí que la API generada por diferentes versiones del cliente de ahorro puede ser incompatible. Este ejemplo usa thrift-0.9.0.exe y usa "--gen" para especificar el idioma. La API generada está adaptada. Este ejemplo es para generar una API de cliente Java.
// En la plataforma Windows, genere el archivo API en el directorio de servicio (este directorio debe existir)
> thrift.exe --gen java -o service service.thrift
3. Clase de implementación UserService
la clase pública UserServiceImpl implementa UserService.Iface {
@ Anular
usuario público getById(long id){
System.out.println("invoke...id:" + id);
return new User();//para prueba
}
}
IV. Breve análisis de los principios
1. User.java: La capacidad de Thrift para generar API todavía es muy limitada, por ejemplo, solo se pueden usar tipos de datos simples en la estructura (Fecha, Colección >, etc. no son compatibles), pero podemos ver en Usuario que la clase que genera implementa la Interfaz "Serializable" y la interfaz "TBase".
La interfaz Serializable indica que las instancias de esta clase deben serializarse y transmitirse a través de la red para no interferir con el propio mecanismo de serialización y deserialización de JAVA. también anula los métodos readObject y writeObject. Sin embargo, esto no ayuda al ahorro en sí.
El ahorro utiliza la interfaz TBase para la serialización y deserialización. Sus dos métodos principales son: lectura y escritura. archivo de segunda mano, estructura define Cada atributo tiene un número de serie, como: 1: id, luego, durante la serialización, Thrift escribirá el "nombre + valor" del atributo en el flujo de entrada en secuencia de acuerdo con el orden del número de serie, y Lo mismo ocurre con la deserialización (para obtener más detalles, consulte Realidad de lectura y escritura).
Ahora).
Debido a que Thrift serializa y deserializa los datos de la instancia en función del "número de serie del atributo", lo que puede garantizar que el orden de los datos en el flujo de entrada y el flujo de salida sea estricto. Esto también requiere desarrolladores de API, si cambia. la definición de estructura en el archivo de segunda mano, debe regenerar la API del cliente; de lo contrario, el servicio no podrá continuar utilizándose (se pueden informar errores o se pueden informar errores de datos El proceso de serialización/deserialización de segunda mano es). Igual que el proporcionado por JAVA El mecanismo de serialización es diferente. No llevará estructuras de clases adicionales. Además, el mecanismo de serialización de ahorro es más adecuado para la transmisión de red y tiene un rendimiento más eficiente.
2. UserService.Client: en el UserService generado, hay una clase estática de Cliente, que es una clase de proxy típica. Esta clase ha implementado todos los métodos de UserService que los desarrolladores necesitan para usar los métodos API en la clase de Cliente para interactuar con el servidor Thrift. , que se encargará de interactuar con el Socket del servidor Thrift en el enlace, enviar solicitudes y recibir respuestas.