Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring amqp是否将不同的json消息类型转换为1个队列中的Java对象?_Java_Spring Boot_Amqp - Fatal编程技术网

Spring amqp是否将不同的json消息类型转换为1个队列中的Java对象?

Spring amqp是否将不同的json消息类型转换为1个队列中的Java对象?,java,spring-boot,amqp,Java,Spring Boot,Amqp,通常我会看到一些示例,其中特定的消息被放在一个队列中并转换为Java对象。目前,我希望有一个事件队列,它可以包含多种类型的事件,并具有特定类型事件的侦听器。有没有办法在一个队列中有多个事件类型,并在同一队列中有单独的消息侦听器 简而言之,是的,你可以 可以为一个队列创建多个侦听器。在每个侦听器中,您将尝试从消息中解析特定类型的JSON事件。若解析器无法解析此消息,则意味着需要将此消息发送给其他侦听器。在这种情况下,解析器将抛出异常,您应该拒绝将此消息返回到队列(通过抛出任何异常,并且如果defa

通常我会看到一些示例,其中特定的消息被放在一个队列中并转换为Java对象。目前,我希望有一个事件队列,它可以包含多种类型的事件,并具有特定类型事件的侦听器。有没有办法在一个队列中有多个事件类型,并在同一队列中有单独的消息侦听器

简而言之,是的,你可以

可以为一个队列创建多个侦听器。在每个侦听器中,您将尝试从消息中解析特定类型的JSON事件。若解析器无法解析此消息,则意味着需要将此消息发送给其他侦听器。在这种情况下,解析器将抛出异常,您应该拒绝将此消息返回到队列(通过抛出任何异常,并且如果
defaultRequeuRejected
未更改且默认为true,则)。每个事件类型的其他侦听器采用相同的方法。
但这太过分了。因为当您拒绝消息返回队列时,它会随机转到其他空闲侦听器。这意味着,该消息可以再次返回到同一个侦听器

在这种情况下,正确的方法是使用一个侦听器,并尝试分析不同类型的消息。如果解析器无法解析此类型,请捕获异常并尝试其他。这种方法将减少冗余消息丢弃


但对我来说,最好的方法是对每种类型使用不同的队列,使用不同的侦听器。为方便起见,您可以按一个主题对它们进行分组。RabbitMQ的此id是设计的。

为什么不能对每种类型使用具有单独侦听器的单独队列?更方便,更适合RabbitMQ。谢谢您的回复!我的用例是,我的应用程序有1个事件队列,其中包含不同类型的消息。例如AccountCreatedEvent、AccountDeletedEvent、RedrawMoneyEvent等。。我希望将不同的应用程序连接到事件队列,以便这些应用程序可以在事件触发时得到通知,并且每个应用程序可以在需要时处理这些事件。因此,它或多或少是一个跨不同应用程序的事件总线。