亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

ActiveMQ5.0實(shí)戰(zhàn)三:使用Spring發(fā)送,消費(fèi)topic和

系統(tǒng) 2180 0
ActiveMQ5.0實(shí)戰(zhàn)一: 安裝配置ActiveMQ5.0
ActiveMQ5.0實(shí)戰(zhàn)二: 基本配置

簡介

實(shí)戰(zhàn)一 , 實(shí)戰(zhàn)二 介紹了ActiveMQ的基本概念和配置方式.

本篇將通過一個(gè)實(shí)例介紹使用spring發(fā)送,消費(fèi)topic, queue類型消息的方法. 不懂topic和queue的google 之.

?

如圖示, TOPIC和QUEUE分別代表一個(gè)topic和一個(gè)queue消息通道.

  1. TopicMessageProducer向topic發(fā)送消息, TopicConsumerA和TopicConsumerB則從topic消費(fèi)消息.
  2. QueueMessageProducer向Queue發(fā)送消息, QueueConsumer從Queue中消費(fèi)消息

Spring整合JMS

就像對orm, web的支持一樣, spring同樣支持jms, 為整合jms到已有的項(xiàng)目提供了很多便利的方法. 本篇主要講實(shí)戰(zhàn), 是所以先從配置開始, spring配置jms基本上需要8個(gè)部分.

  1. ConnectionFactory. 和jms服務(wù)器的連接, 可以是外部的jms server, 也可以使用embedded ActiveMQ Broker.
  2. Destination. 有topic和queue兩種方式.
  3. JmsTemplate. spring提供的jms模板.
  4. MessageConverter. 消息轉(zhuǎn)換器.
  5. MessageProducer. 消息生產(chǎn)者.
  6. MessageConsumer. 消息消費(fèi)者.
  7. MessageListener. 消息監(jiān)聽器
  8. MessageListenerContainer. 消息監(jiān)聽容器

下面以實(shí)例的方式介紹上面8個(gè)部分.

1. ConnectionFactory

    <amq:connectionFactory id="jmsConnectionFactory" brokerURL="vm://localhost" />
  

?brokerURL是指要連接的activeMQ server的地址, activeMQ提供了多種brokerURL, 集體可參見文檔.一般我們使用嵌套的ActiveMQ server. 配置如下, 這個(gè)配置使用消息的存儲(chǔ)機(jī)制, 服務(wù)器重啟也不會(huì)丟失消息.

    <!--  embedded ActiveMQ Broker -->
	<amq:broker useJmx="false" persistent="true">
		<amq:persistenceAdapter>
			<amq:amqPersistenceAdapter directory="d:/amq"/>
		</amq:persistenceAdapter>
		<amq:transportConnectors>
			<amq:transportConnector uri="tcp://localhost:61616" />
                       <amq:transportConnector uri="vm://localhost:0" />
		</amq:transportConnectors>
	</amq:broker>
  

?2. Destination

?在實(shí)例中我們使用了兩種destination

    <!--  ActiveMQ destinations  -->
<!--  使用topic方式-->
<amq:topic name="TOPIC" physicalName="JMS-TEST-TOPIC" />
<!--  使用Queue方式-->
<amq:queue name="QUEUE" physicalName="JMS-TEST-QUEUE" />
  

?3. JmsTemplate

    <!--  Spring JmsTemplate config -->
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory">
			<!--  lets wrap in a pool to avoid creating a connection per send -->
			<bean class="org.springframework.jms.connection.SingleConnectionFactory">
				<property name="targetConnectionFactory" ref="jmsConnectionFactory" />
			</bean>
		</property>
		<!-- custom MessageConverter -->
		<property name="messageConverter" ref="defaultMessageConverter" />
	</bean>
  

? 4. MessageConverter

?? MessageConverter實(shí)現(xiàn)的是org.springframework.jms.support.converter.MessageConverter接口, 提供消息的轉(zhuǎn)換功能. DefaultMessageConverter的實(shí)現(xiàn)見附件.

    <bean id="defaultMessageConverter" class="com.andyao.activemq.DefaultMessageConverter" />
  

? 5. MessageProducer

?? 實(shí)例擁有兩個(gè)消息生產(chǎn)者, 消息生產(chǎn)者都是POJO, 實(shí)現(xiàn)見附件.

    <!-- POJO which send Message uses  Spring JmsTemplate -->
	<bean id="topicMessageProducer" class="com.andyao.activemq.TopicMessageProducer">
		<property name="template" ref="jmsTemplate" />
		<property name="destination" ref="TOPIC" />
	</bean>
	<bean id="queueMessageProducer" class="com.andyao.activemq.QueuMessageProducer">
		<property name="template" ref="jmsTemplate" />
		<property name="destination" ref="QUEUE" />
	</bean>
  

