【问题标题】:Spring AMQP MessageListenerAdapter - How to split response into multiple messages?Spring AMQP MessageListenerAdapter - 如何将响应拆分为多条消息?
【发布时间】:2019-01-15 13:29:47
【问题描述】:

是否可以将delegate 的响应从MessageListenerAdapter 拆分为单独的消息?

public class MyBean {    
  public List<Response> handleMessage(final MyPayload payload) {
    return ...
  }
}

...

@Bean
public MessageListenerContainer container() {
    final SimpleMessageListenerContainer container = containerFactory.createListenerContainer();
    container.setListenerId("myListener");
    container.setQueueNames("myQueue");

    final MessageListenerAdapter listenerAdapter = new MessageListenerAdapter(new MyBean(), new Jackson2JsonMessageConverter());
    listenerAdapter.setResponseExchange("");
    listenerAdapter.setResponseRoutingKey("other");
    container.setMessageListener(listenerAdapter);
    return container;
}

适配器按预期将一条消息放入“其他”队列,但我想拆分响应并为生成的List&lt;Response&gt; 中的每个项目发送多条消息。这可能是OOTB吗?我应该写一个自定义的MessageConverter 来支持这个吗?

【问题讨论】:

  • 是的,为什么不在您的适配器下游添加splitter?那是你要找的吗?我的意思是这是最自然的方式。

标签: java spring-integration spring-amqp


【解决方案1】:

没有;不支持;一个请求只返回一个回复。

客户端的代码也很棘手 - 它如何知道预期有多少响应? RabbitTemplate 当然不能处理多重响应。

如果您确实想发送多个响应,请使用RabbitTemplate 在服务器端发送回复,不要使用请求/回复消息传递。

【讨论】:

  • 我正在尝试将响应发送到静态队列,我对请求/回复机制不感兴趣,所以我的方法可能是错误的。当我使用来自 RabbitMQ 的消息时,我需要在我的系统上搜索一些文件并为每个文件发送一条新消息。 MessageListenerAdapter 是不是这个错误的类?
  • 这是使用解码后的有效负载调用 POJO 方法的正确方法,但如果您想用多条消息“回复”,您应该返回 void 并使用 @987654325 发送“回复” @ 而不是使用内置机制在消息中发送方法返回值(它只是在内部使用 RabbitTemplate 来发送该回复)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多