03-RabbitMQ-Hello world

Posted 快乐的小码农2号选手

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03-RabbitMQ-Hello world相关的知识,希望对你有一定的参考价值。

我们简单的入门一下我们的Rabbit,使用java完成一个生产者,一个消费者,完成先关的操作。

1、工作原理图

2、创建一个Maven项目,导入对应的依赖

<dependencies>
        <!--rabbitmq 依赖客户端-->
        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.8.0</version>
        </dependency>
        <!--操作文件流的一个依赖-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>

3、大概流程示意

4、生产者代码

public class Producer {
    // 队列的名字
    public static final String QUEUE_NAME = "hello";

    public static void main(String[] args) throws Exception {
        // 1、创建一个连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 2、设置连接的主机信息 主机ip,用户名,密码
        connectionFactory.setHost("192.168.115.128");
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("123");
        // 3、获取一个连接
        Connection connection = connectionFactory.newConnection();
        // 4、获取一个信道
        Channel channel = connection.createChannel();
        // 5、声明一个队列
        /**
         * 生成一个队列,queueDeclare参数解释
         * 1.队列名称
         * 2.队列里面的消息是否持久化 默认消息存储在内存中
         * 3.该队列是否只供一个消费者进行消费 是否进行共享 false 可以多个消费者消费
         * 4.是否自动删除 最后一个消费者端开连接以后 该队列是否自动删除 true 自动删除
         * 5.其他参数
         */
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // 6、声明发送的信息
        String message = "hello,world";
        // 7、发送消息
        /**
         * 发送一个消息 basicPublish 参数解释
         * 1.发送到那个交换机
         * 2.路由的 key 是哪个
         * 3.其他的参数信息
         * 4.发送消息的消息体
         */
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println("message 发送结束");
    }
}

5、生产者中代码调用方法解释

5.1、声明队列方法queueDeclare()

该方法是生产者用来声明一个队列,如果该队列不存在就创建一个对列,存在的话就直接使用
方法参数解释:
1、队列的名字
2、队列里面的消息是否支持持计化
3、设置该队列,是否可以供对个消费者消费
4、是否自动删除消息
5、其他参数

   // 5、声明一个队列
        /**
         * 生成一个队列,queueDeclare参数解释
         * 1.队列名称
         * 2.队列里面的消息是否持久化 默认消息存储在内存中
         * 3.该队列是否只供一个消费者进行消费 是否进行共享 false 可以多个消费者消费
         * 4.是否自动删除 最后一个消费者端开连接以后 该队列是否自动删除 true 自动删除
         * 5.其他参数
         */
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

5.2、执行发送消息的方法basicPublish()

basicPublish()方法是生产者,用来推送消息的使用的
参数解释:
1、使用那个交换机
2、推送到那个队列的l路由key
3、其他参数的信息
4、发送消息的消息体

  // 7、发送消息
        /**
         * 发送一个消息 basicPublish 参数解释
         * 1.发送到那个交换机
         * 2.路由的 key 是哪个
         * 3.其他的参数信息
         * 4.发送消息的消息体
         */
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println("message 发送结束");

6、消费者代码

public class Consumer {
    // 队列的名字
    public static final String QUEUE_NAME = "hello";

    //  接受消息
    public static void main(String[] args) throws Exception {
        // 1、创建一个连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 2、设置连接的主机信息 主机ip,用户名,密码
        connectionFactory.setHost("192.168.115.128");
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("123");
        // 3、获取一个连接
        Connection connection = connectionFactory.newConnection();
        // 4、获取一个信道
        Channel channel = connection.createChannel();
        // 5、消费者消费信道
        //声明 接受消息的回调函数时接口对象
        DeliverCallback deliverCallback = (consumerTag, message) -> {
            System.out.println(message.getBody());
        };
        // 取消消息时的回调函数时接口对象
        CancelCallback cancelCallback = (consumerTag) -> {
            System.out.println("消息消费被中断");
        };

        /**
         * 参数解释
         * 1、消费那个队列
         * 2、消费成功之后是否要自动应答, true 代表是,
         * 3、消费者没有成功消费的回调
         * 4、消费者取录消息的回调
         */
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);
    }

6.1、回调函数DeliverCallback

我们消费消息时,我们需要从消息队列中取到对应的消息,但是存在如何消费消息的问题,这个回调函数就是用来完成对消息的如何消费的。

 //声明 接受消息的回调函数时接口对象
        DeliverCallback deliverCallback = (consumerTag, message) -> {
            System.out.println(new String(message.getBody()));
        };

6.2、回调函数CancelCallback

消息消费取消时的回调函数

 // 取消消费消息时的回调函数时接口对象
        CancelCallback cancelCallback = (consumerTag) -> {
            System.out.println("消息消费被中断");
        };

6.3、basicConsume()参数解释

  /**
         * 参数解释
         * 1、消费那个队列
         * 2、消费成功之后是否要自动应答, true 代表是,
         * 3、消费者没有成功消费的回调
         * 4、消费者取录消息的回调
         */
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);

7、演示

启动我们的生产者代码,启动我们的消费者代码
查看消息发送与消息的消费。

以上是关于03-RabbitMQ-Hello world的主要内容,如果未能解决你的问题,请参考以下文章

Hello World代码

第一行代码Hello,World!

golang 过去代码的hellow world。

Hello,World!

Hello world代码解释

iOS 11开发教程编写第一个iOS11代码Hello,World