Rabbitmq Spring与Rabbit AMQP的集成;客户端发送消息->;服务器接收&;返回返回队列上的消息-->;客户机获取相关消息“;

Rabbitmq Spring与Rabbit AMQP的集成;客户端发送消息->;服务器接收&;返回返回队列上的消息-->;客户机获取相关消息“;,rabbitmq,spring-amqp,Rabbitmq,Spring Amqp,我能够使用Rabbit java API编写java程序,并执行以下操作: 客户机通过具有相关Id的Rabbit MQ交换/队列发送消息(例如UUID-“348a07f5-8342-45ed-b40b-d44bfd9c4dde”) 服务器接收消息 服务器通过具有相同关联Id的Rabbit MQ exchange/队列发送响应消息-“348a07f5-8342-45ed-b40b-d44bfd9c4dde” 客户端仅在与1相同的线程中收到相关消息 下面是使用兔子API的Send.java和Recv

我能够使用Rabbit java API编写java程序,并执行以下操作:

  • 客户机通过具有相关Id的Rabbit MQ交换/队列发送消息(例如UUID-“348a07f5-8342-45ed-b40b-d44bfd9c4dde”)

  • 服务器接收消息

  • 服务器通过具有相同关联Id的Rabbit MQ exchange/队列发送响应消息-“348a07f5-8342-45ed-b40b-d44bfd9c4dde”

  • 客户端仅在与1相同的线程中收到相关消息

  • 下面是使用兔子API的Send.java和Recv.java。我需要帮助将此示例转换为使用Spring AMQP集成,特别是步骤4中的接收部分。我正在寻找类似的接收方法,可以过滤使用相关Id的消息

    Send.java:
    import java.util.UUID;
    导入com.rabbitmq.client.AMQP.BasicProperties;
    导入com.rabbitmq.client.Channel;
    导入com.rabbitmq.client.Connection;
    导入com.rabbitmq.client.ConnectionFactory;
    导入com.rabbitmq.client.QueueingConsumer;
    公共类发送{
    私有最终静态字符串请求\u QUEUE=“REQUEST.QUEUE”;
    私有最终静态字符串响应\u QUEUE=“RESPONSE.QUEUE”;
    公共静态void main(字符串[]argv)引发异常{
    ConnectionFactory工厂=新的ConnectionFactory();
    setHost(“localhost”);
    Connection Connection=factory.newConnection();
    Channel=connection.createChannel();
    channel.queueDeclare(请求队列,false,false,false,null);
    String message=“你好,世界!”;
    字符串cslTransactionId=UUID.randomUUID().toString();
    BasicProperties属性=(新的BasicProperties.Builder())
    .correlationId(cslTransactionId)
    .replyTo(响应队列).build();
    channel.basicPublish(“,请求队列,属性,message.getBytes());
    System.out.println(“客户端发送“+”消息“+””);
    通道响应通道=connection.createChannel();
    queueDeclare(响应队列,false,false,false,null);
    QueueingConsumer=新的QueueingConsumer(通道);
    responseChannel.basicConsume(响应队列,false,消费者);
    字符串correlationId=null;
    while(true){
    QueueingConsumer.Delivery=consumer.nextDelivery();
    String responseMessage=新字符串(delivery.getBody());
    correlationId=delivery.getProperties().getCorrelationId();
    System.out.println(“相关Id:+correlationId”);
    if(correlationId.equals(cslTransactionId)){
    System.out.println(“客户收到“+”响应消息“+””);
    responseChannel.basicAck(delivery.getEnvelope().getDeliveryTag(),true);
    打破
    }
    }
    channel.close();
    connection.close();
    }
    }
    
    Recv.java
    导入com.rabbitmq.client.ConnectionFactory;
    导入com.rabbitmq.client.Connection;
    导入com.rabbitmq.client.Channel;
    导入com.rabbitmq.client.QueueingConsumer;
    导入com.rabbitmq.client.AMQP.BasicProperties;
    公共类Recv{
    私有最终静态字符串请求\u QUEUE=“REQUEST.QUEUE”;
    私有最终静态字符串响应\u QUEUE=“RESPONSE.QUEUE”;
    公共静态void main(字符串[]argv)引发异常{
    ConnectionFactory工厂=新的ConnectionFactory();
    setHost(“localhost”);
    Connection Connection=factory.newConnection();
    Channel=connection.createChannel();
    channel.queueDeclare(请求队列,false,false,false,null);
    System.out.println(“[*]等待消息。要退出,请按CTRL+C”);
    QueueingConsumer=新的QueueingConsumer(通道);
    channel.basicConsume(请求队列,true,消费者);
    字符串correlationId=null;
    while(true){
    QueueingConsumer.Delivery=consumer.nextDelivery();
    字符串消息=新字符串(delivery.getBody());
    correlationId=delivery.getProperties().getCorrelationId();
    System.out.println(“相关Id:+correlationId”);
    System.out.println(“服务器收到“+”消息“+””);
    if(correlationId!=null)
    打破
    }
    字符串responseMsg=“响应消息”;
    通道响应通道=connection.createChannel();
    queueDeclare(响应队列,false,false,false,null);
    BasicProperties属性=(新的BasicProperties.Builder())
    .correlationId(correlationId).build();
    channel.basicPublish(“,RESPONSE_队列,属性,responseMsg.getBytes());
    System.out.println(“服务器已发送”“+responseMsg+””);
    channel.close();
    connection.close();
    }
    }
    
    在运行gary提供的Java配置之后,我尝试将配置移动到XML格式,以便服务器端添加侦听器。以下是XML配置:

    server.xml
    
    
    SpringReceive.java
    import org.springframework.amqp.core.Message;
    导入org.springframework.amqp.core.MessageBuilder;
    导入org.springframework.amqp.rabbit.core.RabbitTemplate;
    导入org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
    导入org.springframework.context.support.ClassPathXmlApplicationContext;
    公开课{
    /**
    *@param args
    */
    公共静态void main(字符串[]args){
    ClassPathXmlApplicationContext上下文=新的ClassPathXmlApplicationContext(“cslclient.xml”);
    SimpleMessageListenerContainer