之前已经利用代码,将一些数据放到了队列里面,现在我们要实现利用代码从队列里面拿出数据。
public class Customer {
public static void main(String[] args) throws IOException, TimeoutException {
// 创建连接mq的连接工厂对象,这个是依赖里面的类,我们只需要拿过来创建对象就可以了
ConnectionFactory connectionFactory = new ConnectionFactory();
// 设置连接rabbitmq的ip
connectionFactory.setHost("192.168.40.145");
// 设置端口号
connectionFactory.setPort(5672);
// 设置连接的虚拟的主机
connectionFactory.setVirtualHost("/ems");
// 设置访问虚拟主机的用户名和密码
connectionFactory.setUsername("ems");
connectionFactory.setPassword("123");
// 获取连接对象
Connection connection = connectionFactory.newConnection();
// 创建通道
Channel channel = connection.createChannel();
// 让通道和消息队列进行绑定
channel.queueDeclare("hello",false,false,false,null);
channel.basicConsume("hello",true,new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("new String(body)"+new String(body));
}
});
}
}
记住,发送者是在测试类里面可以发送,但是接受者必须在main函数,也就是主函数里面,因为接受端有一个回调函数,要执行回调函数里面的代码,这样就变为多线程,在主函数里面,就会执行这个回调函数,在测试类里面不会,因为测试类里面执行完主的就结束了,没有时间执行回调函数。
获取完成之后,我们看队列里面的信息
队列里面就没有东西了,因为被消费端消费了。