我需要使用 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/