我正在构建一个docker-compose文件。我启动RabbitMQ容器并将必要的端口绑定到主机。然后,我试图从另一个容器连接到它。
因此,如下所示,我将network_mode
选项设置为host
,因此我可以使用localhost
作为队列的主机名。在下面,您可以看到docker-compose yaml文件:
version: '3'
services:
queue:
image: "rabbitmq:3"
ports:
- "5672:5672"
- "15672:15672"
worker:
image: "some_image"
network_mode: "host"
depends_on:
- queue
运行代码时,工作程序尝试使用主机名localhost
连接到RabbitMQ,但出现IncompatibleProtocolError: StreamLostError: ('Transport indicated EOF',)
错误。具体来说:
File "/usr/local/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 359, in __init__
recommender_filtering_worker_1 | self._impl = self._create_connection(parameters, _impl_class)
recommender_filtering_worker_1 | File "/usr/local/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 450, in _create_connection
recommender_filtering_worker_1 | raise self._reap_last_connection_workflow_error(error)
recommender_filtering_worker_1 | pika.exceptions.IncompatibleProtocolError: StreamLostError: ('Transport indicated EOF',)
任何帮助将不胜感激。
答案 0 :(得分:1)
问题似乎是您的应用程序没有等待队列“准备就绪”以接受连接。 if (CheckArea(point.NormalLine, clickX, clickY) || CheckArea(point.ReverseLine, clickX, clickY)) {
MenuItem header = new MenuItem{ Header = point.Name};
MenuItem norm = new MenuItem { Header ="Normal"};
MenuItem reverse = new MenuItem { Header ="Reverse"};
Separator sep = new Separator { };
norm.Command = point.SetNormalCommand;
reverse.Command = point.SetReverseCommand;
contextMenu = new ContextMenu();
contextMenu.Items.Add(header);
contextMenu.Items.Add(sep);
contextMenu.Items.Add(norm);
contextMenu.Items.Add(reverse);
contextMenu.IsOpen = true;
_window.ContextMenu = contextMenu;
break;
}
else {
contextMenu.IsOpen = false;
_window.ContextMenu = null;
}
块可确保您的队列容器在工作线程之前启动,但不能保证您的队列已准备好接受连接。
这里可以采用不同的解决方案。一直打队列,直到它回答为止(不是持续不断,但可能每10-15秒一次)或添加“ wait_for”脚本(https://github.com/eficode/wait-for)。