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

資訊專欄INFORMATION COLUMN

Spring Boot 參考指南(消息傳遞)

Doyle / 1668人閱讀

摘要:還自動(dòng)配置發(fā)送和接收消息所需的基礎(chǔ)設(shè)施。支持是一個(gè)輕量級(jí)的可靠的可伸縮的可移植的消息代理,基于協(xié)議,使用通過協(xié)議進(jìn)行通信。

32. 消息傳遞

Spring框架為與消息傳遞系統(tǒng)集成提供了廣泛的支持,從使用JmsTemplate簡(jiǎn)化的JMS API到使用完整的基礎(chǔ)設(shè)施異步接收消息,Spring AMQP為高級(jí)消息隊(duì)列協(xié)議提供了類似的特性集。Spring Boot還為RabbitTemplate和RabbitMQ提供自動(dòng)配置選項(xiàng),Spring WebSocket原生包括對(duì)STOMP消息的支持,Spring Boot通過啟動(dòng)器和少量的自動(dòng)配置支持這一點(diǎn),Spring Boot還支持Apache Kafka。

32.1 JMS

javax.jms.ConnectionFactory接口提供了創(chuàng)建javax.jms.Connection與JMS代理交互的標(biāo)準(zhǔn)方法,盡管Spring需要一個(gè)ConnectionFactory來處理JMS,你通常不需要自己直接使用它,而是可以依賴于更高級(jí)別的消息傳遞抽象。(詳見Spring Framework參考文檔的相關(guān)部分。)Spring Boot還自動(dòng)配置發(fā)送和接收消息所需的基礎(chǔ)設(shè)施。

32.1.1 ActiveMQ支持

當(dāng)ActiveMQ在類路徑上可用時(shí),Spring Boot還可以配置ConnectionFactory,如果代理存在,則會(huì)自動(dòng)啟動(dòng)和配置嵌入式代理(只要沒有通過配置指定代理URL)。

如果你使用spring-boot-starter-activemq,那么將提供連接或嵌入ActiveMQ實(shí)例所需的依賴項(xiàng),與JMS集成的Spring基礎(chǔ)設(shè)施也是一樣。

ActiveMQ配置由在spring.activemq.*中的外部配置屬性控制,例如,你可以在application.properties中聲明以下部分:

spring.activemq.broker-url=tcp://192.168.1.210:9876
spring.activemq.user=admin
spring.activemq.password=secret

你還可以通過向org.apache.activemq:activemq-pool添加一個(gè)依賴項(xiàng)來共享JMS資源并相應(yīng)地配置PooledConnectionFactory,如下例所示:

spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=50
有關(guān)更多支持的選項(xiàng),請(qǐng)參見ActiveMQProperties,你還可以注冊(cè)一個(gè)任意數(shù)量的實(shí)現(xiàn)activemqconnectionfactorycustomzer的bean進(jìn)行更高級(jí)的自定義。

默認(rèn)情況下,ActiveMQ創(chuàng)建一個(gè)目的地,如果它還不存在,那么目的地將根據(jù)它們提供的名稱解析。

32.1.2 Artemis支持

Spring Boot可以自動(dòng)配置ConnectionFactory,當(dāng)它檢測(cè)到在類路徑上可用的Artemis時(shí),如果代理存在,則自動(dòng)啟動(dòng)和配置嵌入式代理(除非模式屬性已顯式設(shè)置),所支持的模式是embedded(要明確地說明需要一個(gè)嵌入式代理,如果代理在類路徑上不可用,就會(huì)出現(xiàn)錯(cuò)誤)和native(使用netty傳輸協(xié)議連接到代理),在配置后者時(shí),Spring Boot使用默認(rèn)設(shè)置配置連接到運(yùn)行在本地機(jī)器上的代理的ConnectionFactory。

如果你使用spring-boot-starter-artemis,則提供了連接到現(xiàn)有的Artemis實(shí)例的必要依賴項(xiàng),以及與JMS集成的Spring基礎(chǔ)設(shè)施,添加org.apache.activemq:artemis-jms-server到你的應(yīng)用程序以允許你使用嵌入式模式。

Artemis配置由spring.artemis.*的外部配置屬性控制,例如,你可以在application.properties中聲明以下部分:

