如何在无业游民的主机上连接到Rabbit?

时间:2019-05-22 18:23:07

标签: python rabbitmq vagrant pika

我在虚拟机上使用无业游民设置了服务器。安装rabbitmq之后,我尝试使用VM外部的脚本连接到它。 VM上已经运行了Django和RabbitMQ。运行脚本后,我有一个例外:

pika.exceptions.IncompatibleProtocolError:StreamLostError:('运输注明为EOF',)

如何解决我的问题?

我的朋友已经在raspberryPi上使用了下面提供的代码,该代码实际上设法执行了它。我在PC上所做的唯一更改是将主机名从指定的IP更改为“ 127.0.0.1”,并添加了端口号。

rstantools

错误消息:

import pika
import sys
import random
import time
#from nos import dokonaj_pomiar

credentials = pika.PlainCredentials(username='admin', password='admin')
connection = pika.BlockingConnection(pika.ConnectionParameters(host='127.0.0.1',port=15672,credentials=credentials))

channel = connection.channel()
channel.queue_declare(queue='hello',durable=True)

2 个答案:

答案 0 :(得分:2)

@Pigeonnn 在 his own comment 中为他自己的问题提供了对这篇帖子的原始问题的答案:

<块引用>

其实我刚刚找到了一个解决方案。问题是如果你想 听rabbitmq你需要通过端口5672连接 - 而不是15672。 更改端口,转发,一切正常:)

答案 1 :(得分:0)

首先在 vagrant 配置文件(Vagrantfile)中将主机端口转发到 Vagrant 上的访客端口。请注意不要使用已使用的主机端口。

#include <boost/preprocessor.hpp>

#define ENUM_FIELD(I,_,F) F,
#define ENUM_OUTPUT_CASE(I,N,F) case N::F: os << BOOST_PP_STRINGIZE(F); break;

#define ENUM(N, T, ARGS) \
enum class N : T {\
BOOST_PP_SEQ_FOR_EACH(ENUM_FIELD,N,ARGS)\
};\
std::ostream &operator <<(std::ostream &os, const N val) {\
    switch (val) {\
    BOOST_PP_SEQ_FOR_EACH(ENUM_OUTPUT_CASE,N,ARGS)\
    }\
    \
    os << '(' << static_cast<int>(val) << ')';\
    return os;\
}

ENUM(Weekdays, unsigned char, (Monday)(Tuesday)(Wednesday)(Thursday)(Friday)(Saturday)(Sunday))

然后像这样连接:

Vagrant.configure("2") do |config|
  config.vm.network "forwarded_port", guest: 5672, host: 5671  # Rabbit
end

不要忘记相应地配置用户管理员。