java - 如何在Java中为0MQ(ZeroMQ)设置超时?

标签 java zeromq

我需要使用 0MQ 为回复/请求事务添加超时。这通常是如何实现的?我尝试使用以下方法:

socket.setReceiveTimeOut();

socket.setSendTimeout();

但它们似乎会导致空指针异常。

本质上,如果接收请求的应用程序不可用,我希望应用程序在 10 秒后超时。

感谢任何帮助。

谢谢!

最佳答案

我认为jzmq应该在recv超时时抛出ZMQException, 但是当 err = EAGAIN 时,没有 ZMQException

https://github.com/zeromq/jzmq/blob/master/jzmq-jni/src/main/c%2B%2B/Socket.cpp

static
zmq_msg_t *do_read(JNIEnv *env, jobject obj, zmq_msg_t *message, int flags)
{
    void *socket = get_socket (env, obj);

    int rc = zmq_msg_init (message);
    if (rc != 0) {
        raise_exception (env, zmq_errno());
        return NULL;
    }

#if ZMQ_VERSION >= ZMQ_MAKE_VERSION(3,0,0)
    rc = zmq_recvmsg (socket, message, flags);
#else
    rc = zmq_recv (socket, message, flags);
#endif
    int err = zmq_errno();
    if (rc < 0 && err == EAGAIN) {
        rc = zmq_msg_close (message);
        err = zmq_errno();
        if (rc != 0) {
            raise_exception (env, err);
            return NULL;
        }
        return NULL;
    }
    if (rc < 0) {
        raise_exception (env, err);
        rc = zmq_msg_close (message);
        err = zmq_errno();
        if (rc != 0) {
            raise_exception (env, err);
            return NULL;
        }
        return NULL;
    }
    return message;
}

关于java - 如何在Java中为0MQ(ZeroMQ)设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51090670/

相关文章:

java - 正则表达式词典搜索一次性字母

java - Android sqlite 将 WAL 文件内容刷新到主数据库文件中

java - 非目标绑定(bind)与 `toInstance()` 绑定(bind)

java - 在java程序中执行jmap以生成同一进程的转储

tcp - PyZMQ - 如果没有建立连接如何终止上下文?

javascript - 包含 ZeroMQ JS 绑定(bind)时收到“TypeError : zmq. zmqVersion 不是函数”

java - 如何从 servlet 向所有登录用户发送数据

zeromq - 如何检查zeromq发送数据是否成功

c++ - libzmq 和 cppzmq 之间以及 zmq.h 和 zmq.hpp 之间的区别?

node.js - 在 ZeroMQ 中将多个回复链接到经销商和路由器