小编Ji *_*ANG的帖子

使用Supervisord监督ZooKeeper

正如在ZooKeeper的文档中所说,有必要使用daemontools等工具来监督它.但是文档没有提供任何示例,我知道启动ZooKeeper的唯一方法是运行bin/zkServer.sh start.我打算用supervisord来完成这项工作,但是如何编写[program:zookeeper]部分已经超出了我的范围.任何例子都会很棒.谢谢.

到目前为止,有两种解决方案:

  1. 使用来自github的最新代码,它提供了stopasgroup和killasgroup选项.
  2. 执行bin/zkServer.sh print-cmd,并将输出复制到supervisord的'command'选项,删除管道参数,并添加stdout_logfile,stderr_logfile.如下:
    [program:zookeeper]
    command = /usr/lib/jvm/java-1.7.0-openjdk.x86_64/bin/java -Dzookeeper.log.dir="." -Dzookeeper.root.logger="INFO,CONSOLE" -cp "/home/jizhang/Applications/zookeeper/bin/../build/classes:/home/jizhang/Applications/zookeeper/bin/../build/lib/*.jar:/home/jizhang/Applications/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/jizhang/Applications/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/home/jizhang/Applications/zookeeper/bin/../lib/netty-3.2.2.Final.jar:/home/jizhang/Applications/zookeeper/bin/../lib/log4j-1.2.15.jar:/home/jizhang/Applications/zookeeper/bin/../lib/jline-0.9.94.jar:/home/jizhang/Applications/zookeeper/bin/../zookeeper-3.4.3.jar:/home/jizhang/Applications/zookeeper/bin/../src/java/lib/*.jar:/home/jizhang/Applications/zookeeper/bin/../conf:"   -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain "/home/jizhang/Applications/zookeeper/bin/../conf/zoo.cfg"
    stdout_logfile = /home/jizhang/Applications/zookeeper/zookeeper.out
    stderr_logfile = /home/jizhang/Applications/zookeeper/zookeeper.err
    autorestart = true

supervisord apache-zookeeper

11
推荐指数
1
解决办法
7922
查看次数

执行前加载环境变量

我计划在环境变量中存储一些应用程序设置,例如MYSQL_URL = mysql:// ...我使用supervisord来管理应用程序进程.如何在子进程启动之前加载环境变量?特别是当这些设置改变时,我希望重新启动子进程将加载新设置.

另外我想知道在哪里存储这些环境变量.我可以"导出$(cat filename)"的文件?或者一些更好的方法.我很好奇Heroku如何管理它的环境变量.

environment-variables supervisord

9
推荐指数
1
解决办法
4476
查看次数

我应该在python中显式关闭zeromq套接字吗?

在类似C/C++的语言中,显式关闭zeromq套接字是必须的,我理解.但是在一些更高级的语言中,例如php和python,它们都有垃圾收集机制,我是否需要显式关闭套接字?

在PHP中,没有ZMQSocket :: close(),在python中,pyzmq的doc说socket.close()可以省略,因为它会在垃圾收集过程中自动关闭.

所以我的问题是,我是否需要手动关闭它?...

python zeromq

7
推荐指数
1
解决办法
8010
查看次数

如何在Java中实现类似DAG的调度程序?

我想在Java中实现一个简单的类似DAG的调度程序(无需结果),如下图所示:

类似DAG的调度

我可以简单地使用手动代码来实现这个目的:

ExecutorService executor = Executors.newCachedThreadPool();
Future<?> futureA = executor.submit(new Task("A"));
Future<?> futureC = executor.submit(new Task("C"));
futureA.get();
Future<?> futureB = executor.submit(new Task("B"));
futureB.get();
futureC.get();
Future<?> futureD = executor.submit(new Task("D"));
futureD.get();
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种更通用的方法,所以我可以像这样使用调度程序:

Container container = new Container();
container.addTask("A", new Task("A"));
container.addTask("B", new Task("B"), "A");
container.addTask("C", new Task("C"));
container.addTask("D", new Task("D"), "B", "C");
container.waitForCompletion();
Run Code Online (Sandbox Code Playgroud)

实际上我已经实现了一个简单的:

https://github.com/jizhang/micro-scheduler/blob/master/src/main/java/com/shzhangji/micro_scheduler/App.java

但我需要每隔100毫秒迭代一次所有任务,看看哪一个已准备好提交.同样在这个实现中,没有异常检查.

我也检查了Guava lib的ListenableFuture,但我不知道如何正确使用它.

任何关于如何实现DAG或推荐现有开源调度程序的建议都将受到赞赏.

java

4
推荐指数
2
解决办法
4431
查看次数

ZeroMQ客户端失去连接

我有一个客户端(PULL)连接到服务器(PUSH)。起初,它们工作得很好。但是稍后连接断开,客户端ZeroMQ不会尝试重新连接到服务器。

一件不可思议的事情是,如果我netstat在客户端和服务器端进行操作,则客户端会显示连接仍已建立,而服务器端没有相应的条目。我想这就是客户端不重新连接的原因。

PS:客户端和服务器在不同的IDC中,并且它们之间存在带宽限制。但是当断开连接发生时,我们的监视器显示它没有达到频带限制。

而且,当我在服务器端执行netstat时(连接正常时),有时Send-Q列很大,然后降为0。

这就是我所拥有的全部信息。如果您需要更多详细信息,请告诉我。

tcp zeromq

3
推荐指数
1
解决办法
2218
查看次数

在 Java 中抛出复合异常

我正在使用ExecutorService,FutureCallable进行并行处理。虽然Callable在调用时可以捕获 的异常Future#get,但如何捕获所有可调用对象抛出的所有异常,然后抛出一个巨大的复合异常,例如:

ExecutorService service = Executors.newFixedThreadPool(5);
List<Future<Void>> futures = new ArrayList<Future<Void>>();
futures.add(service.submit(new TaskA());
futures.add(service.submit(new TaskB());

for (Future<Void> future : futures) {
    try {
        future.get();
    } catch (Exception e) {
        // ???
    }
}

// throw the big exception here

service.shutdown();
Run Code Online (Sandbox Code Playgroud)

java exception

3
推荐指数
1
解决办法
4086
查看次数