RabbitMQ之總結

RabbitMQ

  • 流程圖
    在這裏插入圖片描述
  • Exchage交換機
    Direct Exchange 直連交換機
    發送消息到直連類型的交換機時,只有routing key跟binding key完全匹配時,綁定的隊列才能收到消息。
    在這裏插入圖片描述

Topic Exchange 主題交換機
發送消息到主題類型的交換機時,routing key符合binding key的模式時,綁定的隊列才能收到消息。
在這裏插入圖片描述

Fanout Exchange 廣播交換機
當消息發送到廣播類型的交換機時,不需要指定routing key,所有與之綁定的隊列都能收到消息
在這裏插入圖片描述

  • 聲明交換機
 		Map<String,Object> arguments = new HashMap<>();
        /**
         * 交換機名稱
         * 設置是否持久化
         * 設置是否自動刪除
         * 參數
         */
         new TopicExchange("交換機名稱",true,false,arguments);
  • 聲明隊列
  		Map<String, Object> arguments = new HashMap<String, Object>();
        // 指定隊列的死信交換機
        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()));
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章