rabbitmq:路由密钥+队列+延迟

r8uurelv  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(288)

我的制作人如下:

public class MyProducer {

private static final String EXCHANGE_NAME = "messages";

public static void main(String[] argv)
              throws java.io.IOException {

    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.exchangeDeclare(EXCHANGE_NAME, "direct");

    String color1 = "red"
    String message1 = "message1"

    String color2 = "blue"
    String message2 = "message2"

    channel.basicPublish(EXCHANGE_NAME, color1, null, message1);
    channel.basicPublish(EXCHANGE_NAME, color2, null, message2);

    channel.close();
    connection.close();
}
}

同时也是消费者:

public class MyConsumer {

private static final String EXCHANGE_NAME = "messages";

public static void main(String[] argv)
              throws java.io.IOException,
              java.lang.InterruptedException {

    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.exchangeDeclare(EXCHANGE_NAME, "direct");
    String queueName = channel.queueDeclare().getQueue();

    channel.queueBind(queueName, EXCHANGE_NAME, "color1");
    channel.queueBind(queueName, EXCHANGE_NAME, "color2");

    QueueingConsumer consumer = new QueueingConsumer(channel);
    channel.basicConsume(queueName, true, consumer);

}

}
我现在的问题是:
我现在是只有一个名为“queuname”的队列,还是有两个名为“color1”和“color2”的队列?
我不想立即消耗这些信息。所以我想为每个队列“color1”和“color2”设置一个延迟。我怎样才能做到这一点?

bfhwhh0e

bfhwhh0e1#

问题1)我现在只有一个名为“queuname”的队列,还是有两个名为“color1”和“color2”的队列?
答:你必须通过辅导
https://www.rabbitmq.com/getstarted.html
在此基础上,您可以决定如何创建队列,以及哪些交换类型[直接、主题、头和扇形输出]符合您的要求,或者有时不需要交换。因此,请先参阅教程,然后根据您的要求决定。
问题2)我不想立即使用这些消息。所以我想为每个队列“color1”和“color2”设置一个延迟。我怎样才能做到这一点?
答:因为你要写你自己的逻辑延迟消费者从兔子那里找到信息,你也可以通过线程。
享受兔子编程:)

cyej8jka

cyej8jka2#

对于您的第一个问题,答案是“两者都不是”。您的代码显示您声明了一个随机命名的队列,并将服务器为其命名的任何内容分配给变量 queueName :
string queuename=channel.queuedeclare().getqueue();
你对 "color1" 以及 "color2" 作为您创建的随机队列上的绑定键(请参阅本页)。如果目的是声明一个具有特定名称的队列,我认为需要将其作为参数传递给 queueDeclare 函数(尽管我不熟悉这个库)。
对于第二个问题,如果您不想立即使用消息,那么您不必这样做。相反,在需要时启动消费者。没有人强迫你把它直接放在你的程序下面 queueDeclare 方法。我不能列出具体的方法来实现这一点,因为可能有很多你能想到的。

相关问题