【问题标题】:Unable to receive messages in RabbitMQ and UI shows empty queue无法在 RabbitMQ 中接收消息并且 UI 显示空队列
【发布时间】:2021-10-24 17:08:49
【问题描述】:

我正在关注https://www.rabbitmq.com/tutorials/tutorial-one-python.html上的教程

我已经使用 docker 设置了 RabbitMQ。在那里定义了交换等。

管理 UI 显示已创建的交易所。当第一次执行发送者脚本时,队列也会显示在 UI 中。

我首先运行消费者,然后运行发布者。但是当消息被发布时(假设它是,因为发送脚本没有抛出任何错误),消费者没有收到任何消息。我可以看到 AMQP 连接正确建立和关闭(在发布者的情况下)。但是队列是空的。

管理 UI 还显示一个空队列。我尝试使用 UI 本身发布持久性和非持久性消息,但即使在那里,当消息发布时,我在执行 Get Messages 时收到“队列为空”。

请帮帮我!

docker-compose.yml:

...

  my_rabbit:
    hostname: my_rabbit # persistence
    build:
      context: .
      dockerfile: Dockerfile_rabbit
    restart: unless-stopped
    container_name: my_rabbit
    volumes:
      - "./rabbitmq:/var/lib/rabbitmq"
      - "./rabbitmq_logs:/var/log/rabbitmq"
    command: ["./rabbit_init.sh"]
    ports:
      - 5670:5672
      - 20888:15672 # rabbitmq management plugin
    logging:
      driver: "json-file"
      options:
        max-size: "100M"
        max-file: "10"
...

Dockerfile:

FROM rabbitmq

RUN apt-get update && apt-get install -y wget python3
# Define environment variables.
ENV RABBITMQ_USER user
ENV RABBITMQ_PASSWORD password
ENV RABBITMQ_VHOST myvhost
ENV RABBITMQ_PID_FILE /var/lib/rabbitmq/mnesia/rabbitmq

ADD rabbit_init.sh /rabbit_init.sh
EXPOSE 15672
# Define default command
RUN chmod +x /rabbit_init.sh

CMD ["/rabbit_init.sh"]

rabbit_init.sh:

#!/bin/sh

# Create Rabbitmq user
( sleep 10 ; \
    rabbitmqctl wait --timeout 60 $RABBITMQ_PID_FILE ; \
    rabbitmqctl add_user $RABBITMQ_USER $RABBITMQ_PASSWORD 2>/dev/null ; \
    rabbitmqctl set_user_tags $RABBITMQ_USER administrator ; \
    rabbitmqctl add_vhost $RABBITMQ_VHOST ; \
    rabbitmqctl set_permissions -p  $RABBITMQ_VHOST $RABBITMQ_USER  ".*" ".*" ".*" ; \
    rabbitmq-plugins enable rabbitmq_management ; \
    wget 'https://raw.githubusercontent.com/rabbitmq/rabbitmq-management/v3.7.15/bin/rabbitmqadmin' ; \
    chmod +x rabbitmqadmin ; \
    sed -i 's|#!/usr/bin/env python|#!/usr/bin/env python3|' rabbitmqadmin ; \
    mv rabbitmqadmin /bin/ ; \
    sleep 2; \
    rabbitmqadmin declare queue --username=$RABBITMQ_USER --password=$RABBITMQ_PASSWORD --vhost=$RABBITMQ_VHOST name=xxx durable=true arguments='{"x-overflow":"reject-publish", "x-max-length-bytes":5000000000}' ; \
    rabbitmqadmin declare exchange --username=$RABBITMQ_USER --password=$RABBITMQ_PASSWORD --vhost=$RABBITMQ_VHOST name=xxx type=direct durable=true ; \
    rabbitmqadmin declare binding --username=$RABBITMQ_USER --password=$RABBITMQ_PASSWORD --vhost=$RABBITMQ_VHOST source=xxx destination=xxx routing_key=xxx; \
    ) &

rabbitmq-server $@

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

    您是否尝试过在未启用消费者的情况下发布消息?然后消息将仅存储在队列中,您可以查看它。如果消费者在,它将立即使用该消息。如果您正在发布并且没有收到任何错误,则很可能是消费者出了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多