spring.artemis.mode=native
spring.artemis.host=192.168.1.210
spring.artemis.port=9876
spring.artemis.user=admin
spring.artemis.password=secret

在嵌入代理時(shí),你可以選擇是否啟用持久性,并列出應(yīng)該可用的目的地,可以將它們指定為逗號(hào)分隔的列表,以使用默認(rèn)選項(xiàng)創(chuàng)建它們,或者可以定義類型為org.apache.activemq.artemis.jms.server.config.JMSQueueConfigurationorg.apache.activemq.artemis.jms.server.config.TopicConfiguration的bean,分別用于高級(jí)隊(duì)列和主題配置。

有關(guān)更多受支持的選項(xiàng),請(qǐng)參閱ArtemisProperties。

不涉及JNDI查找,目的地根據(jù)它們的名稱進(jìn)行解析,使用Artemis配置中的name屬性或通過配置提供的名稱。

32.1.3 使用JNDI ConnectionFactory

如果你正在應(yīng)用服務(wù)器中運(yùn)行應(yīng)用程序,Spring Boot試圖使用JNDI定位JMS ConnectionFactory,默認(rèn)情況下,檢查java:/JmsXAjava:/XAConnectionFactory位置,如果需要指定替代位置,可以使用spring.jms.jndi-name屬性,如下例所示:

spring.jms.jndi-name=java:/MyConnectionFactory
32.1.4 發(fā)送消息

Spring的JmsTemplate是自動(dòng)配置的,你可以將其自動(dòng)連接到你自己的bean中,如下面的示例所示:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final JmsTemplate jmsTemplate;

    @Autowired
    public MyBean(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    // ...

}
JmsMessagingTemplate可以以類似的方式注入,如果定義了DestinationResolverMessageConverter bean,則它將自動(dòng)關(guān)聯(lián)到自動(dòng)配置的JmsTemplate
32.1.5 接收消息

當(dāng)出現(xiàn)JMS基礎(chǔ)設(shè)施時(shí),可以使用@JmsListener注解任何bean,以創(chuàng)建監(jiān)聽器端點(diǎn),如果沒有定義JmsListenerContainerFactory,則會(huì)自動(dòng)配置默認(rèn)工廠,如果定義了DestinationResolverMessageConverter bean,則它將自動(dòng)關(guān)聯(lián)到默認(rèn)工廠。

默認(rèn)情況下,默認(rèn)工廠是事務(wù)性的,如果你運(yùn)行的基礎(chǔ)設(shè)施中存在JtaTransactionManager,那么它默認(rèn)與偵聽器容器相關(guān)聯(lián),如果沒有,則啟用sessionTransacted標(biāo)志。在后一個(gè)場(chǎng)景中,你可以通過在監(jiān)聽器方法(或委托)上添加@Transactional,將本地?cái)?shù)據(jù)存儲(chǔ)事務(wù)與接收消息的處理相關(guān)聯(lián),這確保在本地事務(wù)完成之后,傳入消息得到確認(rèn),這還包括發(fā)送在相同JMS會(huì)話上執(zhí)行的響應(yīng)消息。

以下組件在someQueue目的地上創(chuàng)建監(jiān)聽器端點(diǎn):

@Component
public class MyBean {

    @JmsListener(destination = "someQueue")
    public void processMessage(String content) {
        // ...
    }

}
有關(guān)更多細(xì)節(jié),請(qǐng)參見@EnableJms的Javadoc。

如果你需要?jiǎng)?chuàng)建更多的JmsListenerContainerFactory實(shí)例,或者希望重寫默認(rèn)的實(shí)例,Spring Boot提供了一個(gè)DefaultJmsListenerContainerFactoryConfigurer,你可以使用它來初始化一個(gè)DefaultJmsListenerContainerFactory,其設(shè)置與自動(dòng)配置的工廠相同。

例如,下面的示例公開了另一個(gè)使用特定MessageConverter的工廠:

@Configuration
static class JmsConfiguration {

    @Bean
    public DefaultJmsListenerContainerFactory myFactory(
            DefaultJmsListenerContainerFactoryConfigurer configurer) {
        DefaultJmsListenerContainerFactory factory =
                new DefaultJmsListenerContainerFactory();
        configurer.configure(factory, connectionFactory());
        factory.setMessageConverter(myMessageConverter());
        return factory;
    }

}

