RabbitTemplate 未配置为 MessageListener
RabbitTemplate is not configured as MessageListener
我需要同步发送和接收确认,为此我正在使用 RabbitTemplate。
RabbitTemplate 有 queue 和 replyAddress 属性,但在尝试向我发送时出现此错误:
java.lang.IllegalStateException: RabbitTemplate is not configured as
MessageListener - can not use a 'replyAddress':
amq.gen-t1ESvGc4I8EfGJCjWjBxKw
如果我使用 Send 方法而不是 SendAndReceive,那么过程是正确的,但响应会异步到达我(我有一个 MessageListener),但这不是我所需要的。
是否有可能我不能对 RabbitTemplate 使用与 MessageListener 相同的响应队列?
再次感谢Gary,很抱歉,因为问题真的不清楚。
当我发送消息时,我的 MessageListener 工作正常,但对于某些消息,我需要同步回复。当我使用 sendAndReceive 方法时,出现异常:
java.lang.IllegalStateException:RabbitTemplate 未配置为 MessageListener - 无法使用 'replyAddress':amq.gen-t1ESvGc4I8EfGJCjWjBxKw
并且 RabbitTemplate 具有 属性 回复地址:amq.gen-t1ESvGc4I8EfGJCjWjBxKw
如果我使用发送方法,则响应异步到达 MessageListener。但是我需要对某些消息进行同步响应。
你的问题不清楚;如果您想要同步回复,请使用 sendAndReceive;调用线程将阻塞,直到收到回复。
不,您不能使用与侦听器相同的队列 - 它们会竞争消息。
如果要异步发送和接收,replyToAddress
只能与 sendAndReceive
操作一起使用。
如果你想做异步发送和接收,你必须在消息属性中设置replyTo
属性(队列名称或exchange/routingKey
) - 在调用[=14之前=] 或在 MessagePostProcessor
中使用 sendAndReceive
.
您需要配置一个侦听器容器来接收回复(您说您有)。
即将推出的 1.6 release 有一个 AsyncRabbitTemplate
有 sendAndReceive
个方法 return 一个 ListenableFuture
;包裹 RabbitTemplate
和 SimpleMessageListenerContainer
以方便回复。
编辑
您不能对同步和异步回复使用相同的回复队列。
使用固定回复队列时,需要configure a reply listener container as described in the documentation。
但是,您实际上并不需要指定回复队列;如果代理支持,模板将使用 Direct ReplyTo(否则使用临时队列)。
如果您必须使用命名的回复队列(例如,您需要 HA 或响应系统不使用 replyTo 属性),那么您必须配置一个回复侦听器(以模板作为侦听器) .
我需要同步发送和接收确认,为此我正在使用 RabbitTemplate。
RabbitTemplate 有 queue 和 replyAddress 属性,但在尝试向我发送时出现此错误:
java.lang.IllegalStateException: RabbitTemplate is not configured as MessageListener - can not use a 'replyAddress': amq.gen-t1ESvGc4I8EfGJCjWjBxKw
如果我使用 Send 方法而不是 SendAndReceive,那么过程是正确的,但响应会异步到达我(我有一个 MessageListener),但这不是我所需要的。
是否有可能我不能对 RabbitTemplate 使用与 MessageListener 相同的响应队列?
再次感谢Gary,很抱歉,因为问题真的不清楚。
当我发送消息时,我的 MessageListener 工作正常,但对于某些消息,我需要同步回复。当我使用 sendAndReceive 方法时,出现异常:
java.lang.IllegalStateException:RabbitTemplate 未配置为 MessageListener - 无法使用 'replyAddress':amq.gen-t1ESvGc4I8EfGJCjWjBxKw
并且 RabbitTemplate 具有 属性 回复地址:amq.gen-t1ESvGc4I8EfGJCjWjBxKw
如果我使用发送方法,则响应异步到达 MessageListener。但是我需要对某些消息进行同步响应。
你的问题不清楚;如果您想要同步回复,请使用 sendAndReceive;调用线程将阻塞,直到收到回复。
不,您不能使用与侦听器相同的队列 - 它们会竞争消息。
如果要异步发送和接收,replyToAddress
只能与 sendAndReceive
操作一起使用。
如果你想做异步发送和接收,你必须在消息属性中设置replyTo
属性(队列名称或exchange/routingKey
) - 在调用[=14之前=] 或在 MessagePostProcessor
中使用 sendAndReceive
.
您需要配置一个侦听器容器来接收回复(您说您有)。
即将推出的 1.6 release 有一个 AsyncRabbitTemplate
有 sendAndReceive
个方法 return 一个 ListenableFuture
;包裹 RabbitTemplate
和 SimpleMessageListenerContainer
以方便回复。
编辑
您不能对同步和异步回复使用相同的回复队列。
使用固定回复队列时,需要configure a reply listener container as described in the documentation。
但是,您实际上并不需要指定回复队列;如果代理支持,模板将使用 Direct ReplyTo(否则使用临时队列)。
如果您必须使用命名的回复队列(例如,您需要 HA 或响应系统不使用 replyTo 属性),那么您必须配置一个回复侦听器(以模板作为侦听器) .