2014-03-31 6 views
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) 

답변

2

이 하나를 알아 냈어!

zmqContext = ZMQ.context(0); GenericService의 라인이 문제가되었습니다 ... 라인이 zmqContext = ZMQ.context(1);

이어야합니다.