本文主要是介绍Armeria 小试牛刀,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
HelloService.thrift 定义服务接口
namespace java com.example.thriftservice HelloService {string hello(1:string name)
}
使用thrift-0.9.3.exe 工具,命令:thrift-0.9.3 -r --gen java HelloService.thrift 在当前文件夹gen-java 下面生成HelloService.java
public class HelloService {public interface Iface {public String hello(String name) throws org.apache.thrift.TException;}public interface AsyncIface {public void hello(String name, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;}
}
在这里使用thrift 规范,生成同步Iface 和异步AsyncIface 接口。
HelloServiceIfaceImpl 实现同步接口。
public class HelloServiceIfaceImpl implements HelloService.Iface
{@Overridepublic String hello(String name) throws TException{System.out.println("ArmeriaClient ----->"+name);return "hello to "+name;}
}
ArmeriaServer 为RPC 端服务类:
public class ArmeriaServer
{public static void main(String[] args){HelloService.Iface helloHandler = new HelloServiceIfaceImpl();//we created a new ServerBuilder and added a new ThriftService to it.ServerBuilder sb = new ServerBuilder();sb.port(8080, SessionProtocol.HTTP);//The ThriftService is bound at the path /hello and will use the TBinary format.//We also decorated the ThriftService using LoggingService, which logs all Thrift calls and replies.sb.serviceAt("/hello",ThriftService.of(helloHandler, SerializationFormat.THRIFT_BINARY).decorate(LoggingService::new)//使用日志输出请求数据和响应数据).serviceUnder("/docs/", new DocService());//Armeria provides a service called DocService, which discovers all ThriftService in your Armeria server and lets you browse the available service operations and structs:Server server= sb.build();server.start();System.out.println("ArmeriaServer start");}
}
ArmeriaClient 为RPC客户端类:
public class ArmeriaClient
{public static void main(String[] args) throws TException{HelloService.Iface helloService = new ClientBuilder("tbinary+http://127.0.0.1:8080/hello").responseTimeoutMillis(10000).decorator(LoggingClient::new).build(HelloService.Iface.class); String greeting = helloService.hello("Armerian World");System.out.println("ArmeriaClient:"+greeting);}
}
ArmeriaServer RPC服务端 增加数据分析、日志、文档。
public class ArmeriaServer
{public static void main(String[] args){MetricRegistry metricRegistry = new MetricRegistry();ConsoleReporter reporter = ConsoleReporter.forRegistry(metricRegistry).convertRatesTo(TimeUnit.SECONDS).convertDurationsTo(TimeUnit.MILLISECONDS).build();reporter.start(1, TimeUnit.SECONDS);HelloService.Iface helloHandler = new HelloServiceIfaceImpl();//we created a new ServerBuilder and added a new ThriftService to it.ServerBuilder sb = new ServerBuilder();sb.port(8080, SessionProtocol.HTTP);//The ThriftService is bound at the path /hello and will use the TBinary format.//We also decorated the ThriftService using LoggingService, which logs all Thrift calls and replies.sb.serviceAt("/hello",ThriftService.of(helloHandler, SerializationFormat.THRIFT_BINARY).decorate(LoggingService::new).decorate(MetricCollectingService.newDropwizardDecorator(metricRegistry, MetricRegistry.name("client", "HelloService")))//使用日志输出请求数据和响应数据).serviceUnder("/docs/", new DocService());//Armeria provides a service called DocService, which discovers all ThriftService in your Armeria server and lets you browse the available service operations and structs:Server server= sb.build();server.start();System.out.println("ArmeriaServer start");}
}
这篇关于Armeria 小试牛刀的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!