小编smi*_*lli的帖子

当prefetch_count == 1时拒绝并重新执行RabbitMQ任务

假设我有一个包含五个项目的队列:

(tail) E, D, C, B, A (head)
Run Code Online (Sandbox Code Playgroud)

我从此队列的开头消耗了消息,但决定该消息A当前不适合处理。我reject将该项目添加到requeue=True,并且队列变为:

(tail) A, E, D, C, B (head)
Run Code Online (Sandbox Code Playgroud)

我再消费BCD,和Eack荷兰国际集团各一个。现在,该队列仅容纳A,而我reject在一个永无休止的循环中不断不断地消耗它。如果有新的非A消息进入,则几乎立即将其消耗掉,然后该过程将恢复尝试消耗的循环A

我对Pika文档中的Twisted Consumer示例进行了一些修改:

import pika
from pika import exceptions
from pika.adapters import twisted_connection
from twisted.internet import defer, reactor, protocol,task


@defer.inlineCallbacks
def run(connection):

    channel = yield connection.channel()

    exchange = yield channel.exchange_declare(exchange='topic_link',type='topic')

    queue = yield channel.queue_declare(queue='hello', auto_delete=False, exclusive=False)

    yield channel.queue_bind(exchange='topic_link',queue='hello',routing_key='hello.world') …
Run Code Online (Sandbox Code Playgroud)

python rabbitmq pika

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

ISO 8601持续时间"P1M"的值是多少(以秒为单位)?

假设我有一个ISO 8601持续时间,表示为"P1M".通俗地说,这意味着"一个月".假设开始日期未知,是否有将其转换为秒数的标准规则?

  • 30天的月份,可能是2,592,000.
  • 31天的月份可能是2,678,400.
  • 2月份可能是2,419,200或者可能是2,505,600.

我的直觉说没有办法在不知道背景的情况下将"一个月"解决到一个确切的秒数,并且这些秒在这些日历上排列.但是,是否有标准的规则/惯例以抽象的方式计算这些持续时间?

duration iso8601 date-math

3
推荐指数
2
解决办法
3868
查看次数

如何确保新启动的VM已准备好进行配置?

这在Ubuntu 14.04下并不是什么大问题,但是由于切换到16.04,事情变得有点乱:

当我使用工具启动新VM并运行配置脚本(想想Vagrant或Packer)时,脚本所做的第一件事就是apt-get update/ upgrade/ installdance.我注意到,自从切换到Ubuntu Xenial后,这些脚本会抛出许多非确定性错误,例如

Reading package lists...
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
Run Code Online (Sandbox Code Playgroud)

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
Run Code Online (Sandbox Code Playgroud)

如果我sleep 30在脚本的开头抛出一个或类似的东西,它似乎安定下来.如果我在循环中尝试每个命令重试,直到退出状态为止,它也可以工作0.我能说的最好,有一些第一启动任务在我的配置器同时运行apt-get.

我觉得这很明显,就像apt-daily服务一样.但添加以下等待循环无效; 它永远不会等待任何事情:

while systemctl status apt-daily.service > /dev/null 2>&1; do
    sleep 0.5
done
Run Code Online (Sandbox Code Playgroud)

我知道我可以按照这个问题中的想法来检查特定的锁定,但是我更感兴趣的是,如果有一个更通用和防弹的方法来确定新VM何时完全出现.做一个盲人 …

ubuntu upstart provisioning virtual-machine apt-get

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

Node.js:检测到一个文件,该文件通过fs.createWriteStream()打开,已被删除

假设我有以下Node程序,该机器运行“ Ping!”:

var machine = require('fs').createWriteStream('machine.log', {
    flags    : 'a',
    encoding : 'utf8',
    mode     : 0644
});

setInterval(function () {
    var message = 'Ping!';
    console.log(message);
    machine.write(message + '\n');
}, 1000);
Run Code Online (Sandbox Code Playgroud)

每秒,它将打印一条消息到控制台,并将其附加到日志文件(如果需要,它将在启动时创建)。一切都很好。

但是现在,如果我machine.log在进程运行时删除文件,它将继续愉快地嗡嗡作响,但是由于文件已消失,写入将不再成功。但是看起来写操作无声地失败了,这意味着我将需要显式检查这种情况。我已经搜索了Stream文档,但似乎找不到此类事件发生时发出的明显事件。的返回值write()也没有用。

如何检测何时删除正在写入的文件,以便尝试重新打开或重新创建该文件?如果需要的话,这是一个CentOS框。

javascript filesystems stream fs node.js

2
推荐指数
1
解决办法
2006
查看次数

Shell命令确定文件`foo`是否是文件`bar`的截断

说我有两个文件,foobar.如果我想验证他们有相同的内容,我可以运行:

diff -q foo bar
Run Code Online (Sandbox Code Playgroud)

并检查退出代码是否为零.同样,我可以为具有不同内容的文件执行相同的操作,并查找非零退出状态.

现在,假设在我们的情况下文件foo是500字节,文件bar是几兆字节 - 但前500字节bar与整个文件相同foo.是否有一个简单的命令来验证这种情况,最好不解析大差异的输出?

如果文件是二进制而不是文本,它会改变什么吗?

bash shell diff truncate

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