之前已经利用代码,将一些数据放到了队列里面,现在我们要实现利用代码从队列里面拿出数据。

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函数,也就是主函数里面,因为接受端有一个回调函数,要执行回调函数里面的代码,这样就变为多线程,在主函数里面,就会执行这个回调函数,在测试类里面不会,因为测试类里面执行完主的就结束了,没有时间执行回调函数。

获取完成之后,我们看队列里面的信息


队列里面就没有东西了,因为被消费端消费了。