1
서버에서 실행될 간단한 Java 응용 프로그램을 작성하고 간단한 작업을 수행하려고합니다. 하지만 현재 내 응용 프로그램이 이상한 오류로 인해 실패하고 있습니다. 어떤 정보도 찾을 수없는 것 같습니다.JZMQ 오류 : 사용할 수있는 스레드가 없습니다.
두 서비스는 모두 같은 서버에서 실행되지만 내 응용 프로그램 만 실패합니다. C zmq 프레임 워크에 대한 최소한의 문서 만 찾았습니다. 자바를위한 아무것도.
오류가 발생 클래스 :
public class TestService extends GenericService {
public TestService(String[] args) {
init(args);
}
private void init(String[] args) {
int i = 0;
serviceId = args[i++];
servicePort = Integer.valueOf(args[i++]);
}
private void retrieveConfig() {
}
public void run() {
System.out.println("Running");
initZmq(); // <---- Here
retrieveConfig();
for (int i=0; i<120; i++) {
System.out.println("Counter = " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
closeZmq();
System.out.println("Done!");
}
@Override
protected void requestInit() {
zmqClient.send(getInitMessage().getBytes(),0);
byte[] reply = zmqClient.recv(0);
System.out.println("Config - " + (new String(reply)));
}
}
추상 일반 서비스 클래스를.
public abstract class GenericService {
protected Context zmqContext;
protected Socket zmqClient;
protected int port;
protected int servicePort;
protected String serviceId;
protected static final String addressNoPort = "tcp://127.0.0.1:";
public GenericService() {}
protected void initZmq() {
zmqContext = ZMQ.context(0);
zmqClient = zmqContext.socket(ZMQ.REQ);
zmqClient.connect(getAddress());
}
protected void closeZmq() {
zmqClient.close();
zmqContext.term();
}
protected abstract void requestInit();
public String getAddress() {
return addressNoPort+servicePort;
}
public String getInitMessage() {
return serviceId+":init";
}
}
내 응용 프로그램을 어떻게 실행합니까?
public class TestServiceRunner {
public static void main(String[] args) {
for (String string : args) {
System.out.println("Params = "+string);
}
System.out.println("Starting Test service ...");
TestService testService = new TestService(args);
testService.run();
}
}
그리고 내 스택 트레이스
Exception in thread "main" org.zeromq.ZMQException: No thread available(0x9523dfe)
at org.zeromq.ZMQ$Socket.connect(Native Method)
at GenericService.initZmq(GenericService.java:22)
at TestService.run(TestService.java:25)
at TestServiceRunner.main(TestServiceRunner.java:13)