我正在从Java Spring Boot应用程序向消费者(即Python应用程序)发送消息。
一切正常,除了我输入命令rabbitmqctl list_queues
时,它显示video_queue 0
表示队列中没有消息。
消费者正在接收消息并正在做一些漫长的过程;因此,如果我连续发送多条消息,则应该有一些等待队列的消息。我说的对吗?
制作人:
@Component
public class VideoProducer {
private Logger logger = LoggerFactory.getLogger(VideoProducer.class);
private final static String BROKER_EXCHANGE_NAME = "video_exchange";
private final static String ROUTING_KEY = "video_routing_key";
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private VideoService videoService;
@Autowired
private Gson gson;
public void produceVideo(VideoDTO video) {
rabbitTemplate.convertAndSend(BROKER_EXCHANGE_NAME, ROUTING_KEY, gson.toJson(video));
}
}
}
消费者
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channelConsumer = connection.channel()
# Video Consumer Settings
channelConsumer.exchange_declare(exchange='video_exchange',
exchange_type='direct')
channelConsumer.queue_declare(queue="video_queue")
channelConsumer.queue_bind(queue="video_queue",
exchange="video_exchange",
routing_key="video_routing_key")
# Consumer Listener
def callback(ch, method, properties, body):
video_dto = eval(json.loads(body))
##Something long process here
print("Done.. ")
channelConsumer.basic_consume(queue='video_queue',
auto_ack=True,
on_message_callback=callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
channelConsumer.start_consuming()
我在哪里可以看到声明的队列中的消息?因为尽管我知道队列中有消息,但是上面的命令却看不到它们。
答案 0 :(得分:1)
您可以使用RMQ管理控制台查看RMQ的消息和其他信息。 使用者可能会消费多个消息并将其放入内部队列。为避免这种情况,请将QOS设置为1,并将ack required设置为true。 有关QOS的更多信息:https://www.rabbitmq.com/consumer-prefetch.html
答案 1 :(得分:0)
您可以从RabbitMQ管理端口访问localhost:15672来检查和管理队列,一旦任何接收者从队列接收到消息,它将自动从队列中删除。因此,如果您想查看您的邮件,最好通过管理门户进行检查,一旦任何接收者收到邮件,这些邮件就会被删除。