在RabbitMQ中向主题交换添加“常量”队列

时间:2014-05-21 16:30:59

标签: java rabbitmq message-queue

我最近学习了RabbitMQ,希望在我的工作流程中实现它。 (我将用Java实现它)我刚刚完成了所有的教程,很好奇我将如何实现一个"常量"排队而不是"临时"队列。或者至少允许消费者获得交易所发送的消息。例如,如果我发送" kern.overflow"但只要消费者上网,只要正在倾听与凯恩相关的事情,消费者就会离线。#"或"#。溢出"我希望它能收到未收到的消息。

1 个答案:

答案 0 :(得分:0)

以下是代码:

  1. 创建持久队列
  2. 将队列绑定到主题"kern.#"作为路由键:
  3. 代码:

                String myPersistentQueue = "myPersistentQueue";
                boolean isDurable = true;
                boolean isExclusive = false;
                boolean isAutoDelete = false;
                channel.queueDeclare(myPersistentQueue, isDurable, isExclusive, isAutoDelete, null);
                channel.queueBind(myPersistentQueue, "myTopic", "kern.#");
                final QueueingConsumer consumer = new QueueingConsumer(channel);
                boolean autoAck = true;
                String tag1 = channel.basicConsume(myPersistentQueue, autoAck, consumer);
                executorService.execute(new Runnable() {
                    @Override
                    public void run() {
                        while (true) {
                            Delivery delivery;
                            try {
                                delivery = consumer.nextDelivery();
                                String message = new String(delivery.getBody());
                                System.out.println("Received: " + message);
                            } catch (Exception ex) {
                                Logger.getLogger(TestMng.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    }
                });
                System.out.println("Consumers Ready");
    

    使用myTopic作为路由密钥将消息发布到kern.overflow时,消息将存储到myPersistentQueue队列。客户端可以脱机,当客户端在线时可以获取消息。