问题标签 [rabbitmq-shovel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
2111 浏览

rabbitmq - RabbitMQ Shovel 连接失败

我有 2 个 rabbitmq 盒子,名为:centos (192.168.1.115) 和 devserver (192.168.1.126)

在“centos”中,我有:

我有一个名为 : toshovel 的队列,它绑定到一个带有路由键“#”的主题交换我测试发布到交换和传输到该队列的消息。

在“devserver”中,我有: 1. 名为 bino.topic 的主题交换 2. 名为:bino.nms.idc3d 的队列绑定到 bino.topic 这也经过测试。包括使用 pika 将消息从“centos”发布到“devserver”,这样我确定没有防火墙、许可或身份验证(用户/密码:esx/esx)问题

现在我想从“centos”铲到“devserver”

我尝试根据https://www.rabbitmq.com/shovel-dynamic.html在“centos”中添加铲子

rabbitmqctl set_parameter shovel my-shovel '{"src-protocol": "amqp091", "src-uri": "amqp://esx:esx@192.168.1.115", "src-queue": "toshovel", "dest -protocol”:“amqp091”,“dest-uri”:“amqp://esx:esx@192.168.126/”,“dest-queue”:“bino.nms.idc3d”}'

但是centos日志说

来自:/var/log/rabbitmq/rabbit\@centos.log

来自 /var/log/rabbitmq/log/crash.log

请给我一些线索

0 投票
2 回答
1558 浏览

rabbitmq - RabbitMQ 铲子卡在“终止”状态

我们有一个问题,有时,一个动态铲子(通过 HTTP API 创建:)/api/parameters/shovel/设置src-delete-afterqueue-length完成,然后没有被删除,而是卡在终止状态。

后续尝试通过以下任一方法删除铲子均不成功:

  1. 发布DELETE/api/parameters/shovel/
  2. rabbitmqctl delete_shovel
  3. rabbitmqctl clear_parameter -p <vhost> shovel <shovel_name>

铲子甚至没有出现在 RabbitMQ 管理 UI 的“铲子管理”部分中。

我们可以摆脱卡住的铲子的唯一方法是重新启动 RabbitMQ。

还有其他人有这个问题吗?如果是这样,我们如何在不重启集群的情况下清除铲子?另外,是否可以通过配置防止这种情况发生?

谢谢!

PS:

  1. RabbitMQ 版本:3.4.4
  2. 运行一个 2 节点集群(由于在网络分区的情况下我们可能面临的明显问题,很快将使其成为 3 节点集群)。

RabbitMQ 铲子卡在“终止”状态

0 投票
1 回答
185 浏览

rabbitmq - 铲子的每条消息 TTL 行为

铲子

  • 消费队列中的消息,
  • 将每条消息重新发布到目标代理(默认情况下,使用原始交换名称和适用时的 routing_key)。

我找不到任何文档,当涉及铲子时,消息 TTL 的预期行为是什么:

  • 用于计算 TTL 的时间是在源代理还是目标代理收到消息时开始计算的?还是仅对第一次发布有效,即在源代理处?

  • 如果在消息到达目标代理之前过期时间已过,会发生什么情况?

0 投票
2 回答
829 浏览

rabbitmq - 如何使用rabbitmq HTTP调用获取rabbitmq联合链接状态

有人知道如何使用 RabbitMQ 的 HTTP API 获取联合链接的状态吗?我可以通过以下示例获取上游联合的定义,但找不到获取其状态的方法。

呼叫 - http://[hostname]:15672/api/parameters/federation-upstream返回我

[{"value":{"uri":["amqp://USER:PASSWORD@HOSTNAME:4003/VHOST"],"trust-user-id":false,"exchange":"anurag.fed"}, "vhost":"VHOST","component":"federation-upstream","name":"upstream-fed"}]

官方文档说,可以通过rabbitmqctl或者GUI来监控链接状态,但是没有在任何地方提到HTTP apis。这是否意味着rabbitmq在API中没有这个能力?如果有人可以帮忙吗?

https://www.rabbitmq.com/federation-reference.html “您可以使用 rabbitmqctl 和管理插件监控联合链接的状态。”

正在使用的 RabbitMQ 版本:3.6.8

谢谢,阿努拉格

0 投票
0 回答
189 浏览

kubernetes - Shovel(在 kubernetes 中作为服务运行)无法连接到 kafka(在 kubernetes 中作为服务运行)

问题:

  1. Shovel 部署失败,因为它无法与 kafka 通信,出现错误:NoBrokersAvailable kafka=kafka.datacenter.svc.cluster.local:9092

ubuntu@k8s-worker-1:~$ sudo docker logs k8s_shovel-8469fc4b6d-ftmt4_03933125-ff8c-11e8-ac37-fa163e8dcff2_0
2018-12-14 10:35.48 在 grafana.datacenter.svc.cluster.local:2004
2018连接到石墨-12-14 10:35.48 连接到 kafka kafka=kafka.datacenter.svc.cluster.local
2018-12-14 10:35.50 无法连接到 kafka e=NoBrokersAvailable() kafka=kafka.datacenter .svc.cluster.local:9092

  1. 完成上述语句后,容器退出。

环境:

  1. Kafka 使用 yml 文件部署在 Kubernetes 环境中。
  2. 尝试使用 yml 文件在 Kubernetes 环境中部署 Shovel。
  3. Kafka 成功连接到 zookeeper。
  4. 在部署 shovel 时传递以下参数:

    参数: - “铲子
    /main.py”-“--kafka=kafka.$(NAMESPACE).svc.cluster.local:9092”-“--consul=consul:4000”-“--host=grafana.$ (命名空间).svc.cluster.local" - "--topic=datacenter.test"


ubuntu@k8s-master-1:~$ kubectl describe pod shovel-8469fc4b6d-ftmt4 -n datacenter

Events: Type Reason Age From Message
---- ------ ---- ---- --------
Normal Scheduled 10m default-scheduler 已成功将 shovel-8469fc4b6d-ftmt4 分配给 k8s-worker- 1
Normal SuccessMountVolume 10m kubelet, k8s-worker-1 MountVolume.SetUp 为卷“default-token-pk”成功
Normal Created 9m (x4 over 10m) kubelet, k8s-worker-1 Created container
Normal Started 9m (x4 over 10m) kubelet , k8s-worker-1 启动容器
正常拉取 8m (x5 over 10m) kubelet, k8s-worker-1 拉取镜像 "docker-registry:8000/datacenter-shovel"
正常拉取 8m (x5 over 10m) kubelet, k8s-worker-1 成功拉取镜像 "docker-registry :8000/datacenter-shovel"
警告 BackOff 12s (x44 over 10m) kubelet, k8s-worker-1 Back-off 重启失败的容器

++根据kafka和shovel PODS之间的抓包:

  1. 我们能够看到正在交换的数据包。(Internet 协议版本 4,Src:192.168.1.81,Dst:192.168.1.94)

  2. Shovel POD 能够看到来自 kafka POD 的数据包。

  3. Kafka POD 能够将数据包发送到 shovel pod。

任何帮助将不胜感激。

0 投票
1 回答
1158 浏览

rabbitmq - 集群中的 RabbitMQ Shovel 插件

我们有一个配置了三个节点的 RabbitMQ 集群。每个节点都有两个虚拟主机(Vhost-A 和 Vhost-B)。我们需要一种将消息从 Vhost-A 移动到 Vhost-B 的可能性。为此,我们设置了一个铲子,将消息从 Vhost-A 上的 Exchange-1 引导到 Vhost-B 上的 Exchange-2。

这具有在目标 Exchange-2 上复制邮件的副作用。意思是,我们绑定到 Vhost-B 上的 Exchange-2 的测试队列三次收到相同的消息(每个集群节点一次)。

我们怎样才能防止这种情况发生?是否需要更改铲子配置或集群配置?

RabbitMQ 版本:3.6.15

更新 1:

我们有两个无法删除的独占队列,因为它们被锁定了。一旦我们在所有集群节点上禁用铲子插件,这些队列就会消失。一旦我们在一个节点上重新激活插件,就会再次创建队列。

0 投票
1 回答
771 浏览

node.js - 我可以从我的 NodeJS 应用程序动态创建 RabbitMQ 铲子吗?

RabbitMQ 铲子插件提供了一个 HTTP API 来创建和配置铲子。假设我为我的 RabbitMQ 服务器实例启用了铲子和铲子管理插件,我可以从我的 NodeJS 应用程序动态创建铲子吗?

我目前使用 amqplib 连接到交易所。https://www.squaremobius.net/amqp.node/channel_api.html

但是我没有看到任何 API 可以动态创建铲子。这是可以实现的还是有任何其他库支持这一点?

0 投票
1 回答
427 浏览

rabbitmq - 更新证书后,RabbitMQ Shovel over TLS 错误与 badmatch

我的 RabbitMQ 安装已经使用 TLS 连接的铲子运行了一年多。铲子一直使用自签名证书,直到它们过期。当我重新创建新证书时,即使我将证书、密钥和 CA 证书放在与以前相同的位置,铲子仍然无法工作。我得到的错误是这样的(来自 rabbit@hostname-sasl.log - 长行已用 \ “继续”):

我的 RMQ 状态:

0 投票
1 回答
132 浏览

rabbitmq - 铲子插件不将现有消息传输到目标队列

我正在尝试将队列(Q1)中的所有消息复制到另一台机器上运行的另一个队列(Q2)。

我正在使用铲子插件,两个节点都在运行 amqp 091。我已经测试了连接,如果我将目标队列设置为不存在的队列,它确实会在单独的机器上创建一个新队列,所以我知道连接工作。

我希望插件将所有现有消息传输到 Q2,但是它们没有被传输。铲子插件不这样做吗?

0 投票
1 回答
260 浏览

rabbitmq - 动态铲子的`delete-after`属性的奇怪行为

作为更大用例的一部分,我正在探索将消息从源移动到临时队列的铲子插件。我正在为每个队列创建动态铲子,以将消息移动到临时队列并使用属性"delete-after": "queue-length"删除动态铲子。我在 RabbitMQ 管理控制台(Admin->Shovel status)中看到动态铲子已成功删除,但源/临时队列的状态正在运行。

但问题是,当新消息进入源队列时,即使源队列没有消费者,它们也会自动移动到临时队列。

笔记:

  1. 源队列和临时队列都是持久的。
  2. 消息是持久的(传递模式:2)
  3. 由于有数百个队列,上述操作是并行执行的。我正在为每个队列创建动态铲子并删除它们。

删除动态铲后的队列状态 虽然我使用 DELETE HTTP API 而不是上述方法来删除动态铲子,但它运行良好。我想避免进行额外的 HTTP 调用,因为源队列有数百个。