我正在尝试安装RabbitMQ PECL扩展但运行后
sudo pecl install amqp
Run Code Online (Sandbox Code Playgroud)
我得到以下神秘的错误消息,广泛的谷歌搜索没有帮助解决.
我安装了这些软件包:
和RabbitMQ在localhost上成功运行
也许它可能是C客户端版本的不匹配以及PECL扩展所期望的,其他人遇到过这个吗?
在下方输出....
干杯
running: make
/bin/bash /tmp/pear/temp/pear-build-rootZNUmac/amqp-1.0.0/libtool --mode=compile cc -I. -I/tmp/pear/temp/amqp -DPHP_ATOM_INC -I/tmp/pear/temp/pear-build-rootZNUmac/amqp- 1.0.0/include -I/tmp/pear/temp/pear-build-rootZNUmac/amqp-1.0.0/main -I/tmp/pear/temp/amqp - I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM - I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib - D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -c /tmp/pear/temp/amqp/amqp.c -o amqp.lo
libtool: compile: cc -I. -I/tmp/pear/temp/amqp -DPHP_ATOM_INC -I/tmp/pear/temp/pear- build-rootZNUmac/amqp-1.0.0/include -I/tmp/pear/temp/pear-build-rootZNUmac/amqp-1.0.0/main - I/tmp/pear/temp/amqp -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM - I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib - D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -c /tmp/pear/temp/amqp/amqp.c -fPIC -DPIC …Run Code Online (Sandbox Code Playgroud) 我正在使用带有rabbitmq后端的芹菜.在rabbitmq中生成数千个队列,其中包含0或1个项目,如下所示:
$ sudo rabbitmqctl list_queues
Listing queues ...
c2e9b4beefc7468ea7c9005009a57e1d 1
1162a89dd72840b19fbe9151c63a4eaa 0
07638a97896744a190f8131c3ba063de 0
b34f8d6d7402408c92c77ff93cdd7cf8 1
f388839917ff4afa9338ef81c28aad75 0
8b898d0c7c7e4be4aa8007b38ccc00ea 1
3fb4be51aaaa4ac097af535301084b01 1
Run Code Online (Sandbox Code Playgroud)
这似乎是低效的,但我进一步观察到这些队列在处理完成后会持续很长时间.
我发现似乎这样做的任务:
@celery.task(ignore_result=True)
def write_pages(page_generator):
g = group(render_page.s(page) for page in page_generator)
res = g.apply_async()
for rendered_page in res:
print rendered_page # TODO: print to file
Run Code Online (Sandbox Code Playgroud)
似乎因为这些任务是在一个组中调用的,所以它们被抛入队列但从未被释放.但是,我显然正在消耗结果(因为我可以在迭代时看到它们被打印出来res.所以,我不明白为什么这些任务会持续存在于队列中.
另外,我想知道正在创建的大量队列是否表明我做错了什么.
感谢您的帮助!
我正在使用rabbitMQ,我使用basic_get从队列中获取每条消息而不自动执行acking过程,这意味着消息保留在队列中,直到我确认或无法消息.
有时我会抛出因为抛出一些异常而无法处理的消息,这会阻止它们被完全处理.
问题是,如果我同时收到成功的消息和抛出的异常,那么重要的是,我的意思是结果消息总是会从队列中消失,所以如果我在这种情况下使用ack或nack,那有什么关系呢?也许我在使用每个操作时都会错过一些东西?
我注意到的一件事是,如果我不洁净地杀死一个消费者(模仿一个崩溃的程序),服务器会认为这个消费者仍然存在很长时间.结果是每个其他消息都将被忽略.
例如,如果您杀死消费者1次并重新连接,则将忽略1/2消息.如果您杀死另一个消费者,则将忽略2/3消息.如果你杀了第3个,那么将忽略3/4个消息,依此类推.
我试过打开确认,但它似乎没有帮助.我找到的唯一解决方案是手动停止服务器并重置它.
有没有更好的办法?
如何重新创建此方案
我现在已经在一些设置中使用RabbitMQ,我无法摆脱必须有更容易设置的东西的感觉.尽管它很方便,但很难证明MQ只能处理每天处理几千条消息的解决方案,这仅仅是因为维护RabbitMQ是如此之多.
有没有人通过简单的安装和维护过程了解AMQP实施?
对于那些不了解它的人,RabbitMQ是用Erlang编写的AMQP实现.它应该是非常稳定的,但只有你对Erlang有足够的了解才能避免它的问题.无论是内存限制还是主机名的更改,总是需要深入了解它.
我的Java应用程序向RabbitMQ交换发送消息,然后交换重定向消息到绑定队列.我在RabbitMQ中使用Springframework AMQP java插件.
问题:消息进入队列,但它保持"未确认"状态,它永远不会变为"就绪".
可能是什么原因?
在提出这个问题之前,我做了一些研究,但我无法找到适合我情况的具体答案.
我想创建WebChat,实时同步到服务器上的DB.(MySQL或MongoDB - 一切都还可以)但是关于同步数据的方法很少:
Ratchet的PHP + websockets和我的工作只是通过JSON创建一个协议来进行身份验证和消息传递.许多文档,许多教程.(我知道websockets在IE中不起作用,但无所谓)
node.js + socket.io - 有与1相同的技术解决方案,但是使用不同的语言.
node.js + meteor.js(sockJS) - 似乎人们都做了所有工作,我不需要添加任何协议功能,只需编写逻辑代码.但是高负荷怎么样?文档怎么样......非常年轻的框架.
Tornado + TornadIO2(socket.io)+ RabbitMQ
有人可以将RabbitMQ与meteor.js进行比较吗?按表现.谁能说哪种方式更好?
我不知道所有的框架,所以如果我有比这四个更好的选择,请告诉我:)
请告诉我你的意见.谢谢!
在尝试创建与另一台服务器上运行的rabbitmq的新连接时,我收到以下错误:
java.io.IOException
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:106)
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:102)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:124)
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:406)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:516)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:533)
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; reason: java.net.SocketException: Connection reset
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67)
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33)
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:343)
at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:216)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:118)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at java.io.DataInputStream.readUnsignedByte(Unknown Source)
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95)
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:131)
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:533)
Run Code Online (Sandbox Code Playgroud)
采取的步骤:
lsof -i tcp:5672
命令PID用户FD类型设备大小/关闭节点名称
beam.smp 3084 rabbitmq 15u IPv6 18611 0t0 TCP*:amqp(LISTEN)
rabbitmqctl list_connections
列出连接... guest client_server …
我一直致力于通过RabbitMQ来完成一些分布式任务.
我花了一些时间试图让Celery做我想做的事情,但却无法让它发挥作用.
然后我尝试使用Pika和刚刚工作的东西,完美无缺,几分钟之内.
使用Pika而不是芹菜,有什么我错过的吗?
RabbitMQ允许您"心跳"连接,即客户端和服务器不时检查(使用空消息)对方仍然存在且可用.到现在为止还挺好.
不幸的是,我无法在文档中找到建议的地方,这是一个合理的价值.我知道你需要在几秒钟内指定心跳,但什么是真实世界的最佳练习值?
显然,它不应该太频繁(流量),但也不是太罕见(代理,......).有什么建议?
15秒好吗?30?60?...?