All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.emily.infrastructure.rabbitmq.example.direct.Recv Maven / Gradle / Ivy

package com.emily.infrastructure.rabbitmq.example.direct;

import com.rabbitmq.client.*;

import java.util.HashMap;
import java.util.Map;

/**
 * Direct类型交换器消费者
 *
 * @since 1.0
 */
@SuppressWarnings("all")
public class Recv {
    /**
     * 队列名称
     */
    private static final String QUEUE_NAME = "test_queue";

    public static void main(String[] args) throws Exception {
        /**
         * {@link Connection}的工厂类
         */
        ConnectionFactory factory = new ConnectionFactory();
        /**
         * 设置vhost
         */
        factory.setVirtualHost(ConnectionFactory.DEFAULT_VHOST);
        /**
         * 设置连接的主机
         */
        factory.setHost("127.0.0.1");
        /**
         * 设置端口号
         */
        factory.setPort(AMQP.PROTOCOL.PORT);
        /**
         * 用户名
         */
        factory.setUsername("admin");
        /**
         * 密码
         */
        factory.setPassword("admin");
        /**
         * 创建新的代理连接
         */
        Connection connection = factory.newConnection();
        /**
         * 使用内部分配的通道号创建一个新的频道
         */
        Channel channel = connection.createChannel();
        /**
         * prefetchCount:服务端每次分派给消费者的消息数量
         */
        channel.basicQos(1);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
        /**
         * 当一个消息被发送过来时,将会被回调的接口
         * consumerTag:与消费者相关的消费者标签
         * delivery:发送过来的消息
         */
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println("消费者优先级为10的消费者标识:" + consumerTag + "-");
            /*try {
                TimeUnit.SECONDS.sleep(1);
            } catch (Exception e){

            }*/
            channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
        };
        Map arguments = new HashMap<>();
        /**
         * 设置消息的优先级
         */
        arguments.put("x-priority", 10);
        /**
         * String basicConsume(String queue, boolean autoAck, DeliverCallback deliverCallback, CancelCallback cancelCallback)
         * 启动一个消费者,并返回服务端生成的消费者标识
         * queue:队列名
         * autoAck:true 接收到传递过来的消息后acknowledged(应答服务器),false 接收到消息后不应答服务器
         * deliverCallback: 当一个消息发送过来后的回调接口
         * cancelCallback:当一个消费者取消订阅时的回调接口;取消消费者订阅队列时除了使用{@link Channel#basicCancel}之外的所有方式都会调用该回调方法
         * @return 服务端生成的消费者标识
         */
        channel.basicConsume(QUEUE_NAME, false, arguments, deliverCallback, consumerTag -> {
            //System.out.println("消费者优先级为10的消费者标识:"+consumerTag);
        });
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy