zoukankan      html  css  js  c++  java
  • RabbitMQ入门之HelloWorld

    • 发送单个消息的生产者和接收消息并打印出来的消费者。

    • 在下图中,“ P”是生产者,“ C”是消费者。中间的框是一个队列-RabbitMQ 代表使用者保留的消息缓冲区
      在这里插入图片描述
      在这里插入图片描述

    • 创建 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>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.30</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
    
    • 生产者负责发消息给队列

    Producer

    package com.xdr630;
    
    import com.rabbitmq.client.Channel;
    import com.rabbitmq.client.Connection;
    import com.rabbitmq.client.ConnectionFactory;
    
    import java.io.IOException;
    import java.util.concurrent.TimeoutException;
    
    
    public class Producer {
        //队列名称
        public static final String Queue_NAME = "hello";
    
    
        //发消息
        public static void main(String[] args) throws IOException, TimeoutException {
            // 创建一个工厂
            ConnectionFactory factory = new ConnectionFactory();
            // 工厂IP链接rabbitmq的队列
            factory.setHost("47.107.53.146");
            // 设置用户名和密码
            factory.setUsername("admin");
            factory.setPassword("admin");
            // 创建链接
            Connection connection = factory.newConnection();
            // 获取信道
            Channel channel = connection.createChannel();
            /**
             *  生成一个队列
             *  1. 队列名称
             *  2. 队列里面的消息是否持久化(磁盘),默认情况下存储在内存中
             *  3. 该队列是否只供一个消费者进行消费 ,是否进行消息共享,true可以表示多个消费者消费,反之,false只能有一个消费者 消费
             *  4. 是否自动删除 ,最后一个消费者端开链接以后 ,该队一句是否自动删除,true自动删除 false 不自动删除
             *  5. 其他参数
             */
            channel.queueDeclare(Queue_NAME, false, false, false, null);
            String message = "hello world"; //初始使用
            /**
             * 发送一个消息
             * 1. 发送到哪个交换机
             * 2. 路由的key值是哪个,本次队列的名称
             * 3. 其他参数信息
             * 4. 发送消息的消息体
             */
            channel.basicPublish("", Queue_NAME, null, message.getBytes());
            System.out.println("消息发送完毕");
        }
    }
    
    
    • 生产者发送消息给队列
      在这里插入图片描述

    在这里插入图片描述

    • 消费者接收消息队列

    Consumer

    package com.xdr630;
    
    import com.rabbitmq.client.*;
    
    import java.io.IOException;
    import java.util.concurrent.TimeoutException;
    
    
    public class Consumer {
        //队列名称
        public static final String Queue_NAME = "hello";
        // 接收消息
        public static void main(String[] args) throws IOException, TimeoutException {
            // 创建连接工厂
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("47.107.53.146");
            factory.setUsername("admin");
            factory.setPassword("admin");
            Connection connection = factory.newConnection();
    
            Channel channel = connection.createChannel();
    
            //声明 接收消息,拿到消息体
            DeliverCallback deliverCallback = (consumerTag,message) -> {
                System.out.println(new String(message.getBody()));
            };
            // 取消消息时的回调
            CancelCallback cancelCallback = consumerTag -> {
                System.out.println("消息消费被中断");
            };
            /**
             * 消费者消费消息
             * 1. 消费哪个队列
             * 2. 消费成功之后是否要自动应答,true 代表的自动应答,false代表手动应答
             * 3. 消费者未成功消费的回调
             * 4. 消费者取消消费的回调
             */
            channel.basicConsume(Queue_NAME,true,deliverCallback,cancelCallback);
        }
    }
    
    

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    生活中总结出来的各种定律
    python中os.system()的返回值
    使用ldap登录服务器
    使用VirtualBox + Vagrant打造统一的开发环境
    Laravel 虚拟开发环境 Homestead
    win7 powershell版本过低问题
    Vagrant安装教程及常见问题
    vagrant up提示“Couldn‘t open file /path/to/base“的错误解决方法
    一起谈.NET技术,ASP.NET MVC的全球化方案 狼人:
    一起谈.NET技术,.Net4.0 Parallel编程(二)Data Parallelism 中 狼人:
  • 原文地址:https://www.cnblogs.com/xdr630/p/15254602.html
Copyright © 2011-2022 走看看