package com.xhpc.order.rabbitmq;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.xhpc.common.util.ConnectionRabbitMQUtil;

import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**+
 * 生产者
 * @author yuyang
 * @date 2021/8/7 16:37
 */
public class SendDemo {

    //队列名称
    private final static String NAME = "xhpc";


    public static void main(String[] args) {

        try {
            // 1、获取到连接
            Connection connection = ConnectionRabbitMQUtil.getConnection();
            // 2、从连接中创建通道，使用通道才能完成消息相关的操作
            Channel channel = connection.createChannel();
            // 3、声明（创建）队列

            /**
             * 参数明细
             * 1、queue 队列名称
             * 2、durable 是否持久化，如果持久化，mq重启后队列还在
             * 3、exclusive 是否独占连接，队列只允许在该连接中访问，如果connection连接关闭队列则自动删除,如果将此参数设置true可用于临时队列的创建
             * 4、autoDelete 自动删除，队列不再使用时是否自动删除此队列，如果将此参数和exclusive参数设置为true就可以实现临时队列（队列不用了就自动删除）
             * 5、arguments 参数，可以设置一个队列的扩展参数，比如：可设置存活时间
             */
            //参数：String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments
            channel.queueDeclare(NAME, false, false, false, null);
            // 4、消息内容
            String message = "Hello World!!!!";
            /**
             * 参数明细：
             * 1、exchange，交换机，如果不指定将使用mq的默认交换机（设置为""）
             * 2、routingKey，路由key，交换机根据路由key来将消息转发到指定的队列，如果使用默认交换机，routingKey设置为队列的名称
             * 3、props，消息的属性
             * 4、body，消息内容
             */
            channel.basicPublish("", NAME, null, message.getBytes());
            //关闭通道和连接(资源关闭最好用try-catch-finally语句处理)
            channel.close();
            connection.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
