pom.xml
<dependency> <groupId>org.apache.avro</groupId> <artifactId>avro</artifactId> </dependency> <dependency> <groupId>org.apache.avro</groupId> <artifactId>avro-ipc</artifactId> </dependency> ... <plugin> <groupId>org.apache.avro</groupId> <artifactId>avro-maven-plugin</artifactId> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>protocol</goal> </goals> <configuration> <sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory> <outputDirectory>${project.basedir}/src/main/java/</outputDirectory> </configuration> </execution> </executions> </plugin>
helloworld.avpr
{ "namespace": "com.sanss.hadoop.demos.avro.proto", "protocol": "HelloWorld", "doc": "Protocol Greetings", "types": [ {"name": "Greeting", "type": "record", "fields": [ {"name": "message", "type": "string"}]}, {"name": "Curse", "type": "error", "fields": [ {"name": "message", "type": "string"}]} ], "messages": { "hello": { "doc": "Say hello.", "request": [{"name": "greeting", "type": "Greeting" }], "response": "Greeting", "errors": ["Curse"] } } }
生成java protocol code
mvn clean compile
HelloWorldImpl.java
public class HelloWorldImpl implements HelloWorld { @Override public Greeting hello(Greeting greeting) throws AvroRemoteException, Curse { if(greeting.getMessage().toString().equalsIgnoreCase("how are you")){ greeting.setMessage("not too bad"); return greeting; } return new Greeting("hello"); } }
IpcServer.java
public class IpcServer { private Server server; public void startServer() throws IOException, InterruptedException { server = new NettyServer(new SpecificResponder(HelloWorld.class, new HelloWorldImpl()), new InetSocketAddress(65000)); } public void stopServer() { server.close(); } public static void main(String[] args) throws IOException, InterruptedException { System.out.println("Starting server"); IpcServer ipcServer = new IpcServer(); ipcServer.startServer(); System.out.println("Server started"); } }
Client.java
public class Client { public static void main(String[] args) throws IOException { NettyTransceiver client = new NettyTransceiver(new InetSocketAddress(65000)); HelloWorld proxy = (HelloWorld) SpecificRequestor.getClient(HelloWorld.class, client); System.out.println("Client built, got proxy"); Greeting greeting = new Greeting("how are you"); System.out.println("Calling proxy.hello with message: " + greeting.toString()); System.out.println("Result: " +proxy.hello(greeting)); // cleanup client.close(); } }
运行结果
Client built, got proxy
Calling proxy.hello with message: {"message": "how are you"}
Result: {"message": "not too bad"}