在RabbitMQ中为生产者函数返回的列表中的每个元素发布单独的消息

gajydyqb  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(168)

我尝试了spring-cloud函数,并与RabbitMQ集成。因此,我的生产者通过IO操作获取元素列表(比方说一个数据库调用)。列表不是作为一个消息发布的,我试图使它张贴一堆单独的消息到我的交换。这样我的下一个处理器(它从列表中消费)可以拾取元素并单独处理它们。我的发布者看起来像这样:

@Bean
    Supplier<List<Foo>> publisher() {
        return str -> fooDAO.findAll();
    }

我希望我的队列像这样:

@Bean
    Consumer<Foo> consumer() {
        return foo -> barDAO.save(foo.getBar());
    }
ccgok5k5

ccgok5k51#

使用StreamBridge发送每条消息。

streamBridge.send("toStream-out-0", someData);

请访问https://docs.spring.io/spring-cloud-stream/docs/current/reference/html/spring-cloud-stream.html#_sending_arbitrary_data_to_an_output_e_g_foreign_event_driven_sources

k2arahey

k2arahey2#

上面Gary提供的答案很好用。再增加一种方法来实现这个目的...也就是说,通过返回一个消息集合。

Collection<Message<Foo>
    @Bean
    Supplier<Collection<Message<Foo>>> publisher() {
        return str -> fooDAO.findAll()
                             .stream()
                             .map(e -> MessageBuilder.withPayload(e).build())
                             .collect(Collectors.toList());
    }

批处理生成器
Spring Cloud Stream -超越基础:批量发布

相关问题