java.library.path中没有jzmq

我在一个交易引擎上工作,在运行时,我从engine.log获取日志,如下所示,

 2018_01_02_03_28_20_684 INFO ZMQCommunicatorService REMOTE_EXECUTOR_MARKET_ADMIN-ALL_MARKETS-0-5 - no jzmq in java.library.path, sleeping 2 minutes then try again 2018_01_02_03_28_20_697 INFO ZMQCommunicatorService ENGINE_MARKET_ADMIN-ALL_MARKETS-0-4 - Could not initialize class org.zeromq.ZMQ, sleeping 2 minutes then try again 2018_01_02_03_30_20_696 INFO ZMQCommunicatorService REMOTE_EXECUTOR_MARKET_ADMIN-ALL_MARKETS-0-5 - Could not initialize class org.zeromq.ZMQ, sleeping 2 minutes then try again 2018_01_02_03_30_20_710 INFO ZMQCommunicatorService ENGINE_MARKET_ADMIN-ALL_MARKETS-0-4 - Could not initialize class org.zeromq.ZMQ, sleeping 2 minutes then try again 2018_01_02_03_32_20_697 INFO ZMQCommunicatorService REMOTE_EXECUTOR_MARKET_ADMIN-ALL_MARKETS-0-5 - Could not initialize class org.zeromq.ZMQ, sleeping 2 minutes then try again 2018_01_02_03_32_20_711 INFO ZMQCommunicatorService ENGINE_MARKET_ADMIN-ALL_MARKETS-0-4 - Could not initialize class org.zeromq.ZMQ, sleeping 2 minutes then try again 2018_01_02_03_34_20_698 INFO ZMQCommunicatorService REMOTE_EXECUTOR_MARKET_ADMIN-ALL_MARKETS-0-5 - Could not initialize class org.zeromq.ZMQ, sleeping 2 minutes then try again 2018_01_02_03_34_20_712 INFO ZMQCommunicatorService ENGINE_MARKET_ADMIN-ALL_MARKETS-0-4 - Could not initialize class org.zeromq.ZMQ, sleeping 2 minutes then try again 2018_01_02_03_36_20_699 INFO ZMQCommunicatorService REMOTE_EXECUTOR_MARKET_ADMIN-ALL_MARKETS-0-5 - Could not initialize class org.zeromq.ZMQ, sleeping 2 minutes then try again 2018_01_02_03_36_20_713 INFO ZMQCommunicatorService ENGINE_MARKET_ADMIN-ALL_MARKETS-0-4 - Could not initialize class org.zeromq.ZMQ, sleeping 2 minutes then try again 

我相信第一行讲的是主要问题,

 No jzmq in java.library.path 

我按照ZMQ binding Java的安装手册,

 cd /root wget https://github.com/zeromq/jzmq/archive/v3.1.0.tar.gz -O jzmq-3.1.0.tar.gz tar zxf jzmq-3.1.0.tar.gz cd jzmq-3.1.0 ./autogen.sh ./configure --prefix=/opt/jzmq-3.1.0 nice make make install 

加载项目后,需要在项目根目录中运行命令,

 root@debian:~# export LD_LIBRARY_PATH=/opt/jzmq-3.1.0/lib root@debian:~# java -Xss256k -cp /opt/jzmq-3.1.0/share/java/zmq.jar:draglet-common/target/lib/*:draglet-balser/target/lib/*:draglet-engine/target/lib/*:draglet-remote/target/lib/*:draglet-mapu/target/lib/*:draglet-shaba/target/lib/*:draglet-meba/target/lib/* -Dlog4j.configurationFile=draglet-common/src/main/resources/log4j2.xml -DisThreadContextMapInheritable=true com.draglet.batch.Batch draglet.yml 

当时我得到的输出像,

 Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. Tue Jan 02 03:59:17 EST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification. 

该问题是否与Intellij终端中提供的警告有关? 如何检查jzmq是否在java.library.path

好。 所以,让我们一起弄脏:

在你的机器上看,如果这应该在应有的安装之后运行,或者不是:

最简单的forms原型之一是REQ/REP示例,它使用两个部分,一个 – “ 服务器 ”:

 import org.zeromq.ZMQ; import org.zeromq.ZMQ.Context; import org.zeromq.ZMQ.Socket; public class rrserver{ public static void main (String[] args) { Context context = ZMQ.context(1); // Socket to talk to clients Socket responder = context.socket(ZMQ.REP); responder.bind("tcp://localhost:5560"); System.out.println("launch and connect server."); while (!Thread.currentThread().isInterrupted()) { // Wait for next request from client byte[] request = responder.recv(0); String string = new String(request); System.out.println("Received request: ["+string+"]."); // Do some 'work' try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } // Send reply back to client responder.send("World".getBytes(), 0); } // We never get here but clean up anyhow responder.close(); context.term(); } } 

另一部分是“ 客户 ”:

 import org.zeromq.ZMQ; import org.zeromq.ZMQ.Context; import org.zeromq.ZMQ.Socket; public class rrclient{ public static void main(String[] args) { Context context = ZMQ.context(1); // Socket to talk to server Socket requester = context.socket(ZMQ.REQ); requester.connect("tcp://localhost:5560"); // REF ABOVE AND LET START THIS AFTER "server" System.out.println("launch and connect client."); for (int request_nbr = 0; request_nbr < 10; request_nbr++) { requester.send("Hello", 0); String reply = requester.recvStr(0); System.out.println("Received reply " + request_nbr + " [" + reply + "]"); } // We never get here but clean up anyhow requester.close(); context.term(); } } 

如果安装完成正确与否,这应该快速启动和运行。 代码是从ZeroMQ借来的一些琐碎的例子中获得灵感的。

如果真的认真考虑进入分布式计算领域,请不要犹豫,阅读Pieter HINTJENS的一本好书,“Code Connected,Volume 1”(也可以pdf格式提供)。 值得的时间和努力。

Interesting Posts