然后你可以在任何@JmsListener注解的方法中使用工廠,如下所示:

32.2 AMQP

高級(jí)消息隊(duì)列協(xié)議(AMQP)是面向消息的中間件的一種平臺(tái)無關(guān)的、有線級(jí)別的協(xié)議。Spring AMQP項(xiàng)目將核心Spring概念應(yīng)用于基于AMQP的消息傳遞解決方案的開發(fā),Spring Boot為通過RabbitMQ使用AMQP提供了一些方便,包括spring-boot-starter-amqp“啟動(dòng)器”。

32.2.1 RabbitMQ支持

RabbitMQ是一個(gè)輕量級(jí)的、可靠的、可伸縮的、可移植的消息代理,基于AMQP協(xié)議,Spring使用RabbitMQ通過AMQP協(xié)議進(jìn)行通信。

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

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=secret

如果上下文中存在ConnectionNameStrategy bean,那么它將自動(dòng)用于命名由自動(dòng)配置的ConnectionFactory創(chuàng)建的連接。有關(guān)更多受支持的選項(xiàng),請(qǐng)參閱RabbitProperties。

有關(guān)詳細(xì)信息,請(qǐng)參閱RabbitMQ使用的協(xié)議AMQP
32.2.2 發(fā)送消息

Spring的AmqpTemplateAmqpAdmin是自動(dòng)配置的,你可以將它們自動(dòng)連接到你自己的bean中,如下面的示例所示:

import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@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;
    }

    // ...

}
RabbitMessagingTemplate可以以類似的方式注入,如果定義了MessageConverter bean,它會(huì)自動(dòng)關(guān)聯(lián)到自動(dòng)配置的AmqpTemplate。

如果有必要,任何定義為bean的org.springframework.amqp.core.Queue自動(dòng)用于在RabbitMQ實(shí)例上聲明相應(yīng)的隊(duì)列。

重試操作,可以對(duì)AmqpTemplate啟用重試(例如,如果代理連接丟失了),默認(rèn)情況下禁用重試。

32.2.3 接收消息

當(dāng)Rabbit基礎(chǔ)設(shè)施存在時(shí),可以使用@RabbitListener對(duì)任何bean進(jìn)行注解,以創(chuàng)建監(jiān)聽器端點(diǎn),如果沒有定義RabbitListenerContainerFactory,則會(huì)自動(dòng)配置默認(rèn)的SimpleRabbitListenerContainerFactory,你可以使用spring.rabbitmq.listener.type屬性切換到直接容器。如果定義了MessageConverterMessageRecoverer bean,則它將自動(dòng)與默認(rèn)工廠相關(guān)聯(lián)。

以下示例組件在someQueue隊(duì)列上創(chuàng)建監(jiān)聽器端點(diǎn):

@Component
public class MyBean {

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

}
有關(guān)更多細(xì)節(jié),請(qǐng)參見@EnableRabbit的Javadoc。

如果你需要?jiǎng)?chuàng)建更多的RabbitListenerContainerFactory實(shí)例,或者你想要覆蓋缺省值,Spring Boot提供了一個(gè)SimpleRabbitListenerContainerFactoryConfigurer和一個(gè)DirectRabbitListenerContainerFactoryConfigurer,你可以使用它們初始化一個(gè)SimpleRabbitListenerContainerFactory,以及一個(gè)DirectRabbitListenerContainerFactory,其設(shè)置與自動(dòng)配置使用的工廠相同。

選擇哪種容器類型并不重要,這兩個(gè)bean通過自動(dòng)配置公開。

例如,下面的configuration類公開另一個(gè)使用特定MessageConverter的工廠:

@Configuration
static class RabbitConfiguration {

    @Bean
    public SimpleRabbitListenerContainerFactory myFactory(
            SimpleRabbitListenerContainerFactoryConfigurer configurer) {
        SimpleRabbitListenerContainerFactory factory =
                new SimpleRabbitListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        factory.setMessageConverter(myMessageConverter());
        return factory;
    }

}

然后你可以在任何@RabbitListener注解的方法中使用工廠,如下所示:

@Component
public class MyBean {

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

}

