国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

【spring-jms】DefaultMessageListenerContainer

2019-11-11 02:51:00
字體:
供稿:網(wǎng)友

DefaultMessageListenerContainer 分析

org.sPRingframework.jms.listener.DefaultMessageListenerContainer

通過分析該源碼,了解下 Spring 下消費者如何進行管理。。。

maven

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>4.1.4.RELEASE</version></dependency>

重要步驟

初始化 initialize()默認的線程執(zhí)行器 SimpleAsyncTaskExecutor, createDefaultTaskExecutor()恢復(fù)策略 recoverAfterListenerSetupFailure()

調(diào)用棧

先看 Refer 1 中的一個配置

<!-- 定義消息隊列(Queue),我們監(jiān)聽一個新的隊列,queue2 --><bean id="queueDestination2" class="org.apache.activemq.command.ActiveMQQueue"> <!-- 設(shè)置消息隊列的名字 --> <constructor-arg> <value>queue2</value> </constructor-arg></bean><!-- 配置消息隊列監(jiān)聽者(Queue),代碼下面給出,只有一個onMessage方法 --><bean id="queueMessageListener" class="guo.examples.mq02.queue.QueueMessageListener" /><!-- 消息監(jiān)聽容器(Queue),配置連接工廠,監(jiān)聽的隊列是queue2,監(jiān)聽器是上面定義的監(jiān)聽器 --><bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="queueDestination2" /> <property name="messageListener" ref="queueMessageListener" /></bean>

下面是 messageListener 的調(diào)用棧

AsyncMessageListenerInvoker.run()↓AsyncMessageListenerInvoker.invokeListener()↓AbstractPollingMessageListenerContainer.receiveAndExecute(Object invoker, session session, MessageConsumer consumer)↓AbstractPollingMessageListenerContainer.doReceiveAndExecute(Object invoker, Session session, MessageConsumer consumer, TransactionStatus status)↓AbstractMessageListenerContainer.doExecuteListener(Session session, Message message)# 判斷 isAcceptMessagesWhileStopping & isRunning↓AbstractMessageListenerContainer.invokeListener(Session session, Message message)↓# @param listener 即上面用戶定義的 MessageListener# 由于 SimpleAsyncTaskExecutor 是內(nèi)部類,所以可以訪問 DefaultMessageListenerContainer.messageListenerAbstractMessageListenerContainer.doInvokeListener(MessageListener listener, Message message)↓MessageListener.onMessage(Message message)

SimpleAsyncTaskExecutor 線程執(zhí)行過程

# 創(chuàng)建新線程DefaultMessageListenerContainer.scheduleNewInvoker()↓# 判斷 DefaultMessageListenerContainer 處于 active, running 哪一狀態(tài),進行后面的操作AbstractJmsListeningContainer.rescheduleTaskIfNecessary(Object task)# 如果 running↓DefaultMessageListenerContainer.doRescheduleTask(Object task)# 注意,不是 AbstractJmsListeningContainer.doRescheduleTask(Object task)↓# 然后執(zhí)行上面的 `調(diào)用棧` 過程

Refer

ActiveMQ學(xué)習(xí)筆記(5)——使用Spring JMS收發(fā)消息[1]

SimpleAsyncTaskExecutor 執(zhí)行器


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 吴川市| 焦作市| 邯郸市| 陵水| 汪清县| 紫云| 奇台县| 高平市| 澎湖县| 靖西县| 舒城县| 北海市| 应城市| 九龙县| 重庆市| 咸阳市| 怀柔区| 汾西县| 大宁县| 清镇市| 南充市| 铁力市| 西安市| 南召县| 灵丘县| 曲松县| 卓尼县| 宜都市| 黎平县| 新乐市| 余江县| 遂平县| 邵阳县| 荥经县| 那曲县| 漳州市| 东阳市| 巴青县| 抚顺县| 临安市| 栖霞市|