Java 通过RabbitMQ传递重对象

Java 通过RabbitMQ传递重对象,java,rabbitmq,spring-rabbit,Java,Rabbitmq,Spring Rabbit,我想知道是否有一种好方法可以通过Rabbit队列有效地传输重对象(例如>1mln字符串的数组) 我尝试将数组分为1000、10000和100000块。我最快的速度是21秒,有10000块大小 我提出的解决方案类似于流媒体。有两个服务,一个向另一个发送一个包含临时队列名称的请求对象(该名称是在发送请求之前创建的)。后者获取请求并开始按块发送数组,当请求结束时,它发送一种流结束符号 也许有一些优雅的解决方案,比如一些功能或库或其他什么。唯一的条件是应该使用消息队列传递重对象 有人遇到过这样的任务吗?

我想知道是否有一种好方法可以通过Rabbit队列有效地传输重对象(例如>1mln字符串的数组)

我尝试将数组分为1000、10000和100000块。我最快的速度是21秒,有10000块大小

我提出的解决方案类似于流媒体。有两个服务,一个向另一个发送一个包含临时队列名称的请求对象(该名称是在发送请求之前创建的)。后者获取请求并开始按块发送数组,当请求结束时,它发送一种流结束符号

也许有一些优雅的解决方案,比如一些功能或库或其他什么。唯一的条件是应该使用消息队列传递重对象


有人遇到过这样的任务吗?

好的,我在这里没有得到任何回应,所以请告诉您更多关于我的解决方案的信息。 我所做的是,我只是在第一个服务中创建并声明一个临时队列,第二个服务已经有了侦听请求的队列。因此,服务#1向队列发送请求,请求DTO包含临时队列名称

发送后,服务#1开始侦听临时队列,如下所示:

while (condition) {
    Object obj = amqpTemplate.receiveAndConvert(queueToListen, DEFAULT_TIMEOUT);
}
默认的#超时是服务#1侦听临时队列的时间。例如,循环断路器可以作为一个特殊对象从服务#2发送,通知这是流的结束

为了获得更高的性能,还可以简化通过临时队列传递的DTO。也就是说,如果它们都有一些公共字段,那么它们可以发送一次(在流头中或其他任何地方),并排除块DTO。此外,JSON属性名也可以缩短(例如value=>v),因为本质上我们仍然传递字节信息,并且对象是序列化的