当前位置: 首页 > 面试题库 >

如何使用Spring Boot通过扇出交换在RabbitMQ上发布消息

郤望
2023-03-14
问题内容

我有下面的代码使用来将消息发布到RabbitMQ队列中fanout exchange。该exchange是越来越创建,但该消息无法被看到RabbitMQ的队列。我也没有看到任何错误。

BasicApplication.java

@SpringBootApplication
public class BasicApplication {

    public static final String QUEUE_NAME_1 = "helloworld.fanout.q1";
    public static final String QUEUE_NAME_2 = "helloworld.fanout.q2";
    public static final String EXCHANGE_NAME = "helloworld.fanout.x";

    //here the message ==> xchange ==> queue1, queue2
    @Bean
    public List<Declarable> fanoutBindings() {
        Queue fanoutQueue1 = new Queue(QUEUE_NAME_1, false);
        Queue fanoutQueue2 = new Queue(QUEUE_NAME_2, false);
        FanoutExchange fanoutExchange = new FanoutExchange(EXCHANGE_NAME);
        return Arrays.asList(
                fanoutQueue1,
                fanoutQueue2,
                fanoutExchange,
                bind(fanoutQueue1).to(fanoutExchange),
                BindingBuilder.bind(fanoutQueue2).to(fanoutExchange));
    }

    public static void main(String[] args) {
        SpringApplication.run(BasicApplication.class, args).close();
    }

}

Producer.java

@Component
public class Producer implements CommandLineRunner {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Override
    public void run(String... args) throws Exception {
        this.rabbitTemplate.convertAndSend(EXCHANGE_NAME, "Hello World !");
    }

}

问题答案:

您使用了错误的convertAndSend方法;该方法的第一个参数是routingKey

使用this.rabbitTemplate.convertAndSend(EXCHANGE_NAME, "", "Hello World !");



 类似资料:
  • 我正在使用RabbitMQ,我对使用扇出交换和类的(或)方法感到困惑。 例如,我有两个持久队列的使用者QUEUE-01和QUEUE-02,它们绑定到持久扇出交换fanout-01。并将1个发布服务器发送到FANOUT-01。我理解当消息使用(或)方法发布时会发生什么,消息将被复制到每个队列并由每个使用者处理。但我不确定如果我将调用方法会发生什么?我会从哪位消费者那里得到回复?有什么特别的行为吗?我

  • 我一直在尝试使用RabbitMQ,但遇到了以下问题(与此非常类似:RabbitMQ中的主题交换与直接交换)。 我需要密集地广播大约800种类型的消息(因此每种消息类型都会有很多消费者),我想知道以下哪种方法更好: > 创建一个直接交换,在该交换中,消息将使用路由密钥(消息类型名称)发送,每个消费者都将通过绑定了相应路由密钥的临时队列连接到该交换。(因为没有像“key1.key2.*”这样复杂的路由

  • 我能够使用Publish/SubscribeRabbitMQ Java教程创建扇出交换,任何连接的使用者都将收到一个消息的副本。我想在连接任何使用者之前创建交换和绑定,而不是动态/编程地声明交换和绑定。我已经通过RabbitMQ管理控制台完成了这一点。然而,由于某种原因,我的消费者以循环方式接收消息,而不是全部接收消息的副本。我错过了什么?下面是一些代码片段: 发布者: 消费者: ...在Rabb

  • 我们有一个队列和交换集群来支持消息。 null 我们每个队列都有一个交换,以便在重试超时期间后将重试的消息发送回特定的队列。 在这个场景中,我们有3个交换(“foo-exchange”、“foo-exchange-dead”、“baz-exchange-retry(每个队列1个fanout exchange)”和3个队列(“baz-queue”、“baz-queue-delay”、“baz-que

  • 问题内容: 我需要一个可以在重新启动的RabbitMQ服务器交换上发现队列的python客户端,然后启动一个客户端以继续使用每个队列中的消息。如何从某些RabbitMQ兼容的python api /库中发现队列? 问题答案: 据我所知,没有任何办法可以做到这一点。这与Python无关,但是因为AMQP没有定义任何队列发现方法。 无论如何,在AMQP中,都是由客户端(消费者)声明队列的:发布者使用路

  • 本文向大家介绍Python如何将消息发布到RabbitMQ,包括了Python如何将消息发布到RabbitMQ的使用技巧和注意事项,需要的朋友参考一下 示例 从导入库开始。 接下来,我们需要打开与RabbitMQ服务器的连接。 之后,我们需要建立一个频道。每个连接可以有多个通道,通常在执行多线程任务时,建议(但不是必需)每个线程一个。 建立频道后,我们就可以开始准备信息了。 现在,我们可以通过简单