RabbitMQ:RabbitAdmin 與 RabbitTemplate 使用

RabbitAdmin

  • 該類封裝了對 RabbitMQ 的管理操作
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory){
    return new RabbitAdmin(connectionFactory);
}

@Autowired
private RabbitAdmin rabbitAdmin;
  • Exchange 操作
//創(chuàng)建四種類型的 Exchange,均為持久化,不自動刪除
rabbitAdmin.declareExchange(new DirectExchange("direct.exchange",true,false));
rabbitAdmin.declareExchange(new TopicExchange("topic.exchange",true,false));
rabbitAdmin.declareExchange(new FanoutExchange("fanout.exchange",true,false));
rabbitAdmin.declareExchange(new HeadersExchange("header.exchange",true,false));
//刪除 Exchange
rabbitAdmin.deleteExchange("header.exchange");
  • Queue 操作
//定義隊列,均為持久化
rabbitAdmin.declareQueue(new Queue("debug",true));
rabbitAdmin.declareQueue(new Queue("info",true));
rabbitAdmin.declareQueue(new Queue("error",true));
//刪除隊列      rabbitAdmin.deleteQueue("debug");
//將隊列中的消息全消費掉
rabbitAdmin.purgeQueue("info",false);
  • Binding 綁定
//綁定隊列到交換器,通過路由鍵
rabbitAdmin.declareBinding(new Binding("debug",Binding.DestinationType.QUEUE,
        "direct.exchange","key.1",new HashMap()));

rabbitAdmin.declareBinding(new Binding("info",Binding.DestinationType.QUEUE,
        "direct.exchange","key.2",new HashMap()));

rabbitAdmin.declareBinding(new Binding("error",Binding.DestinationType.QUEUE,
        "direct.exchange","key.3",new HashMap()));

//進行解綁
rabbitAdmin.removeBinding(BindingBuilder.bind(new Queue("info")).
        to(new TopicExchange("direct.exchange")).with("key.2"));

//使用BindingBuilder進行綁定
rabbitAdmin.declareBinding(BindingBuilder.bind(new Queue("info")).
        to(new TopicExchange("topic.exchange")).with("key.#"));

//聲明topic類型的exchange
rabbitAdmin.declareExchange(new TopicExchange("exchange1",true,false));
rabbitAdmin.declareExchange(new TopicExchange("exchange2",true,false));

//exchange與exchange綁定
rabbitAdmin.declareBinding(new Binding("exchange1",Binding.DestinationType.EXCHANGE,
        "exchange2","key.4",new HashMap()));

RabbitTemplate

  • Spring AMQP 提供了 RabbitTemplate 來簡化 RabbitMQ 發(fā)送和接收消息操作
@Autowired
private RabbitAdmin rabbitAdmin;

RabbitTemplate 初始化

  • 設置 RabbitTemplate 的默認交換器、默認路由鍵、默認隊列

發(fā)送消息

  • send (自定義消息 Message)
Message message = new Message("hello".getBytes(),new MessageProperties());
// 發(fā)送消息到默認的交換器,默認的路由鍵
rabbitTemplate.send(message);
// 發(fā)送消息到指定的交換器,指定的路由鍵
rabbitTemplate.send("direct.exchange","key.1",message);
// 發(fā)送消息到指定的交換器,指定的路由鍵
rabbitTemplate.send("direct.exchange","key.1",message,new CorrelationData(UUID.randomUUID().toString()));
  • convertAndSend(自動 Java 對象包裝成 Message 對象,Java 對象需要實現(xiàn) Serializable 序列化接口)
User user = new User("linyuan");
// 發(fā)送消息到默認的交換器,默認的路由鍵
rabbitTemplate.convertAndSend(user);
// 發(fā)送消息到指定的交換器,指定的路由鍵,設置消息 ID
rabbitTemplate.convertAndSend("direct.exchange","key.1",user,new CorrelationData(UUID.randomUUID().toString()));
// 發(fā)送消息到指定的交換器,指定的路由鍵,在消息轉換完成后,通過 MessagePostProcessor 來添加屬性
rabbitTemplate.convertAndSend("direct.exchange","key.1",user,mes -> {
    mes.getMessageProperties().setDeliveryMode(MessageDeliveryMode.NON_PERSISTENT);
        return mes;
});

接收消息

  • receive(返回 Message 對象)
// 接收來自指定隊列的消息,并設置超時時間
Message msg = rabbitTemplate.receive("debug",2000l);
  • receiveAndConvert(將返回 Message 轉換成 Java 對象)
User user = (User) rabbitTemplate.receiveAndConvert();

------- 待完善 -------

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容