Rabbitmq 关于实现回调队列功能的建议

Rabbitmq suggestion for implementing call back queue feature

我在 RMQ 中发现了回调队列功能。而且它也很漂亮。整个想法是我创建了一个消息队列 (queue1)、它的回调队列 (queue1_cb) 和它的 dlq(queue1_dlq)。我正在使用 2 个节点实现 HA 功能。

当我部署我的应用程序的 2 个实例时出现问题(我在 Spring boot 中有一个发送方和一个接收方应用程序)。两者都在收听同一个 HA 集群。场景如下。

  1. 发件人向 RMQ 发布消息。
  2. 接收方应用程序使用消息。接收器应用程序必须调用基于套接字 API 的第三方 API 及其异步,因此我无法在同一连接中获得响应。所以我存储 Channel & Message 的对象,我需要确认消息。 (请注意,我正在延迟确认,直到我收到第三方的回复 API。
  3. 当我部署接收器应用程序的 2 个实例时,任何实例都会收到来自第三方的响应 API。并且两者都没有 ChannelMessage 的对象来确认消息并将消息发送到回调队列。

任何人都可以建议我一个优先解决方案吗? 下面是我的代码。

在接收端:

    @Override
public void onMessage(Message arg0, Channel arg1) throws Exception {

    String msg = new String (arg0.getBody());
    AppObject obj = mapper.readValue(msg, AppObject.class);

    Packet packet = new Packet();
    packet.setChannel(arg1);
    packet.setMessage(arg0);
    packet.setAppObject(obj);

    AppParam.objects.put(
    String.valueOf(key , packet);

    //Call third party API

}

确认发送回调消息时:

public boolean pushMessageToCallBack(String key , AppObject packet, Channel channel, Message message){
    RabbitTemplate replyRabbitTemplate =  //Get the RabbitTemplate object. It is handled properly.
    replyRabbitTemplate.convertAndSend(packet);
    channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);

}

每个实例都需要一个不同的回调队列,或者更简单地说,在根本不需要队列的地方使用 Direct Reply-to