Search in sources :

Example 1 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class bstarcli method main.

public static void main(String[] argv) throws Exception {
    ZContext ctx = new ZContext();
    String[] server = { "tcp://localhost:5001", "tcp://localhost:5002" };
    int serverNbr = 0;
    System.out.printf("I: connecting to server at %s...\n", server[serverNbr]);
    Socket client = ctx.createSocket(ZMQ.REQ);
    client.connect(server[serverNbr]);
    Poller poller = ctx.createPoller(1);
    poller.register(client, ZMQ.Poller.POLLIN);
    int sequence = 0;
    while (!Thread.currentThread().isInterrupted()) {
        //  We send a request, then we work to get a reply
        String request = String.format("%d", ++sequence);
        client.send(request);
        boolean expectReply = true;
        while (expectReply) {
            //  Poll socket for a reply, with timeout
            int rc = poller.poll(REQUEST_TIMEOUT);
            if (rc == -1)
                //  Interrupted
                break;
            if (poller.pollin(0)) {
                //  We got a reply from the server, must match getSequence
                String reply = client.recvStr();
                if (Integer.parseInt(reply) == sequence) {
                    System.out.printf("I: server replied OK (%s)\n", reply);
                    expectReply = false;
                    //  One request per second
                    Thread.sleep(1000);
                } else
                    System.out.printf("E: bad reply from server: %s\n", reply);
            } else {
                System.out.printf("W: no response from server, failing over\n");
                //  Old socket is confused; close it and open a new one
                poller.unregister(client);
                ctx.destroySocket(client);
                serverNbr = (serverNbr + 1) % 2;
                Thread.sleep(SETTLE_DELAY);
                System.out.printf("I: connecting to server at %s...\n", server[serverNbr]);
                client = ctx.createSocket(ZMQ.REQ);
                client.connect(server[serverNbr]);
                poller.register(client, ZMQ.Poller.POLLIN);
                //  Send request again, on new socket
                client.send(request);
            }
        }
    }
    ctx.destroy();
}
Also used : ZContext(org.zeromq.ZContext) Socket(org.zeromq.ZMQ.Socket) Poller(org.zeromq.ZMQ.Poller)

Example 2 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class kvmsg method test.

//  .until
//  .split test method
//  This method is the same as in {{kvsimple}} with added support
//  for the uuid and property features of {{kvmsg}}:
public void test(boolean verbose) {
    System.out.printf(" * kvmsg: ");
    //  Prepare our context and sockets
    ZContext ctx = new ZContext();
    Socket output = ctx.createSocket(ZMQ.DEALER);
    output.bind("ipc://kvmsg_selftest.ipc");
    Socket input = ctx.createSocket(ZMQ.DEALER);
    input.connect("ipc://kvmsg_selftest.ipc");
    Map<String, kvmsg> kvmap = new HashMap<String, kvmsg>();
    //  .until
    //  Test send and receive of simple message
    kvmsg kvmsg = new kvmsg(1);
    kvmsg.setKey("getKey");
    kvmsg.setUUID();
    kvmsg.setBody("body".getBytes(ZMQ.CHARSET));
    if (verbose)
        kvmsg.dump();
    kvmsg.send(output);
    kvmsg.store(kvmap);
    kvmsg = kvmsg.recv(input);
    if (verbose)
        kvmsg.dump();
    assert (kvmsg.getKey().equals("getKey"));
    kvmsg.store(kvmap);
    //  Test send and receive of message with properties
    kvmsg = new kvmsg(2);
    kvmsg.setProp("prop1", "value1");
    kvmsg.setProp("prop2", "value1");
    kvmsg.setProp("prop2", "value2");
    kvmsg.setKey("getKey");
    kvmsg.setUUID();
    kvmsg.setBody("body".getBytes(ZMQ.CHARSET));
    assert (kvmsg.getProp("prop2").equals("value2"));
    if (verbose)
        kvmsg.dump();
    kvmsg.send(output);
    kvmsg.destroy();
    kvmsg = kvmsg.recv(input);
    if (verbose)
        kvmsg.dump();
    assert (kvmsg.key.equals("getKey"));
    assert (kvmsg.getProp("prop2").equals("value2"));
    kvmsg.destroy();
    //  .skip
    //  Shutdown and destroy all objects
    ctx.destroy();
    System.out.printf("OK\n");
}
Also used : HashMap(java.util.HashMap) ZContext(org.zeromq.ZContext) Socket(org.zeromq.ZMQ.Socket)

Example 3 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class lbbroker2 method main.

/**
     * This is the main task. This has the identical functionality to
     * the previous lbbroker example but uses higher level classes to start child threads
     * to hold the list of workers, and to read and send messages:
     */
