【问题标题】:Producer/Consumer Spring sending multiple messages生产者/消费者 Spring 发送多条消息
【发布时间】:2020-11-12 21:15:29
【问题描述】:

我遇到了生产者消费者rabbitmq spring 应用程序的问题。我想从生产者向消费者发送一系列消息,生产者发送它们但是消费者部分没有收到它们。当我尝试只发送一条消息时,它起作用了。代码如下:

生产者方法:

public void produce1(List<Company> companiesList){
        for (Company company:
             companiesList) {
            amqpTemplate.convertAndSend(exchange, routingkey, company);
            System.out.println("Send msg = " + company);
        }
       
    }

消费方式:

 @RabbitListener(queues="${jsa.rabbitmq.queue}", containerFactory="jsaFactory")
    public void recievedMessage(Company company) {
        System.out.println("Recieved Message: " + company);
    }

我想要做的是获取公司列表,并从该列表中每秒向消费者发送一条公司消息。 (所以消息之间的延迟应该是一秒)

【问题讨论】:

    标签: java rabbitmq


    【解决方案1】:

    据此,convertAndSend(Object) 接受任何对象。

    https://docs.spring.io/spring-amqp/docs/latest-ga/api/org/springframework/amqp/core/AmqpTemplate.html

    因此,您发送 1 (Company) 并且您的 recievedMessage(Company) 也需要 1 个 Company 对象,这就是它与 1 一起使用的原因。

    如果你想发送一批(List)的Company,那么根据https://docs.spring.io/spring-amqp/docs/2.2.9.RELEASE/reference/html/#receiving-batch你需要setBatch和setBatchListener(true)等配置来支持批处理(能够一次发送多于1条消息)

    convertAndSend(List xxx) 和 recievedMessage(List

    【讨论】:

    • 我写错了要求,问题是我想从一个数组中发送消息,并且每条消息要在一秒钟内发送,我还会使用批处理吗?
    • 你好@simm 你不会发送数组。你将发送一个 List ,如果你想发送 (>1 Company),这意味着你想一次发送许多公司,那么它是批量是的。如果我的问题不适合您的问题,请通过示例阐明您的问题以及您想要实现的目标
    • 我知道这与最初的问题无关,但我似乎找不到在哪里实施发送公司之间的延迟一秒?有批处理功能吗?--我还编辑了我的问题并在最后一行进行了澄清
    • @Simm 请参阅stackoverflow.com/questions/40634830/… 它可能会对您有所帮助,否则我相信您应该阅读更多文档。我不知道确切的配置。我反对并且您绝望的另一个选择是 sleep import java.util.concurrent.TimeUnit; TimeUnit.SECONDS.sleep(1);如果您花时间阅读文档以查看设置消息延迟的选项,我更喜欢。
    猜你喜欢
    • 2019-05-20
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2017-02-24
    • 2015-04-05
    • 1970-01-01
    相关资源
    最近更新 更多