使用Federated插件的物联网RabbitMQ?

时间:2017-12-05 15:55:44

标签: raspberry-pi rabbitmq cloud iot

我对RabbitMQ和联合插件感到困惑。因此,我似乎无法将其设置为工作。

假设我有'n'个覆盆子pi(rpi1,rpi2,rpi3 ...... rpin)

我希望他们都将消息发送到云服务器(c1)。

他们将有间歇性的互联网连接,因此我希望他们在发送到服务器之前将所有邮件排在本地。然后,当他们上线将他们的消息发送到c1,以便我可以从队列中检索它们。我希望所有消息都转到一个队列。

我在所有主机上设置了rabbitmq。

这就是我所做的:

我在所有树莓派上配置上游

rabbitmqctl set_parameter federation-upstream my-upstream '{"uri":"amqp://user:pwd@c1.foo.com","expires":3600000}'
rabbitmqctl set_policy --apply-to exchanges federate-me "^amq\." '{"federation-upstream-set":"all"}'

交易所似乎在服务器上设置了自己

我似乎无法弄清楚如何将消息添加到rpi队列并让它显示在服务器上。

我错过了什么?

  1. 联邦是我想要的吗?
  2. 我在c1上要做些什么来让它接收传入的消息并将它们放入队列?
  3. 我需要做什么才能让他们将消息发送到服务器
  4. 这是我尝试的好路径吗?
  5. 完全迷失了。谢谢你的帮助!!

1 个答案:

答案 0 :(得分:0)

从您描述的用例来看,联盟似乎是适合您的正确道路。

来自documentation

  

联合插件使用AMQP 0-9-1在代理之间进行通信,旨在容忍间歇性连接。

您的设置问题是您已在上游节点上完成配置,而it should be done on the federated node:

  

联邦交换机链接到其他交换机(称为上游交换机)。逻辑上(参见下一个项目),发布到上游交换机的消息将被复制到联合交换机,就像它们直接发布到联合交换机一样。上游交换不需要重新配置,也不必位于同一个代理或同一个集群中。

因此对rpis没有任何操作,配置在c1上。

  1. 为每个rpis
  2. 在c1中创建一个上游
  3. 使用您创建的所有上游创建联合上游集
  4. 添加策略以将rpis上的目标交换链接到c1上的交换,引用您已定义的联合上游集(因为“all”指的是所有上游,这可能适合您的用例当然,只是觉得它更具特色)