Spring AMQP MessageListenerAdapter-如何将响应分为多个消息?

时间:2019-01-15 13:29:48

标签: java spring-integration spring-amqp

是否可以将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<Response>中的每个项目发送多条消息。这可能是OOTB吗?我是否应该编写自定义MessageConverter来支持这一点?

1 个答案:

答案 0 :(得分:1)

否;不支持;一个请求仅返回一个答复。

客户端也很难编写代码-它怎么知道预期会有多少响应? def edit_fee(request, pk): app = settings.CONFIG post = get_object_or_404(SchoolFees, pk=pk) if request.method == 'POST': form = FeesCreationForm(request.POST, instance=post) if form.is_valid(): form.save() messages.add_message(request, messages.WARNING, "Fees record updated successfully") return redirect('bursary:create_fee') else: # bring edit form out form = FeesCreationForm(instance=post) table = FeesTable(SchoolFees.objects.all()) RequestConfig(request, paginate={'per_page': 10}).configure(table) context = {"form": form, "fees": table, 'app': app} return render(request, 'editfee.html', context) 当然不能处理多个响应。

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