Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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
Java spring rabbitmq和UI层或托管bean_Java_Spring_Rabbitmq - Fatal编程技术网

Java spring rabbitmq和UI层或托管bean

Java spring rabbitmq和UI层或托管bean,java,spring,rabbitmq,Java,Spring,Rabbitmq,我有一个rabbitmq监听器作为单独的类和jsf2托管bean 在我的bean中,我发送了一条消息,需要等待结果。我不能使用sendAndReceive。。。因为我将消息发送到一个队列,但从另一个队列接收,所以在发送之前分配correlationId 所以我需要异步等待,我需要等待,直到正确的消息到达侦听器。如何在rmq中实现这一点?查看RabbitTemplate,他似乎在应答队列中等待响应。您是否在邮件中设置了“回复”属性?如果是,则RabbitTemplateSendReceive方法应

我有一个rabbitmq监听器作为单独的类和jsf2托管bean

在我的bean中,我发送了一条消息,需要等待结果。我不能使用sendAndReceive。。。因为我将消息发送到一个队列,但从另一个队列接收,所以在发送之前分配correlationId

所以我需要异步等待,我需要等待,直到正确的消息到达侦听器。如何在rmq中实现这一点?

查看RabbitTemplate,他似乎在应答队列中等待响应。您是否在邮件中设置了“回复”属性?如果是,则RabbitTemplateSendReceive方法应在“回复”队列中等待响应。确保正确填充并测试它

旁注: 在RabbitMQ中,您不向队列发送消息。 你向交易所发送信息。Exchange使用绑定将消息路由到队列。对于默认或直接交换类型,它看起来像是直接发送到队列,但这过于简化了

有关详细信息,请参阅

编辑: 似乎在AMQP1.4.5.0版本中有一些修正

用于回复的可配置交换/路由密钥

以前,在将请求/回复消息与 RabbitTemplate,答复被路由到默认exchange并被路由 使用队列名称。现在可以提供一个带有 表单交换/路由键,用于使用特定交换和 路由密钥


非常感谢。但问题是,我不能使用回复队列,因为我将通过一个exchange向两个或多个队列发送消息,而从另一个“回复”队列,我需要将结果显示给客户。所以我将不得不倾听我的“回复”队列,并在它到来时从那里获取结果。我只是想知道有没有一种方法可以通过correlationID直接获取消息,比如rabbitTemplate.getByCorrId(字符串corrId)。现在我使用同步映射并将corrIds放在那个里,当消息到达“回复”队列时,我检查它并从映射中删除。可以吗?你怎么看?如果我为消息指定reply=to属性,它会给我错误信息,比如“你不能将send和receive与reply-to属性一起使用”,所以我想我只能为侦听器/适配器设置它,但它对我不适用。非常感谢。