?6. MessageConsumer

?TOPIC通道有兩個(gè)消息消費(fèi)者, QUEUE有一個(gè)消息消費(fèi)者

    <!--  Message Driven POJO (MDP) -->
    <!-- consumer1 for topic a -->
    <bean id="topicConsumerA" class="com.andyao.activemq.TopicConsumerA" />
    <!-- consumer2 for topic a -->
    <bean id="topicConsumerB" class="com.andyao.activemq.TopicConsumerB" />
    <!-- consumer for queue -->
    <bean id="queueConsumer" class="com.andyao.activemq.QueueConsumer" />
  

? 7. MessageListener

每一個(gè)消息消費(fèi)者都對應(yīng)一個(gè)MessageListener

    <bean id="topicListenerA" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
		<constructor-arg ref="topicConsumerA" />
		<!--  may be other method -->
		<property name="defaultListenerMethod" value="receive" />
		<!-- custom MessageConverter define -->
		<property name="messageConverter" ref="defaultMessageConverter" />
	</bean>

	<bean id="topicListenerB" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
		<constructor-arg ref="topicConsumerB" />
		<!--  may be other method -->
		<property name="defaultListenerMethod" value="receive" />
		<!-- custom MessageConverter define -->
		<property name="messageConverter" ref="defaultMessageConverter" />
	</bean>

    <bean id="queueListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
		<constructor-arg ref="queueConsumer" />
		<!--  may be other method -->
		<property name="defaultListenerMethod" value="receive" />
		<!-- custom MessageConverter define -->
		<property name="messageConverter" ref="defaultMessageConverter" />
	</bean>
  

?8. MessageListenerContainer

?有幾個(gè)MessageListener既有幾個(gè)MessageListenerContainer

    <bean id="topicListenerContainerA" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<property name="connectionFactory" ref="jmsConnectionFactory" />
		<property name="destination" ref="TOPIC" />
		<property name="messageListener" ref="topicListenerA" />
	</bean>

    <bean id="topicListenerContainerB" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<property name="connectionFactory" ref="jmsConnectionFactory" />
		<property name="destination" ref="TOPIC" />
		<property name="messageListener" ref="topicListenerB" />
	</bean>
    
    <bean id="queueListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<property name="connectionFactory" ref="jmsConnectionFactory" />
		<property name="destination" ref="QUEUE" />
		<property name="messageListener" ref="queueListener" />
	</bean>
  

? Summary

寫spring配置文件的時(shí)候, 要把MessageProducer, MessageConsumer,MessageListener,MessageListenerContainer幾個(gè)地方弄清楚:

  1. 可以有一個(gè)或者多個(gè)消息生產(chǎn)者向同一個(gè)destination發(fā)送消息.
  2. queue類型的只能有一個(gè)消息消費(fèi)者.
  3. topic類型的可以有多個(gè)消息消費(fèi)者.
  4. 每個(gè)消費(fèi)者對應(yīng)一個(gè)MessageListener和一個(gè)MessageListenerContainer.

?

?

?

?

ActiveMQ5.0實(shí)戰(zhàn)三:使用Spring發(fā)送,消費(fèi)topic和queue消息


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩欧美亚洲综合一区二区 | 中文字幕精品在线视频 | 久久久噜噜噜久久网 | 国产东北露脸对白 | 久揄揄鲁一二三四区高清在线 | 婷婷久月 | 精品一级毛片 | 亚洲图片综合网 | 暗香影院午夜国产精品 | 国产综合精品一区二区 | 黑人巨大精品战中国美女 | 国产午夜精品一二区理论影院 | a网站免费 | 亚洲综合色色图 | 色久天 | 九九九热在线精品免费全部 | 亚洲国产一区在线二区三区 | 午夜伦情电午夜伦情影院 | 婷婷性| 国产区精品一区二区不卡中文 | 五月婷婷在线观看 | 日韩婷婷| 成人在线免费视频 | 欧美中文字幕一二三四区 | 国产成人a一区二区 | 国产福利视频一区二区三区四区 | 久久高清影院 | 在线观看国产一区亚洲bd | 久久久麻豆| 亚洲欧洲综合网 | 91视频18| 玖玖在线精品 | 精品视频在线观看免费 | 韩国精品一区二区久久 | 色爱视频| 成人网18免费视频 | 98色花堂国产精品首页 | 日日摸夜夜夜夜夜添 | 精品久久久久久免费影院 | 最新国产三级久久 | 欧美成人日韩 |