摘要:官方鏡像倉庫地址本地運行訪問可視化面板地址默認賬號默認密碼集成基本參數配置配置配置定義優先級隊列定義交換器定義參考官方文檔應用啟動后,會自動創建和,并相互綁定,優先級隊列會有如圖所示標識。
Docker With RabbitMQ
官方 Docker 鏡像倉庫地址
https://hub.docker.com/_/rabb...
本地運行 RabbitMQ
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
訪問可視化面板
地址:http://127.0.0.1:15672/
默認賬號:guest
默認密碼:guest
Spring Boot With RabbitMQSpring Boot 集成 RabbitMQ
org.springframework.boot spring-boot-starter-amqp
基本參數配置
# host & port spring.rabbitmq.host=127.0.0.1 spring.rabbitmq.port=5672
Queue / Exchange / Routing 配置
/** * RabbitMQ 配置 */ @Configuration public class RabbitMQConfig { private static final String EXCHANGE = "priority-exchange"; public static final String QUEUE = "priority-queue"; private static final String ROUTING_KEY = "priority.queue.#"; /** * 定義優先級隊列 */ @Bean Queue queue() { Mapargs= new HashMap<>(); args.put("x-max-priority", 100); return new Queue(QUEUE, false, false, false, args); } /** * 定義交換器 */ @Bean TopicExchange exchange() { return new TopicExchange(EXCHANGE); } @Bean Binding binding(Queue queue, TopicExchange exchange) { return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY); } }
priority queue 定義參考官方文檔:https://www.rabbitmq.com/priority.html
Spring Boot 應用啟動后,會自動創建 Queue 和 Exchange ,并相互綁定,優先級隊列會有如圖所示標識。RabbitMQ Publisher
Spring Boot 相關配置
# 是否開啟消息發送到交換器(Exchange)后觸發回調 spring.rabbitmq.publisher-confirms=false # 是否開啟消息發送到隊列(Queue)后觸發回調 spring.rabbitmq.publisher-returns=false # 消息發送失敗重試相關配置 spring.rabbitmq.template.retry.enabled=true spring.rabbitmq.template.retry.initial-interval=3000ms spring.rabbitmq.template.retry.max-attempts=3 spring.rabbitmq.template.retry.max-interval=10000ms spring.rabbitmq.template.retry.multiplier=1
發送消息
@Component @AllArgsConstructor public class FileMessageSender { private static final String EXCHANGE = "priority-exchange"; private static final String ROUTING_KEY_PREFIX = "priority.queue."; private final RabbitTemplate rabbitTemplate; /** * 發送設置有優先級的消息 * * @param priority 優先級 */ public void sendPriorityMessage(String content, Integer priority) { rabbitTemplate.convertAndSend(EXCHANGE, ROUTING_KEY_PREFIX + "test", content, message -> { message.getMessageProperties().setPriority(priority); return message; }); } }RabbitMQ Consumer
Spring Boot 相關配置
# 消息接收確認,可選模式:NONE(不確認)、AUTO(自動確認)、MANUAL(手動確認) spring.rabbitmq.listener.simple.acknowledge-mode=AUTO # 最小線程數量 spring.rabbitmq.listener.simple.concurrency=10 # 最大線程數量 spring.rabbitmq.listener.simple.max-concurrency=10 # 每個消費者可能未完成的最大未確認消息數量 spring.rabbitmq.listener.simple.prefetch=1
消費者執行耗時較長的話,建議 spring.rabbitmq.listener.simple.prefetch 設置為較小數值,讓優先級越高的消息更快加入到消費者線程。
監聽消息
@Slf4j @Component public class MessageListener { /** * 處理消息 */ @RabbitListener(queues = "priority-queue") public void listen(String message) { log.info(message); } }番外補充
1、自定義消息發送確認的回調
配置如下:
# 開啟消息發送到交換器(Exchange)后觸發回調 spring.rabbitmq.publisher-confirms=true # 開啟消息發送到隊列(Queue)后觸發回調 spring.rabbitmq.publisher-returns=true
自定義 RabbitTemplate.ConfirmCallback 實現類
@Slf4j public class RabbitConfirmCallBack implements RabbitTemplate.ConfirmCallback{ @Override public void confirm(CorrelationData correlationData, boolean ack, String cause) { log.info("消息唯一標識: {}", correlationData); log.info("確認狀態: {}", ack); log.info("造成原因: {}", cause); } }
自定義 RabbitTemplate.ConfirmCallback 實現類
@Slf4j public class RabbitReturnCallback implements RabbitTemplate.ReturnCallback { @Override public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) { log.info("消息主體: {}", message); log.info("回復編碼: {}", replyCode); log.info("回復內容: {}", replyText); log.info("交換器: {}", exchange); log.info("路由鍵: {}", routingKey); } }
配置 rabbitTemplate
@Component @AllArgsConstructor public class RabbitTemplateInitializingBean implements InitializingBean { private final RabbitTemplate rabbitTemplate; @Override public void afterPropertiesSet() { rabbitTemplate.setConfirmCallback(new RabbitConfirmCallBack()); rabbitTemplate.setReturnCallback(new RabbitReturnCallback()); } }
2、RabbitMQ Exchange 類型
中文:RabbitMQ Exchange類型詳解
English: RabbitMQ Tutorials
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74706.html
摘要:另一種就是用中的位于包下,本質是由和實現的阻塞優先級隊列。表明了一條消息可在隊列中存活的最大時間。當某條消息被設置了或者當某條消息進入了設置了的隊列時,這條消息會在時間后死亡成為。 SpringBoot 是為了簡化 Spring 應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可...
摘要:慕課網消息中間件極速入門與實戰學習總結時間年月日星期三說明本文部分內容均來自慕課網。 慕課網《RabbitMQ消息中間件極速入門與實戰》學習總結 時間:2018年09月05日星期三 說明:本文部分內容均來自慕課網。@慕課網:https://www.imooc.com 教學源碼:無 學習源碼:https://github.com/zccodere/s... 第一章:RabbitM...
摘要:可以在地址看到如何使用講解下上面命令行表示控制臺端口號,可以在瀏覽器中通過控制臺來執行的相關操作。同時從控制臺可以看到發送的速率多線程測試性能開了個線程,每個線程發送條消息。 showImg(http://ww2.sinaimg.cn/large/006tNc79ly1g5jjb62t88j30u00gwdi2.jpg); 前提 上次寫了篇文章,《SpringBoot Kafka 整合...
摘要:用于控制活動人數,將超過此一定閥值的訂單直接丟棄。緩解短時間的高流量壓垮應用。目前比較推薦的就是我們手動然后將消費錯誤的消息轉移到其它的消息隊列中,做補償處理消費者該方案是默認的方式不太推薦。 SpringBoot 是為了簡化 Spring 應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相...
摘要:它還為具有偵聽器容器的消息驅動的提供支持。接收消息當存在基礎結構時,可以使用任何來注釋以創建偵聽器端點。默認情況下,如果禁用重試并且偵聽器拋出異常,則會無限期地重試傳遞。 Spring-amqp-tutorial Spring AMQP項目將核心Spring概念應用于基于AMQP的消息傳遞解決方案的開發。它提供了一個模板作為發送和接收消息的高級抽象。它還為具有偵聽器容器的消息驅動的PO...
閱讀 1802·2021-09-03 10:50
閱讀 1333·2019-08-30 15:55
閱讀 3373·2019-08-30 15:52
閱讀 1235·2019-08-30 15:44
閱讀 946·2019-08-30 15:44
閱讀 3322·2019-08-30 14:23
閱讀 3555·2019-08-28 17:51
閱讀 2296·2019-08-26 13:52