RabbitMQ之总结

RabbitMQ

  • 流程图
    RabbitMQ之总结_第1张图片
  • Exchage交换机
    Direct Exchange 直连交换机
    发送消息到直连类型的交换机时,只有routing key跟binding key完全匹配时,绑定的队列才能收到消息。
    RabbitMQ之总结_第2张图片

Topic Exchange 主题交换机
发送消息到主题类型的交换机时,routing key符合binding key的模式时,绑定的队列才能收到消息。
RabbitMQ之总结_第3张图片

Fanout Exchange 广播交换机
当消息发送到广播类型的交换机时,不需要指定routing key,所有与之绑定的队列都能收到消息
RabbitMQ之总结_第4张图片

  • 声明交换机
 		Map arguments = new HashMap<>();
        /**
         * 交换机名称
         * 设置是否持久化
         * 设置是否自动删除
         * 参数
         */
         new TopicExchange("交换机名称",true,false,arguments);
  • 声明队列
  		Map arguments = new HashMap();
        // 指定队列的死信交换机
        arguments.put("x-dead-letter-exchange","死信交换机名称");
        // 如果设置了队列的最大长度,超过长度时,先入队的消息会被发送到DLX
        arguments.put("x-max-length", 4);
         //通过队列属性设置消息过期时间
        arguments.put("x-message-ttl",7000);
        //声明队列的优先级
        arguments.put("x-max-priority",10);
        
        /**
         * 队列名称
         * 设置是否持久化
         * 设置是否排他(排他性队列只能在声明它的Connection中使用,连接断开时自动删除)
         * 设置是否自动删除
         * 参数
         */
        Queue queue = new Queue("队列名称", false, false, true, arguments);
  • 声明绑定关系
	// 声明一个队列跟一个topicExchange交换机的绑定
    @Bean
    public Binding bindFirst(@Qualifier("队列名") Queue queue, @Qualifier("交换机名") TopicExchange exchange){
    	//#用于匹配多规格单词(可以是零个),*用于匹配一个单词
        return BindingBuilder.bind(queue).to(exchange).with("#.etoak.*");
    }
  • 生产者
		//发送消息
        /**
         * 交换机名称
         * 路由键
         * 消息体
         * 参数
         */
        amqpTemplate.convertAndSend("交换机名称","路由键",message,processor);

		//消息属性配置
		 MessagePostProcessor processor = new MessagePostProcessor(){
            public Message postProcessMessage(Message message) throws AmqpException {
                message.getMessageProperties().setExpiration("10000" );//10秒后超时
                message.getMessageProperties().setPriority(1);// 优先级,默认为5,配合队列的 x-max-priority 属性使用
                message.getMessageProperties().setContentType("UTF-8");// 编码
                message.getMessageProperties().setMessageId(String.valueOf(UUID.randomUUID()));
                return message;
            }
        };
        
  • 消费者
 	@RabbitHandler
    @RabbitListener(queues = "队列名")
    public void getMessage(Message message, Channel channel){
       log.info("消息为"+new String (message.getBody()));
    }

你可能感兴趣的:(RabbitMQ学习)