Rabbitmq Spring与Rabbit AMQP的集成;客户端发送消息->;服务器接收&;返回返回队列上的消息-->;客户机获取相关消息“;
我能够使用Rabbit java API编写java程序,并执行以下操作: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
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