成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

快速入門spring-amqp

鄒強 / 1956人閱讀

摘要:它還為具有偵聽器容器的消息驅(qū)動的提供支持。接收消息當存在基礎結構時,可以使用任何來注釋以創(chuàng)建偵聽器端點。默認情況下,如果禁用重試并且偵聽器拋出異常,則會無限期地重試傳遞。

Spring-amqp-tutorial

Spring AMQP項目將核心Spring概念應用于基于AMQP的消息傳遞解決方案的開發(fā)。它提供了一個“模板”作為發(fā)送和接收消息的高級抽象。它還為具有“偵聽器容器”的消息驅(qū)動的POJO提供支持。這些庫有助于管理AMQP資源,同時促進依賴注入和聲明性配置的使用。在所有這些情況下,您將看到Spring Framework中與JMS支持的相似之處。

該項目由兩部分組成; spring-amqp是基礎抽象,spring-rabbit是RabbitMQ實現(xiàn)。

特征

用于異步處理入站消息的偵聽器容器

RabbitTemplate用于發(fā)送和接收消息

RabbitAdmin用于自動聲明隊列,交換和綁定

SpringBoot配置 AMQP

高級消息隊列協(xié)議(AMQP)是面向消息的中間件的平臺中立的線級協(xié)議。Spring AMQP項目將核心Spring概念應用于基于AMQP的消息傳遞解決方案的開發(fā)。Spring Boot為通過RabbitMQ使用AMQP提供了一些便利,包括spring-boot-starter-amqp “Starter”。

RabbitMQ支持

RabbitMQ是一個基于AMQP協(xié)議的輕量級,可靠,可擴展且可移植的消息代理。Spring用于RabbitMQ通過AMQP協(xié)議進行通信。

RabbitMQ配置由外部配置屬性控制 spring.rabbitmq.*。例如,您可以在以下部分聲明以下部分 application.properties:

spring.rabbitmq.host = localhost
spring.rabbitmq.port = 5672
spring.rabbitmq.username = guest
spring.rabbitmq.password = guest

如果ConnectionNameStrategy上下文中存在bean,則它將自動用于命名由自動配置創(chuàng)建的連接ConnectionFactory。有關RabbitProperties更多支持的選項,請參閱 。

發(fā)送消息

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以創(chuàng)建偵聽器端點。如果RabbitListenerContainerFactory 未定義,SimpleRabbitListenerContainerFactory則會自動配置默認值,您可以使用該spring.rabbitmq.listener.type屬性切換到直接容器 。如果 定義了a MessageConverter或MessageRecovererbean,它將自動與默認工廠關聯(lián)。

以下示例組件在someQueue隊列上創(chuàng)建偵聽器端點:

@Component
public class MyBean {

    @RabbitListener(queues = "someQueue")
    public void processMessage(String content){
        //....
    }

}

如果您需要創(chuàng)建更多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信號來拒絕該消息。后者是啟用重試并且達到最大傳遞嘗試次數(shù)時使用的機制。
快速開始

參考地址:

spring-amqp

spring-amqp-samples

下文教程Github地址

配置環(huán)境

    org.springframework.boot
    spring-boot-starter-amqp

鏈接參數(shù)

spring:
  rabbitmq:
    host: 192.168.192.132
    port: 5672
    username: guest
    password: guest
    template:
      retry:
        enabled: true # 代理鏈接丟失、啟用重試AmqpTemplate
        initial-interval: 2s # 代理鏈接丟失、啟用重試AmqpTemplate
amqpAdmin

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

快速使用的發(fā)送接收模板

public class MyTemplate extends SampleApplicationTests {

    @Autowired
    AmqpTemplate amqpTemplate;

    @Test
    public void send(){
        amqpTemplate.convertAndSend("myself.queue","nihao");
    }

}

接收監(jiān)聽
@Service
public class MyService {

    @RabbitListener(queues = "myself.queue")
    public void recevie(String result){
        System.out.println("監(jiān)聽到消息了");
        System.out.println(result);
    }

}

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72273.html

相關文章

  • SpringBoot+RabbitMq實現(xiàn)延時消息隊列

    背景: 在一些應用場景中,程序并不需要同步執(zhí)行,例如用戶注冊之后的郵件或者短信通知提醒。這種場景的實現(xiàn)則是在當前線程,開啟一個新線 程,當前線程在開啟新線程之后會繼續(xù)往下執(zhí)行,無需等待新線程執(zhí)行完成。 但例如一些需要延時的場景則不只是開啟新線程執(zhí)行如此簡單了。譬如提交訂單后在15分鐘內(nèi)沒有完成支付,訂單需要關閉,這種情 況,是否只開啟一個異步線程就不適用了呢。 那么就單單實現(xiàn)...

    alighters 評論0 收藏0
  • vue.js快速入門

    摘要:但是,今天我要寫一個快速入門,本人覺得還是有一點用處,因為,我不可能在一天之內(nèi)精通某種東西,卻可以在一兩小時入門。不知道還要不要再來一個快速入門,發(fā)展得挺快,東西也像類似的全家。 以前看到多少天學習系列,我都深感煩躁,短短幾天怎么可以精通,那是對于他們而言。但是,今天我要寫一個快速入門,本人覺得還是有一點用處,因為,我不可能在一天之內(nèi)精通某種東西,卻可以在一兩小時入門。 回到vue本身...

    MkkHou 評論0 收藏0
  • 云服務器ecs個人版快速入門概述

    摘要:云服務器實例,有時候也被稱為阿里云服務器云服務器云服務器等。為避免引起誤解,本文一律使用云服務器實例這一名稱,簡稱實例??焖偃腴T流程 一般購買和使用云服務器 ECS實例遵循以下步驟:配置選型創(chuàng)建實例遠程連接實例如果是 Linux 實例,格式化和掛載數(shù)據(jù)盤 ;如果是 Windows 實例,格式化數(shù)據(jù)盤 文檔目的 本文檔介紹了如何快速創(chuàng)建實例、遠程連接實例、格式化數(shù)據(jù)盤等。旨在引導您一站式完成實...

    asce1885 評論0 收藏0
  • 一張腦圖看懂BUI Webapp移動快速開發(fā)框架【下】--快速入門指引

    摘要:例如改成例如改成以上兩種開發(fā)方式都可以結合原生平臺打包成獨立應用。 繼上一篇一張腦圖看懂BUI Webapp移動快速開發(fā)框架【上】--框架與工具、資源 大綱 在線查看大綱 思路更佳清晰 1. 框架設計 框架介紹 簡介 BUI 是用來快速構建界面交互的UI交互框架, 專注webapp開發(fā), 開發(fā)者只需關注業(yè)務的開發(fā), 界面的布局及交互交給BUI, 開發(fā)出來的應用, 可以嵌入平臺 ( Li...

    hzx 評論0 收藏0
  • 云服務器ecs企業(yè)版快速入門概述

    摘要:快速入門流程企業(yè)級用戶在購買和使用云服務器實例時,通常需考慮如下幾點配置選型估算成本網(wǎng)絡規(guī)劃配置安全組制定自動快照策略鏡像遷移用負載均衡實現(xiàn)的高可用性讀者對象本文檔作為快速入門參考,適用于有以下需求的讀者了解如何進行云服務器實例的配置選型??焖偃腴T流程企業(yè)級用戶在購買和使用云服務器ECS實例時,通常需考慮如下幾點: 配置選型估算成本網(wǎng)絡規(guī)劃配置安全組制定自動快照策略鏡像遷移用負載均衡實現(xiàn)EC...

    Clect 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<