摘要:異步發(fā)送不會在受到的確認之前一直阻塞方法。方法成功返回意味著所有的持久消息都以被寫到二級存儲中。總結默認情況,非持久化消息事務內的消息均采用異步發(fā)送對于持久化消息采用同步發(fā)送。
ActiveMq事務
ActiveMq事務的作用就是在發(fā)送、接收處理消息過程中,如果出現(xiàn)問題,可以回滾。
ActiveMq異步/同步發(fā)送以下摘抄自https://blog.csdn.net/songhai...
同步發(fā)送:
消息生產者使用持久(persistent)傳遞模式發(fā)送消息的時候,Producer.send() 方法會被阻塞,直到 broker 發(fā)送一個確認消息給生產者(ProducerAck),這個確認消息暗示broker已經(jīng)成功接收到消息并把消息保存到二級存儲中。
異步發(fā)送
如果應用程序能夠容忍一些消息的丟失,那么可以使用異步發(fā)送。異步發(fā)送不會在受到 broker 的確認之前一直阻塞 Producer.send 方法。
當發(fā)送方法在一個事務上下文中時,被阻塞的是 commit 方法而不是 send 方法。commit 方法成功返回意味著所有的持久消息都以被寫到二級存儲中。
想要使用異步,在brokerURL中增加 jms.alwaysSyncSend=false&jms.useAsyncSend=true
如果設置了alwaysSyncSend=true系統(tǒng)將會忽略useAsyncSend設置的值都采用同步
???? 1) 當alwaysSyncSend=false時,“NON_PERSISTENT”(非持久化)、事務中的消息將使用“異步發(fā)送”
???? 2) 當alwaysSyncSend=false時,如果指定了useAsyncSend=true,“PERSISTENT”類型的消息使用異步發(fā)送。如果useAsyncSend=false,“PERSISTENT”類型的消息使用同步發(fā)送。
總結:默認情況(alwaysSyncSend=false,useAsyncSend=false),非持久化消息、事務內的消息均采用異步發(fā)送;對于持久化消息采用同步發(fā)送。
?? jms.sendTimeout:發(fā)送超時時間,默認等于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);
1.如果在配置中使用了連接池,那么SpringBoot默認會使用PooledConnectionFactory,ActiveMQConnectionFactory的useAsyncSend默認會true。使用連接池配置如下
activemq: in-memory: true broker-url: tcp://127.0.0.1:61616 pool: enabled: true max-connections: 5 user: password:
2.修改JmsTemplate 默認參數(shù)
JmsTemplate template = new JmsTemplate(pooledConnectionFactory); //設備為true,deliveryMode, priority, timeToLive等設置才會起作用 template.setExplicitQosEnabled(true); //設為非持久化模式 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需要調優(yōu),可以自己生PooledConnectionFactory調優(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; // }
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72773.html
摘要:本文主要講述消息服務在中的使用。所以需要一個監(jiān)聽容器工廠的概念,即接口,它會引用上面創(chuàng)建好的與的連接工廠,由它來負責接收消息以及將消息分發(fā)給指定的監(jiān)聽器。為了消費消息,訂閱者必須保持運行的狀態(tài)。 JMS 在 SpringBoot 中的使用 摘要:本文屬于原創(chuàng),歡迎轉載,轉載請保留出處:https://github.com/jasonGeng88/blog> 本文所有服務均采用doc...
摘要:介紹它是出品,最流行的,能力強勁的開源消息總線。是一個完全支持和規(guī)范的實現(xiàn),盡管規(guī)范出臺已經(jīng)是很久的事情了,但是在當今的應用中間仍然扮演著特殊的地位。相關文章整合使用整合使用關注我轉載請務必注明原創(chuàng)地址為安裝同之前一樣,直接在里面玩吧。 showImg(https://segmentfault.com/img/remote/1460000012996066?w=1920&h=1281)...
摘要:時間年月日星期六說明本文部分內容均來自慕課網(wǎng)。這個時候,可以啟動多臺積分系統(tǒng),來同時消費這個消息中間件里面的登錄消息,達到橫向擴展的作用。 時間:2017年07月22日星期六說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程安排 Java...
摘要:學習消息隊列的使用之前,我們先來搞清。是操作消息的接口。消息生產者由創(chuàng)建,并用于將消息發(fā)送到。接收消息打印結果這是接收到的消息消費者啟動。。。。 通過上一篇文章 《消息隊列深入解析》,我們已經(jīng)消息隊列是什么、使用消息隊列的好處以及常見消息隊列的簡單介紹。 這一篇文章,主要帶大家詳細了解一下消息隊列ActiveMQ的使用。 學習消息隊列ActiveMQ的使用之前,我們先來搞清JMS。 J...
摘要:消費者,監(jiān)聽生產者往指定目的地發(fā)送消息后,接下來就是消費者對指定目的地的消息進行消費了。它不會動態(tài)的適應運行時需要和參與外部的事務管理。它很好的平衡了對提供者要求低先進功能如事務參與和兼容環(huán)境。 深入淺出 JMS(七) - ActiveMQ 與 Spring 整合 一、與spring整合實現(xiàn)ptp的同步接收消息 (1)config.properties ## ActiveMQ Conf...
閱讀 1293·2021-11-16 11:44
閱讀 3759·2021-10-09 10:01
閱讀 1745·2021-09-24 10:31
閱讀 3833·2021-09-04 16:41
閱讀 2510·2021-08-09 13:45
閱讀 1210·2019-08-30 14:08
閱讀 1776·2019-08-29 18:32
閱讀 1640·2019-08-26 12:12