RabbitMQ从入门到精通(简单队列)

1、学习五种队列

在这里插入图片描述

2、简单队列

P:消息的生产者
C:消息的消费者
红色:队列

生产者将消息发送到队列,消费者从队列中获取消息。
在这里插入图片描述

3、导入RabbitMQ的客户端依赖

        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.3.0</version>
        </dependency>

4、编写连接工具

public class ConnectionUtil {

    public static Connection getConnection() throws Exception {
        //定义连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置服务地址
        factory.setHost("192.168.225.139");
        //端口
        factory.setPort(5672);
        //设置账号信息,用户名、密码、vhost
        factory.setVirtualHost("virtual_test");
        factory.setUsername("admin");
        factory.setPassword("123456");
        // 通过工程获取连接
        Connection connection = factory.newConnection();
        return connection;
    }
}

5、生产者

public class Send {
    private final static String QUEUE_NAME = "q_test_01";
    public static void main(String[] argv) throws Exception {
        // 获取到连接以及mq通道
        Connection connection = ConnectionUtil.getConnection();
        // 从连接中创建通道
        Channel channel = connection.createChannel();
        //第一个参数表示队列名称、第二个参数为是否持久化、
        // 第三个参数为是否是独占队列、第四个参数为当所有消费者客户端连接断开时是否自动删除队列、第五个参数为队列的其他参数
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // 消息内容
        String message = "Hello World!";
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println(" [x] Sent '" + message + "'");
        //关闭通道和连接
        channel.close();
        connection.close();
    }
}

运行生产者代码之后,我们在界面上可以看到 q_test_01 队列中多了一条消息。点击队列名,然后点击get message 可以查看当前在队列中的消息,其中Messages 可以设置查看的条数。
在这里插入图片描述
在这里插入图片描述

6、消费者

public class Recv {

    private final static String QUEUE_NAME = "q_test_01";

    public static void main(String[] argv) throws Exception {
        // 获取到连接以及mq通道
        Connection connection = ConnectionUtil.getConnection();
        // 从连接中创建通道
        Channel channel = connection.createChannel();
        // 声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // DefaultConsumer类实现了Consumer接口,通过传入一个频道,
        // 告诉服务器我们需要那个频道的消息,如果频道中有消息,就会执行回调函数handleDelivery
        // 消费一个消息
        Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                String message = new String(body, "UTF-8");
                System.out.println("我是消费者一,我消费了:" + message);
                try {
                    Thread thread = Thread.currentThread();
                    thread.sleep(5000);//暂停1.5秒后程序继续执行
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        // 自动应答回复队列(RabbitMQ中的消息确认机制)
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
}

运行消费者代码之后,我们可以消费该消息队列中的消息。
在这里插入图片描述
再次查看该队列,可以看到该队列中的消息已经被消费了。
在这里插入图片描述
程序不关闭,点击队列名称,可以看到该队列下面多了一个消费者。
在这里插入图片描述

发布了136 篇原创文章 · 获赞 30 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_33029793/article/details/102800389