thrift
namespace java com.example
service Calculator {
i32 add(1: i32 num1, 2: i32 num2),
i32 subtract(1: i32 num1, 2: i32 num2)
}
shell
thrift -r --gen java calculator.thrift
import com.example.Calculator;
public class CalculatorHandler implements Calculator.Iface {
@Override
public int add(int num1, int num2) {
return num1 + num2;
}
@Override
public int subtract(int num1, int num2) {
return num1 - num2;
}
public static void main(String[] args) {
CalculatorHandler handler = new CalculatorHandler();
Calculator.Processor<CalculatorHandler> processor = new Calculator.Processor<>(handler);
Http.Server server = Http.server().serve(":8080", new Http.Muxer().mux(processor));
Await.ready(server);
}
}
import com.example.Calculator;
import com.twitter.finagle.Thrift;
public class CalculatorClient {
public static void main(String[] args) {
Calculator.ServiceIface client = Thrift.newIface("localhost:8080", Calculator.ServiceIface.class);
int result = client.add(10, 5);
System.out.println("Result: " + result);
}
}
ServerBuilder.safeBuild(() ->
Http.server().withLabel("calculator-server")
.withRequestTimeout(Duration.fromSeconds(30))
.withTransport.tls()
.withAdmissionControl
.withSessionPooling())
.withTracer
.withMonitor
.withLogging
.withStatsReceiver)
.withBudget
.withBindingAddress
.serve("localhost:8080", new Http.Muxer().mux(processor));
Thrift.newIface("localhost:8080", Calculator.ServiceIface.class,
ClientBuilder.safeBuild(() ->
Http.client().withSessionPooling()
.withSessionQualifier
.withConnectionLimit
.withTransport.tls()
.withAdmissionControl
.withSessionPooling()
.withStatsReceiver)
.withTracer
.withMonitor
.withLogging
.withBudget
.withLabel
.withResponseClassifier);