摘要:它還為具有偵聽器容器的消息驅動的提供支持。接收消息當存在基礎結構時,可以使用任何來注釋以創建偵聽器端點。默認情況下,如果禁用重試并且偵聽器拋出異常,則會無限期地重試傳遞。
Spring-amqp-tutorial
Spring AMQP項目將核心Spring概念應用于基于AMQP的消息傳遞解決方案的開發。它提供了一個“模板”作為發送和接收消息的高級抽象。它還為具有“偵聽器容器”的消息驅動的POJO提供支持。這些庫有助于管理AMQP資源,同時促進依賴注入和聲明性配置的使用。在所有這些情況下,您將看到Spring Framework中與JMS支持的相似之處。
該項目由兩部分組成; spring-amqp是基礎抽象,spring-rabbit是RabbitMQ實現。
特征用于異步處理入站消息的偵聽器容器
RabbitTemplate用于發送和接收消息
RabbitAdmin用于自動聲明隊列,交換和綁定
SpringBoot配置 AMQP高級消息隊列協議(AMQP)是面向消息的中間件的平臺中立的線級協議。Spring AMQP項目將核心Spring概念應用于基于AMQP的消息傳遞解決方案的開發。Spring Boot為通過RabbitMQ使用AMQP提供了一些便利,包括spring-boot-starter-amqp “Starter”。
RabbitMQ支持RabbitMQ是一個基于AMQP協議的輕量級,可靠,可擴展且可移植的消息代理。Spring用于RabbitMQ通過AMQP協議進行通信。
RabbitMQ配置由外部配置屬性控制 spring.rabbitmq.*。例如,您可以在以下部分聲明以下部分 application.properties:
spring.rabbitmq.host = localhost spring.rabbitmq.port = 5672 spring.rabbitmq.username = guest spring.rabbitmq.password = guest
如果ConnectionNameStrategy上下文中存在bean,則它將自動用于命名由自動配置創建的連接ConnectionFactory。有關RabbitProperties更多支持的選項,請參閱 。
發送消息Spring的AmqpTemplate和AmqpAdmin被自動配置,您可以直接自動裝配它們變成自己的豆類,如下面的例子:
@Component public class MyBean { private final AmqpAdmin amqpAdmin; private final AmqpTemplate amqpTemplate; @Autowired public MyBean(AmqpAdmin amqpAdmin,AmqpTemplate amqpTemplate){ this.amqpAdmin = amqpAdmin; this.amqpTemplate = amqpTemplate; } //.... }
如有必要,任何org.springframework.amqp.core.Queue定義為bean的都會自動用于在RabbitMQ實例上聲明相應的隊列。
要重試操作,可以啟用重試AmqpTemplate(例如,在代理連接丟失的情況下):
spring.rabbitmq.template.retry.enabled = true spring.rabbitmq.template.retry.initial-interval = 2s
默認情況下禁用重試。您還可以RetryTemplate 通過聲明RabbitRetryTemplateCustomizerbean來以編程方式自定義。
接收消息當存在Rabbit基礎結構時,可以使用任何bean來注釋 @RabbitListener以創建偵聽器端點。如果RabbitListenerContainerFactory 未定義,SimpleRabbitListenerContainerFactory則會自動配置默認值,您可以使用該spring.rabbitmq.listener.type屬性切換到直接容器 。如果 定義了a MessageConverter或MessageRecovererbean,它將自動與默認工廠關聯。
以下示例組件在someQueue隊列上創建偵聽器端點:
@Component public class MyBean { @RabbitListener(queues = "someQueue") public void processMessage(String content){ //.... } }
如果您需要創建更多RabbitListenerContainerFactory實例,或者如果要覆蓋默認實例,則Spring Boot提供了一個 SimpleRabbitListenerContainerFactoryConfigurer和一個 DirectRabbitListenerContainerFactoryConfigurer可用于初始化一個 SimpleRabbitListenerContainerFactory和一個 DirectRabbitListenerContainerFactory的設置,其設置與自動配置使用的工廠相同。
例如,以下配置類公開了另一個使用特定的工廠MessageConverter:
@Configuration public class RabbitConfiguration { ConnectionFactory connectionFactory; @Bean public SimpleRabbitListenerContainerFactory myFactory( SimpleRabbitListenerContainerFactoryConfigurer configurer){ SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); configurer.configure(factory,connectionFactory); factory.setMessageConverter(myMessageConverter()); return factory; } private MessageConverter myMessageConverter() { //.. return null; } }
然后您可以在任何@RabbitListener注釋方法中使用工廠,如下所示:
@Component public class MyBean { @RabbitListener(queues = "someQueue",concurrency = "myFactory") public void processMessage(String content){ //.. } }
您可以啟用重試來處理偵聽器拋出異常的情況。默認情況下,RejectAndDontRequeueRecoverer使用,但您可以定義MessageRecoverer 自己的。當重試耗盡時,如果代理配置了這樣做,則拒絕該消息并將其丟棄或路由到死信交換。默認情況下,禁用重試。您還可以RetryTemplate通過聲明RabbitRetryTemplateCustomizerbean來以編程方式自定義。
默認情況下,如果禁用重試并且偵聽器拋出異常,則會無限期地重試傳遞。您可以通過兩種方式修改此行為:將defaultRequeueRejected屬性設置 為false以便嘗試零重新傳遞,或拋出一個AmqpRejectAndDontRequeueException信號來拒絕該消息。后者是啟用重試并且達到最大傳遞嘗試次數時使用的機制。快速開始
參考地址:
spring-amqp配置環境spring-amqp-samples
下文教程Github地址
org.springframework.boot spring-boot-starter-amqp
鏈接參數
spring: rabbitmq: host: 192.168.192.132 port: 5672 username: guest password: guest template: retry: enabled: true # 代理鏈接丟失、啟用重試AmqpTemplate initial-interval: 2s # 代理鏈接丟失、啟用重試AmqpTemplateamqpAdmin
amqpAdmin可以用于交換器,隊列以及綁定的申明,以下代碼演示了amqpAdmin的主要用法。
public class MyAdmin extends SampleApplicationTests { @Autowired AmqpAdmin amqpAdmin; @Test public void contextLoads(){ //新建交換器 amqpAdmin.declareExchange(new DirectExchange("myself.directExchange")); //新建隊列 amqpAdmin.declareQueue(new Queue("myself.queue",true)); //綁定 amqpAdmin.declareBinding(new Binding("myself.queue",Binding.DestinationType.QUEUE,"myself.directExchange","",null)); } @Test public void remove(){ //移除交換器 amqpAdmin.deleteExchange("myself.directExchange"); //移除隊列 amqpAdmin.deleteQueue("myself.queue"); } }amqpTemplate
快速使用的發送接收模板
public class MyTemplate extends SampleApplicationTests { @Autowired AmqpTemplate amqpTemplate; @Test public void send(){ amqpTemplate.convertAndSend("myself.queue","nihao"); } }接收監聽
@Service public class MyService { @RabbitListener(queues = "myself.queue") public void recevie(String result){ System.out.println("監聽到消息了"); System.out.println(result); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72273.html
背景: 在一些應用場景中,程序并不需要同步執行,例如用戶注冊之后的郵件或者短信通知提醒。這種場景的實現則是在當前線程,開啟一個新線 程,當前線程在開啟新線程之后會繼續往下執行,無需等待新線程執行完成。 但例如一些需要延時的場景則不只是開啟新線程執行如此簡單了。譬如提交訂單后在15分鐘內沒有完成支付,訂單需要關閉,這種情 況,是否只開啟一個異步線程就不適用了呢。 那么就單單實現...
摘要:但是,今天我要寫一個快速入門,本人覺得還是有一點用處,因為,我不可能在一天之內精通某種東西,卻可以在一兩小時入門。不知道還要不要再來一個快速入門,發展得挺快,東西也像類似的全家。 以前看到多少天學習系列,我都深感煩躁,短短幾天怎么可以精通,那是對于他們而言。但是,今天我要寫一個快速入門,本人覺得還是有一點用處,因為,我不可能在一天之內精通某種東西,卻可以在一兩小時入門。 回到vue本身...
摘要:云服務器實例,有時候也被稱為阿里云服務器云服務器云服務器等。為避免引起誤解,本文一律使用云服務器實例這一名稱,簡稱實例。快速入門流程 一般購買和使用云服務器 ECS實例遵循以下步驟:配置選型創建實例遠程連接實例如果是 Linux 實例,格式化和掛載數據盤 ;如果是 Windows 實例,格式化數據盤 文檔目的 本文檔介紹了如何快速創建實例、遠程連接實例、格式化數據盤等。旨在引導您一站式完成實...
摘要:例如改成例如改成以上兩種開發方式都可以結合原生平臺打包成獨立應用。 繼上一篇一張腦圖看懂BUI Webapp移動快速開發框架【上】--框架與工具、資源 大綱 在線查看大綱 思路更佳清晰 1. 框架設計 框架介紹 簡介 BUI 是用來快速構建界面交互的UI交互框架, 專注webapp開發, 開發者只需關注業務的開發, 界面的布局及交互交給BUI, 開發出來的應用, 可以嵌入平臺 ( Li...
摘要:快速入門流程企業級用戶在購買和使用云服務器實例時,通常需考慮如下幾點配置選型估算成本網絡規劃配置安全組制定自動快照策略鏡像遷移用負載均衡實現的高可用性讀者對象本文檔作為快速入門參考,適用于有以下需求的讀者了解如何進行云服務器實例的配置選型??焖偃腴T流程企業級用戶在購買和使用云服務器ECS實例時,通常需考慮如下幾點: 配置選型估算成本網絡規劃配置安全組制定自動快照策略鏡像遷移用負載均衡實現EC...
閱讀 1074·2021-11-19 09:40
閱讀 2213·2021-11-15 18:00
閱讀 1267·2021-10-18 13:34
閱讀 2248·2021-09-02 15:40
閱讀 1533·2019-08-30 14:01
閱讀 1113·2019-08-30 11:11
閱讀 2482·2019-08-29 15:26
閱讀 722·2019-08-29 14:15