前面我们都总结了一下通过RabbitListener等注解配置的rabbit的使用,那么如果需要手动进行发送和请求的话,也是可以的
一:创建一个连接工具类,用来创建连接实体
public class RabbitConnetionFactoryUtil {
public static Connection creatConnetion()throws Exception{
//创建连接通道
ConnectionFactory factory =new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setUsername("guest");
factory.setPassword("guest");
factory.setPort(5672);
return factory.newConnection();
}
}
二:我们写一个发送的方法,这里一定记得最后关闭连接
public void send()throws Exception{
//获取到连接以及mq通道
Connection connection = RabbitConnetionFactoryUtil.creatConnetion();
Channel channel = connection.createChannel();
//声明exchange
channel.exchangeDeclare(EXCHANGE_NAME,"topic");
//消息内容
String message ="插入商品,id=100";
//发布消息
channel.basicPublish(EXCHANGE_NAME,"item.insert",null,message.getBytes());
System.out.println(" [x] Sent '"+message +"'");
channel.close();
connection.close();
}
三:我们手动来接收消息
public void rec()throws Exception{
//获得连接和mq通道
Connection connection = RabbitConnetionFactoryUtil.creatConnetion();
Channel channel = connection.createChannel();
//声明通道
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
//绑定exchange
channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,"item.#");//使用item.# 匹配所有的以item开头的
//同一时刻服务器只能发送一条消息给消费者;
channel.basicQos(1);
//声明消费者,直接在下面的监控中做
GetResponse response = channel.basicGet(QUEUE_NAME,false);
if (response ==null) {
System.out.println("该队列暂时没有消息收到");
// No message retrieved.
}else {
AMQP.BasicProperties props = response.getProps();
byte[] body = response.getBody();
String message =new String(body,"UTF-8");
System.out.println("搜索系统 '" + message +"'");
long deliveryTag = response.getEnvelope().getDeliveryTag();
channel.basicAck(deliveryTag,false);// acknowledge receipt of the message
}
}
这样,我们就可以在我们需要获取消息的时候,手动获取消息了。