public static void main(String[] args) {
    ZContext context = new ZContext();
    //  Prepare our context and sockets
    Socket frontend = context.createSocket(ZMQ.ROUTER);
    Socket backend = context.createSocket(ZMQ.ROUTER);
    frontend.bind("ipc://frontend.ipc");
    backend.bind("ipc://backend.ipc");
    int clientNbr;
    for (clientNbr = 0; clientNbr < NBR_CLIENTS; clientNbr++) ZThread.start(new ClientTask());
    for (int workerNbr = 0; workerNbr < NBR_WORKERS; workerNbr++) ZThread.start(new WorkerTask());
    //  Queue of available workers
    Queue<ZFrame> workerQueue = new LinkedList<ZFrame>();
    while (!Thread.currentThread().isInterrupted()) {
        //  Initialize poll set
        Poller items = context.createPoller(2);
        //  Always poll for worker activity on backend
        items.register(backend, Poller.POLLIN);
        //  Poll front-end only if we have available workers
        if (workerQueue.size() > 0)
            items.register(frontend, Poller.POLLIN);
        if (items.poll() < 0)
            //  Interrupted
            break;
        //  Handle worker activity on backend
        if (items.pollin(0)) {
            ZMsg msg = ZMsg.recvMsg(backend);
            if (msg == null)
                //  Interrupted
                break;
            ZFrame identity = msg.unwrap();
            //  Queue worker address for LRU routing
            workerQueue.add(identity);
            //  Forward message to client if it's not a READY
            ZFrame frame = msg.getFirst();
            if (Arrays.equals(frame.getData(), WORKER_READY))
                msg.destroy();
            else
                msg.send(frontend);
        }
        if (items.pollin(1)) {
            //  Get client request, route to first available worker
            ZMsg msg = ZMsg.recvMsg(frontend);
            if (msg != null) {
                msg.wrap(workerQueue.poll());
                msg.send(backend);
            }
        }
    }
    context.destroy();
}
Also used : ZFrame(org.zeromq.ZFrame) ZContext(org.zeromq.ZContext) ZMsg(org.zeromq.ZMsg) Socket(org.zeromq.ZMQ.Socket) LinkedList(java.util.LinkedList) Poller(org.zeromq.ZMQ.Poller)

Example 4 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class lpclient method main.

public static void main(String[] argv) {
    ZContext ctx = new ZContext();
    System.out.println("I: connecting to server");
    Socket client = ctx.createSocket(ZMQ.REQ);
    assert (client != null);
    client.connect(SERVER_ENDPOINT);
    Poller poller = ctx.createPoller(1);
    poller.register(client, Poller.POLLIN);
    int sequence = 0;
    int retriesLeft = REQUEST_RETRIES;
    while (retriesLeft > 0 && !Thread.currentThread().isInterrupted()) {
        //  We send a request, then we work to get a reply
        String request = String.format("%d", ++sequence);
        client.send(request);
        int expect_reply = 1;
        while (expect_reply > 0) {
            //  Poll socket for a reply, with timeout
            int rc = poller.poll(REQUEST_TIMEOUT);
            if (rc == -1)
                //  Interrupted
                break;
            if (poller.pollin(0)) {
                //  We got a reply from the server, must match getSequence
                String reply = client.recvStr();
                if (reply == null)
                    //  Interrupted
                    break;
                if (Integer.parseInt(reply) == sequence) {
                    System.out.printf("I: server replied OK (%s)\n", reply);
                    retriesLeft = REQUEST_RETRIES;
                    expect_reply = 0;
                } else
                    System.out.printf("E: malformed reply from server: %s\n", reply);
            } else if (--retriesLeft == 0) {
                System.out.println("E: server seems to be offline, abandoning\n");
                break;
            } else {
                System.out.println("W: no response from server, retrying\n");
                //  Old socket is confused; close it and open a new one
                poller.unregister(client);
                ctx.destroySocket(client);
                System.out.println("I: reconnecting to server\n");
                client = ctx.createSocket(ZMQ.REQ);
                client.connect(SERVER_ENDPOINT);
                poller.register(client, Poller.POLLIN);
                //  Send request again, on new socket
                client.send(request);
            }
        }
    }
    ctx.destroy();
}
Also used : ZContext(org.zeromq.ZContext) Socket(org.zeromq.ZMQ.Socket) Poller(org.zeromq.ZMQ.Poller)

Example 5 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class lruqueue3 method main.

public static void main(String[] args) {
    ZContext context = new ZContext();
    LRUQueueArg arg = new LRUQueueArg();
    //  Prepare our context and sockets
    Socket frontend = context.createSocket(ZMQ.ROUTER);
    Socket backend = context.createSocket(ZMQ.ROUTER);
    arg.frontend = frontend;
    arg.backend = backend;
    frontend.bind("ipc://frontend.ipc");
    backend.bind("ipc://backend.ipc");
    int client_nbr;
    for (client_nbr = 0; client_nbr < 10; client_nbr++) new ClientThread3().start();
    int worker_nbr;
    for (worker_nbr = 0; worker_nbr < 3; worker_nbr++) new WorkerThread3().start();
    //  Queue of available workers
    arg.workers = new LinkedList<ZFrame>();
    //  Prepare reactor and fire it up
    ZLoop reactor = new ZLoop(context);
    reactor.verbose(true);
    PollItem poller = new PollItem(arg.backend, ZMQ.Poller.POLLIN);
    reactor.addPoller(poller, handle_backend, arg);
    reactor.start();
    reactor.destroy();
    for (ZFrame frame : arg.workers) {
        frame.destroy();
    }
    context.destroy();
    System.exit(0);
}
Also used : ZFrame(org.zeromq.ZFrame) PollItem(org.zeromq.ZMQ.PollItem) ZLoop(org.zeromq.ZLoop) ZContext(org.zeromq.ZContext) Socket(org.zeromq.ZMQ.Socket)

Aggregations

Socket (org.zeromq.ZMQ.Socket)84 Context (org.zeromq.ZMQ.Context)32 ZContext (org.zeromq.ZContext)30 Test (org.junit.Test)26 Poller (org.zeromq.ZMQ.Poller)20 ZMsg (org.zeromq.ZMsg)14 Random (java.util.Random)13 ZFrame (org.zeromq.ZFrame)13 PollItem (org.zeromq.ZMQ.PollItem)6 ByteBuffer (java.nio.ByteBuffer)4 ArrayList (java.util.ArrayList)4 SelectableChannel (java.nio.channels.SelectableChannel)3 HashMap (java.util.HashMap)3 IOException (java.io.IOException)2 LinkedList (java.util.LinkedList)2 Entry (java.util.Map.Entry)2 Ignore (org.junit.Ignore)2 Actor (org.zeromq.ZActor.Actor)2 BufferedWriter (java.io.BufferedWriter)1 File (java.io.File)1