问题标签 [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.
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
请给我一些线索
rabbitmq - RabbitMQ 铲子卡在“终止”状态
我们有一个问题,有时,一个动态铲子(通过 HTTP API 创建:)/api/parameters/shovel/
设置src-delete-after
为queue-length
完成,然后没有被删除,而是卡在终止状态。
后续尝试通过以下任一方法删除铲子均不成功:
- 发布
DELETE
到/api/parameters/shovel/
rabbitmqctl delete_shovel
rabbitmqctl clear_parameter -p <vhost> shovel <shovel_name>
铲子甚至没有出现在 RabbitMQ 管理 UI 的“铲子管理”部分中。
我们可以摆脱卡住的铲子的唯一方法是重新启动 RabbitMQ。
还有其他人有这个问题吗?如果是这样,我们如何在不重启集群的情况下清除铲子?另外,是否可以通过配置防止这种情况发生?
谢谢!
PS:
- RabbitMQ 版本:3.4.4
- 运行一个 2 节点集群(由于在网络分区的情况下我们可能面临的明显问题,很快将使其成为 3 节点集群)。
rabbitmq - 铲子的每条消息 TTL 行为
铲子
- 消费队列中的消息,
- 将每条消息重新发布到目标代理(默认情况下,使用原始交换名称和适用时的 routing_key)。
我找不到任何文档,当涉及铲子时,消息 TTL 的预期行为是什么:
用于计算 TTL 的时间是在源代理还是目标代理收到消息时开始计算的?还是仅对第一次发布有效,即在源代理处?
如果在消息到达目标代理之前过期时间已过,会发生什么情况?
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
谢谢,阿努拉格
kubernetes - Shovel(在 kubernetes 中作为服务运行)无法连接到 kafka(在 kubernetes 中作为服务运行)
问题:
- 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
- 完成上述语句后,容器退出。
环境:
- Kafka 使用 yml 文件部署在 Kubernetes 环境中。
- 尝试使用 yml 文件在 Kubernetes 环境中部署 Shovel。
- Kafka 成功连接到 zookeeper。
在部署 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之间的抓包:
我们能够看到正在交换的数据包。(Internet 协议版本 4,Src:192.168.1.81,Dst:192.168.1.94)
Shovel POD 能够看到来自 kafka POD 的数据包。
Kafka POD 能够将数据包发送到 shovel pod。
任何帮助将不胜感激。
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:
我们有两个无法删除的独占队列,因为它们被锁定了。一旦我们在所有集群节点上禁用铲子插件,这些队列就会消失。一旦我们在一个节点上重新激活插件,就会再次创建队列。
node.js - 我可以从我的 NodeJS 应用程序动态创建 RabbitMQ 铲子吗?
RabbitMQ 铲子插件提供了一个 HTTP API 来创建和配置铲子。假设我为我的 RabbitMQ 服务器实例启用了铲子和铲子管理插件,我可以从我的 NodeJS 应用程序动态创建铲子吗?
我目前使用 amqplib 连接到交易所。https://www.squaremobius.net/amqp.node/channel_api.html
但是我没有看到任何 API 可以动态创建铲子。这是可以实现的还是有任何其他库支持这一点?
rabbitmq - 更新证书后,RabbitMQ Shovel over TLS 错误与 badmatch
我的 RabbitMQ 安装已经使用 TLS 连接的铲子运行了一年多。铲子一直使用自签名证书,直到它们过期。当我重新创建新证书时,即使我将证书、密钥和 CA 证书放在与以前相同的位置,铲子仍然无法工作。我得到的错误是这样的(来自 rabbit@hostname-sasl.log - 长行已用 \ “继续”):
我的 RMQ 状态:
rabbitmq - 铲子插件不将现有消息传输到目标队列
我正在尝试将队列(Q1)中的所有消息复制到另一台机器上运行的另一个队列(Q2)。
我正在使用铲子插件,两个节点都在运行 amqp 091。我已经测试了连接,如果我将目标队列设置为不存在的队列,它确实会在单独的机器上创建一个新队列,所以我知道连接工作。
我希望插件将所有现有消息传输到 Q2,但是它们没有被传输。铲子插件不这样做吗?
rabbitmq - 动态铲子的`delete-after`属性的奇怪行为
作为更大用例的一部分,我正在探索将消息从源移动到临时队列的铲子插件。我正在为每个队列创建动态铲子,以将消息移动到临时队列并使用属性"delete-after": "queue-length"删除动态铲子。我在 RabbitMQ 管理控制台(Admin->Shovel status)中看到动态铲子已成功删除,但源/临时队列的状态正在运行。
但问题是,当新消息进入源队列时,即使源队列没有消费者,它们也会自动移动到临时队列。
笔记:
- 源队列和临时队列都是持久的。
- 消息是持久的(传递模式:2)
- 由于有数百个队列,上述操作是并行执行的。我正在为每个队列创建动态铲子并删除它们。
虽然我使用 DELETE HTTP API 而不是上述方法来删除动态铲子,但它运行良好。我想避免进行额外的 HTTP 调用,因为源队列有数百个。