你可以啟用重試來處理監(jiān)聽器拋出異常的情況,默認(rèn)情況下,使用RejectAndDontRequeueRecoverer,但是可以定義自己的MessageRecoverer,當(dāng)重試結(jié)束時(shí),消息將被拒絕,如果將代理配置為這樣做,則消息將被刪除或路由到死信交換,默認(rèn)情況下,重試被禁用。

重要
默認(rèn)情況下,如果重試被禁用并且監(jiān)聽器拋出異常,該遞送被無限期地重試,你可以用兩種方式修改此行為:將defaultRequeueRejected屬性設(shè)置為false,以便嘗試零重復(fù)發(fā)送,或者拋出AmqpRejectAndDontRequeueException來通知消息應(yīng)該被拒絕,后者是在啟用重試并達(dá)到最大提交嘗試次數(shù)時(shí)使用的機(jī)制。
32.3 Apache Kafka支持

通過提供spring-kafka項(xiàng)目的自動(dòng)配置來支持Apache Kafka。

Kafka配置由spring.kafka.*中的外部配置屬性控制,例如,你可以在application.properties中聲明以下部分:

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=myGroup
要在啟動(dòng)時(shí)創(chuàng)建主題,請(qǐng)?zhí)砑右粋€(gè)類型NewTopic的bean,如果主題已經(jīng)存在,則忽略bean。

有關(guān)更多受支持的選項(xiàng),請(qǐng)參閱KafkaProperties。

32.3.1 發(fā)送消息

Spring的KafkaTemplate是自動(dòng)配置的,你可以直接在你自己的bean中自動(dòng)連接它,如下面的示例所示:

@Component
public class MyBean {

    private final KafkaTemplate kafkaTemplate;

    @Autowired
    public MyBean(KafkaTemplate kafkaTemplate) {
        this.kafkaTemplate = kafkaTemplate;
    }

    // ...

}
如果定義了一個(gè)RecordMessageConverter bean,它將自動(dòng)關(guān)聯(lián)到自動(dòng)配置的KafkaTemplate
32.3.2 接收消息

當(dāng)存在Apache Kafka基礎(chǔ)設(shè)施時(shí),任何bean都可以使用@KafkaListener進(jìn)行注解,以創(chuàng)建監(jiān)聽器端點(diǎn),如果沒有定義KafkaListenerContainerFactory,默認(rèn)設(shè)置為使用spring.kafka.listener.*中定義的鍵,此外,如果定義了一個(gè)RecordMessageConverter bean,它將自動(dòng)關(guān)聯(lián)到默認(rèn)的工廠。

@Component
public class MyBean {

    @KafkaListener(topics = "someTopic")
    public void processMessage(String content) {
        // ...
    }

}
32.3.3 附加的Kafka屬性

自動(dòng)配置所支持的屬性顯示在附錄A中,通用的應(yīng)用程序?qū)傩浴W⒁?,在大多?shù)情況下,這些屬性(連字符或駝峰式大小寫)直接映射到Apache Kafka *屬性,有關(guān)詳細(xì)信息,請(qǐng)參閱Apache Kafka文檔。

前幾個(gè)屬性同時(shí)適用于生產(chǎn)者和消費(fèi)者,但是如果你希望對(duì)每個(gè)屬性使用不同的值,可以在生產(chǎn)者或消費(fèi)者級(jí)別指定,Apache Kafka設(shè)計(jì)具有高、中或低重要性的屬性,Spring Boot自動(dòng)配置支持所有重要屬性、一些選定的中屬性和低屬性,以及任何沒有默認(rèn)值的屬性。

Kafka支持的屬性中只有一部分是可以通過KafkaProperties類獲得的,如果你希望為生產(chǎn)者或消費(fèi)者配置不受直接支持的其他屬性,請(qǐng)使用以下屬性:

spring.kafka.properties.prop.one=first
spring.kafka.admin.properties.prop.two=second
spring.kafka.consumer.properties.prop.three=third
spring.kafka.producer.properties.prop.four=fourth

這將設(shè)置通用的prop.oneKafka屬性為first(適用于生產(chǎn)者、消費(fèi)者和管理員),prop.two 管理員屬性為second,prop.three消費(fèi)者屬性為third并且prop.four生產(chǎn)者屬性為fourth。

你還可以配置Spring Kafka JsonDeserializer,如下所示:

spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
spring.kafka.consumer.properties.spring.json.value.default.type=com.example.Invoice
spring.kafka.consumer.properties.spring.json.trusted.packages=com.example,org.acme

同樣,可以禁用JsonSerializer在header中發(fā)送類型信息的默認(rèn)行為:

spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
spring.kafka.producer.properties.spring.json.add.type.headers=false
以這種方式設(shè)置的屬性將覆蓋Spring Boot顯式支持的任何配置項(xiàng)。
下一篇:使用RestTemplate調(diào)用REST服務(wù)

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

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

相關(guān)文章

  • Spring Boot 參考指南(目錄)

    摘要:參考指南使你可以輕松地創(chuàng)建可運(yùn)行的獨(dú)立的生產(chǎn)級(jí)的基于的應(yīng)用程序,我們對(duì)平臺(tái)和第三方庫有自己的看法,這樣你就可以以最低限度工作開始了,大多數(shù)應(yīng)用程序都需要很少的配置。文檔本節(jié)簡(jiǎn)要概述了參考文檔,它充當(dāng)文檔其余部分的映射。 Spring Boot 參考指南 Spring Boot使你可以輕松地創(chuàng)建可運(yùn)行的獨(dú)立的、生產(chǎn)級(jí)的基于Spring的應(yīng)用程序,我們對(duì)Spring平臺(tái)和第三方庫有自己的看...

    awesome23 評(píng)論0 收藏0
  • Spring Boot 參考指南Spring Integration)

    摘要:還配置了一些特性,這些特性是由額外的模塊的存在觸發(fā)的。通過監(jiān)控和管理管理擴(kuò)展提供了一種監(jiān)控和管理應(yīng)用程序的標(biāo)準(zhǔn)機(jī)制,默認(rèn)情況下,創(chuàng)建了有一個(gè)的的,并公開了使用注解或注解的任何。有關(guān)更多細(xì)節(jié),請(qǐng)參見類。 40. Spring Integration Spring Boot為使用Spring Integration提供了一些方便,引入spring-boot-starter-integrat...

    liujs 評(píng)論0 收藏0
  • Spring 指南(目錄)

    摘要:指南無論你正在構(gòu)建什么,這些指南都旨在讓你盡快提高工作效率使用團(tuán)隊(duì)推薦的最新項(xiàng)目版本和技術(shù)。使用進(jìn)行消息傳遞了解如何將用作消息代理。安全架構(gòu)的主題指南,這些位如何組合以及它們?nèi)绾闻c交互。使用的主題指南以及如何為應(yīng)用程序創(chuàng)建容器鏡像。 Spring 指南 無論你正在構(gòu)建什么,這些指南都旨在讓你盡快提高工作效率 — 使用Spring團(tuán)隊(duì)推薦的最新Spring項(xiàng)目版本和技術(shù)。 入門指南 這些...

    only_do 評(píng)論0 收藏0
  • Spring Boot 參考指南Spring Boot文檔)

    摘要:關(guān)于文檔參考指南可用如下方式最新的副本可以在中找到。嘗試操作文檔,它們?yōu)樽畛R姷膯栴}提供解決方案。學(xué)習(xí)基礎(chǔ),構(gòu)建在許多其他項(xiàng)目上,網(wǎng)站提供豐富的參考文檔,如果你要從開始,嘗試其中一個(gè)指南。我們對(duì)進(jìn)行監(jiān)視,以解決帶有標(biāo)記的問題。 1. 關(guān)于文檔 Spring Boot 參考指南可用如下方式: HTML PDF EPUB 最新的副本可以在 docs.spring.io/spring-b...

    zhjx922 評(píng)論0 收藏0
  • Spring Boot 參考指南SpringApplication)

    摘要:在創(chuàng)建之前,實(shí)際上觸發(fā)了一些事件,因此不能將偵聽器注冊(cè)為。使用的事件發(fā)布機(jī)制發(fā)送應(yīng)用程序事件,該機(jī)制的一部分確保在子環(huán)境中發(fā)布給偵聽器的事件也會(huì)在任何祖先上下文中被發(fā)布給監(jiān)聽器。 23. SpringApplication SpringApplication類提供了一種方便的方法來引導(dǎo)從main()方法開始的Spring應(yīng)用程序。在許多情況下,你可以委托給靜態(tài)SpringApplica...

    Jochen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<