首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在RabbitMQ中接收消息,并且UI显示空队列

无法在RabbitMQ中接收消息,并且UI显示空队列
EN

Stack Overflow用户
提问于 2021-10-24 17:08:50
回答 1查看 189关注 0票数 0

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

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

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

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

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

请帮帮我!

docker-compose.yml

代码语言:javascript
复制
...

  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

代码语言:javascript
复制
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

代码语言:javascript
复制
#!/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 $@
EN

回答 1

Stack Overflow用户

发布于 2021-10-28 08:32:01

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69699026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档