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

資訊專欄INFORMATION COLUMN

SpringBoot ActiveMq JmsTemplate 異步發(fā)送、非持久化

AprilJ / 2080人閱讀

摘要:異步發(fā)送不會在受到的確認(rèn)之前一直阻塞方法。方法成功返回意味著所有的持久消息都以被寫到二級存儲中??偨Y(jié)默認(rèn)情況,非持久化消息事務(wù)內(nèi)的消息均采用異步發(fā)送對于持久化消息采用同步發(fā)送。

ActiveMq事務(wù)

ActiveMq事務(wù)的作用就是在發(fā)送、接收處理消息過程中,如果出現(xiàn)問題,可以回滾。

ActiveMq異步/同步發(fā)送

以下摘抄自https://blog.csdn.net/songhai...

同步發(fā)送:
消息生產(chǎn)者使用持久(persistent)傳遞模式發(fā)送消息的時候,Producer.send() 方法會被阻塞,直到 broker 發(fā)送一個確認(rèn)消息給生產(chǎn)者(ProducerAck),這個確認(rèn)消息暗示broker已經(jīng)成功接收到消息并把消息保存到二級存儲中。

異步發(fā)送
如果應(yīng)用程序能夠容忍一些消息的丟失,那么可以使用異步發(fā)送。異步發(fā)送不會在受到 broker 的確認(rèn)之前一直阻塞 Producer.send 方法。

當(dāng)發(fā)送方法在一個事務(wù)上下文中時,被阻塞的是 commit 方法而不是 send 方法。commit 方法成功返回意味著所有的持久消息都以被寫到二級存儲中。

想要使用異步,在brokerURL中增加 jms.alwaysSyncSend=false&jms.useAsyncSend=true
如果設(shè)置了alwaysSyncSend=true系統(tǒng)將會忽略useAsyncSend設(shè)置的值都采用同步
???? 1) 當(dāng)alwaysSyncSend=false時,“NON_PERSISTENT”(非持久化)、事務(wù)中的消息將使用“異步發(fā)送”
???? 2) 當(dāng)alwaysSyncSend=false時,如果指定了useAsyncSend=true,“PERSISTENT”類型的消息使用異步發(fā)送。如果useAsyncSend=false,“PERSISTENT”類型的消息使用同步發(fā)送。
總結(jié):默認(rèn)情況(alwaysSyncSend=false,useAsyncSend=false),非持久化消息、事務(wù)內(nèi)的消息均采用異步發(fā)送;對于持久化消息采用同步發(fā)送。
?? jms.sendTimeout:發(fā)送超時時間,默認(rèn)等于0,如果jms.sendTimeout>0將會忽略(alwaysSyncSend、useAsyncSend、消息是否持久化)所有的消息都是用同步發(fā)送!

官方連接:http://activemq.apache.org/as...

配置使用異步發(fā)送方式

1.在連接上配置
cf = new ActiveMQConnectionFactory("tcp://locahost:61616?jms.useAsyncSend=true");

2.通過ConnectionFactory
((ActiveMQConnectionFactory)connectionFactory).setUseAsyncSend(true);

3.通過connection
((ActiveMQConnection)connection).setUseAsyncSend(true);

SpringBoot JMS實現(xiàn)異步發(fā)送

1.如果在配置中使用了連接池,那么SpringBoot默認(rèn)會使用PooledConnectionFactory,ActiveMQConnectionFactory的useAsyncSend默認(rèn)會true。使用連接池配置如下

activemq:
    in-memory: true
    broker-url: tcp://127.0.0.1:61616
    pool:
      enabled: true
      max-connections: 5
    user:
    password:

2.修改JmsTemplate 默認(rèn)參數(shù)

JmsTemplate template = new JmsTemplate(pooledConnectionFactory);
//設(shè)備為true,deliveryMode, priority, timeToLive等設(shè)置才會起作用
template.setExplicitQosEnabled(true);
//設(shè)為非持久化模式
template.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

完整代碼如下:

@Slf4j
@Configuration
public class ActiveConfig {
    /**
     * 配置用于異步發(fā)送的非持久化JmsTemplate
     */ 
    @Autowired
    @Bean
    @Primary
    public JmsTemplate asynJmsTemplate(PooledConnectionFactory pooledConnectionFactory) {
        JmsTemplate template = new JmsTemplate(pooledConnectionFactory);
        template.setExplicitQosEnabled(true);
        template.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        log.info("jsmtemplate ------------->sessionTransacted:{}",template.isSessionTransacted());
        log.info("jsmtemplate ------------->ExplicitQosEnabled:{}",template.isExplicitQosEnabled());
        return template;
    }

