• Thrift入门 (一)


    Install

    Go to thrift page download thrift.

    1
    2
    3
    4
    
    brew install boost
     ./configure --without-python
    sudo make
    sudo make install
    

    Maven

    add depndency

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    <dependency>
        <groupId>org.apache.thrift</groupId>
        <artifactId>libthrift</artifactId>
        <version>0.9.1</version>
    </dependency>
    
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.6.6</version>
    </dependency>
    
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.6.6</version>
    </dependency>
    
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.16</version>
    </dependency>
    


    add plugin

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    <plugin>
        <groupId>org.apache.thrift.tools</groupId>
        <artifactId>maven-thrift-plugin</artifactId>
        <version>0.1.10</version>
        <configuration>
            <thriftExecutable>/usr/local/bin/thrift</thriftExecutable>
        </configuration>
        <executions>
            <execution>
                <id>thrift-sources</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>compile</goal>
                </goals>
            </execution>
            <execution>
                <id>thrift-test-sources</id>
                <phase>generate-test-sources</phase>
                <goals>
                    <goal>testCompile</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    

    Hello World

    Now we can define our service.

    first create the file test.thrift

    1
    2
    3
    4
    5
    6
    
    namespace java com.app.testThrift
    service Test{
    
     void say(1: string word)
    
    }
    

    We define a function say, then we run command to generate java class

    1
    
    thrift  --gen java test.thrfit
    

    We copy the class to our java project. and implements the test.Iface interface

    1
    2
    3
    4
    5
    
    public class TestImpl implements Test.Iface {
        public void say(String word) throws TException{
            System.out.println("I am server, I want to say: " + word);
        }
    }
    

    Now we build the service to let server say something.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    public class Server {
        public void startServer() {
            try {
    
                TServerSocket serverTransport = new TServerSocket(1234);
    
                Test.Processor process = new Processor(new TestImpl());
    
                Factory portFactory = new TBinaryProtocol.Factory(true, true);
    
                Args args = new Args(serverTransport);
                args.processor(process);
                args.protocolFactory(portFactory);
    
                TServer server = new TThreadPoolServer(args);
                server.serve();
            } catch (TTransportException e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            Server server = new Server();
            server.startServer();
        }
    }
    

    We also should have a client to send word.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    import org.apache.thrift.TException;
    import org.apache.thrift.protocol.TBinaryProtocol;
    import org.apache.thrift.protocol.TProtocol;
    import org.apache.thrift.transport.TSocket;
    import org.apache.thrift.transport.TTransport;
    import org.apache.thrift.transport.TTransportException;
    
    public class Client {
        public void startClient() {
            TTransport transport;
            try {
                transport = new TSocket("localhost", 1234);
                TProtocol protocol = new TBinaryProtocol(transport);
                Test.Client client = new Test.Client(protocol);
                transport.open();
                client.say(" Hello I am client");
                transport.close();
            } catch (TTransportException e) {
                e.printStackTrace();
            } catch (TException e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            Client client = new Client();
            client.startClient();
        }
    }
    

    Now when start server and run client, the message will show like this:

    1
    
    I am server, I want to say:  Hello I am client
    

    Reference

    Linux大棚版Thrift入门教程

    Thrift java服务器与客户端示例

  • 相关阅读:
    ERROR Invalid input of type: 'bool'. Convert to a bytes, string, int or float first.
    python2中正则通过全部中文字符
    查询正在执行的SQL
    dataguard 备库删除已应用过的过期归档
    linux lrzsz上传下载
    /u01/app/11.2.0.4/grid/perl/bin/perl -I/u01/app/11.2.0.4/grid/perl/lib -I/u01/app/11.2.0.4/grid/crs/install /u01/app/11.2.0.4/grid/crs/install/rootcrs.pl execution failed
    重启网卡提示Bringing up interface eth0 Device eth0 does not seem to be present,delaying initialization [FAILED]
    rhel 7 RAC安装执行root.sh遭遇ohasd failed to start,Failed to start the Clusterware. Last 20 lines of the alert log follow
    Error in invoking target 'agent nmhs' of makefile...MK_EMAGENT_NMECTL修正
    oracle 11g RAC由非归档修改成归档
  • 原文地址:https://www.cnblogs.com/nateriver520/p/3417147.html
Copyright © 2020-2023  润新知