    /**
     * 配置用于同步發(fā)送的持久化JmsTemplate
     */  
    @Autowired
    @Bean
    public JmsTemplate synJmsTemplate(PooledConnectionFactory pooledConnectionFactory) {
        JmsTemplate template = new JmsTemplate(pooledConnectionFactory);
        log.info("jsmtemplate ------------->sessionTransacted:{}",template.isSessionTransacted());
        log.info("jsmtemplate ------------->ExplicitQosEnabled:{}",template.isExplicitQosEnabled());
        return template;
    }

//如果對于SpringBoot自動生成的PooledConnectionFactory需要調(diào)優(yōu),可以自己生PooledConnectionFactory調(diào)優(yōu)參數(shù)
//    private PooledConnectionFactory getPooledConnectionFactory(String userName,String password,String brokerURL) {
//        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(userName,password,brokerURL);
//        ActiveMQPrefetchPolicy activeMQPrefetchPolicy = new ActiveMQPrefetchPolicy();
//        activeMQConnectionFactory.setPrefetchPolicy(activeMQPrefetchPolicy);
//        PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory(activeMQConnectionFactory);
//        pooledConnectionFactory.setMaxConnections(5);
//        return pooledConnectionFactory;
//    }

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

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

相關(guān)文章

  • JMS 在 SpringBoot 中的使用

    摘要:本文主要講述消息服務(wù)在中的使用。所以需要一個監(jiān)聽容器工廠的概念,即接口,它會引用上面創(chuàng)建好的與的連接工廠,由它來負(fù)責(zé)接收消息以及將消息分發(fā)給指定的監(jiān)聽器。為了消費消息,訂閱者必須保持運行的狀態(tài)。 JMS 在 SpringBoot 中的使用 摘要:本文屬于原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請保留出處:https://github.com/jasonGeng88/blog> 本文所有服務(wù)均采用doc...

    Michael_Ding 評論0 收藏0
  • SpringBoot ActiveMQ 整合使用

    摘要:介紹它是出品,最流行的,能力強(qiáng)勁的開源消息總線。是一個完全支持和規(guī)范的實現(xiàn),盡管規(guī)范出臺已經(jīng)是很久的事情了,但是在當(dāng)今的應(yīng)用中間仍然扮演著特殊的地位。相關(guān)文章整合使用整合使用關(guān)注我轉(zhuǎn)載請務(wù)必注明原創(chuàng)地址為安裝同之前一樣,直接在里面玩吧。 showImg(https://segmentfault.com/img/remote/1460000012996066?w=1920&h=1281)...

    gaara 評論0 收藏0
  • 慕課網(wǎng)_《Java消息中間件》學(xué)習(xí)總結(jié)

    摘要:時間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。這個時候,可以啟動多臺積分系統(tǒng),來同時消費這個消息中間件里面的登錄消息,達(dá)到橫向擴(kuò)展的作用。 時間:2017年07月22日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程安排 Java...

    twohappy 評論0 收藏0
  • 消息隊列ActiveMQ的使用詳解

    摘要:學(xué)習(xí)消息隊列的使用之前,我們先來搞清。是操作消息的接口。消息生產(chǎn)者由創(chuàng)建,并用于將消息發(fā)送到。接收消息打印結(jié)果這是接收到的消息消費者啟動。。。。 通過上一篇文章 《消息隊列深入解析》,我們已經(jīng)消息隊列是什么、使用消息隊列的好處以及常見消息隊列的簡單介紹。 這一篇文章,主要帶大家詳細(xì)了解一下消息隊列ActiveMQ的使用。 學(xué)習(xí)消息隊列ActiveMQ的使用之前,我們先來搞清JMS。 J...

    niceforbear 評論0 收藏0
  • 深入淺出 JMS(七) - ActiveMQ 與 Spring 整合

    摘要:消費者,監(jiān)聽生產(chǎn)者往指定目的地發(fā)送消息后,接下來就是消費者對指定目的地的消息進(jìn)行消費了。它不會動態(tài)的適應(yīng)運行時需要和參與外部的事務(wù)管理。它很好的平衡了對提供者要求低先進(jìn)功能如事務(wù)參與和兼容環(huán)境。 深入淺出 JMS(七) - ActiveMQ 與 Spring 整合 一、與spring整合實現(xiàn)ptp的同步接收消息 (1)config.properties ## ActiveMQ Conf...

    NoraXie 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<