activeMQ開發筆記,activeMQy與Spring框架整合
MQ開發其實很簡單:
本文以最新版本的ActiveMQ為例子,介紹了安裝和開發第一個MQ程式。
準備環境,JDK8,activeMQ 5.14.3,WIN7測試環境,Spring 4.3.4
首先是安裝 :
安裝MQ非常簡單,下載連結:https://activemq.apache.org/download.html
如果,系統的java環境沒有配置錯誤,執行D:\greenPro\mq514\bin\win64下的
activemq.bat
即可啟動成功。
啟動完成後,可以本地訪問mq控制檯:
http://localhost:8161/
預設使用者名稱和密碼:
admin/admin
點選:Manage ActiveMQ broker就可以進入佇列配置介面:
這裡我定義了一個自己的佇列myQuery1,便於後面開發和測試:
為了簡化原來程式,做了以下改進,去掉了無用的郵件傳送類和執行緒池,將客戶端和服務端程式碼整合在一起了。
修改了pom.xml更新為最新的依賴包,去掉了一些無用的包。
最新原始碼上傳於我的空間:
如果要只發送不接收,則可以註釋掉spring-mq.xml最後幾行,禁止ConsumerSessionAwareMessageListener啟動,測試訊息堆積於佇列中的情況。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd"
default-autowire="byName" default-lazy-init="false">
<!-- 基於Dubbo的分散式系統架構視訊教程,吳水成,
<!-- 真正可以產生Connection的ConnectionFactory,由對應的 JMS服務廠商提供 -->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!-- ActiveMQ服務地址 -->
<property name="brokerURL" value="${mq.brokerURL}" />
<property name="userName" value="${mq.userName}"></property>
<property name="password" value="${mq.password}"></property>
</bean>
<!--
ActiveMQ為我們提供了一個PooledConnectionFactory,通過往裡面注入一個ActiveMQConnectionFactory
可以用來將Connection、Session和MessageProducer池化,這樣可以大大的減少我們的資源消耗。
要依賴於 activemq-pool包
-->
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="connectionFactory" ref="targetConnectionFactory" />
<property name="maxConnections" value="${mq.pool.maxConnections}" />
</bean>
<!-- Spring用於管理真正的ConnectionFactory的ConnectionFactory -->
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<!-- 目標ConnectionFactory對應真實的可以產生JMS Connection的ConnectionFactory -->
<property name="targetConnectionFactory" ref="pooledConnectionFactory" />
</bean>
<!-- Spring提供的JMS工具類,它可以進行訊息傳送、接收等 -->
<!-- 佇列模板 -->
<bean id="activeMqJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<!-- 這個connectionFactory對應的是我們定義的Spring提供的那個ConnectionFactory物件 -->
<property name="connectionFactory" ref="connectionFactory"/>
<property name="defaultDestinationName" value="${queueName}"></property>
</bean>
<!--這個是sessionAwareQueue目的地 -->
<bean id="sessionAwareQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg>
<value>${queueName}</value>
</constructor-arg>
</bean>
<!-- 可以獲取session的MessageListener -->
<!-- <bean id="consumerSessionAwareMessageListener" class="wusc.edu.demo.mqtest.listener.ConsumerSessionAwareMessageListener"></bean> -->
<!-- <bean id="sessionAwareListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> -->
<!-- <property name="connectionFactory" ref="connectionFactory" /> -->
<!-- <property name="destination" ref="sessionAwareQueue" /> -->
<!-- <property name="messageListener" ref="consumerSessionAwareMessageListener" /> -->
<!-- </bean> -->
</beans>
紅字部分為註釋掉的內容。
反覆執行MQProducerTest,可以不斷髮訊息,佇列堆積後,可以從管理控制檯看到:
需要接收訊息,將紅色註釋開啟,再次執行MQProducerTest,就可以了。從控制檯看到輸出內容如下:
一月 16, 2017 3:58:24 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
資訊: Refreshing org[email protected]7a07c5b4: startup date [Mon Jan 16 15:58:24 CST 2017]; root of context hierarchy
一月 16, 2017 3:58:24 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
資訊: Loading XML bean definitions from class path resource [spring/spring-context.xml]
一月 16, 2017 3:58:24 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
資訊: Loading XML bean definitions from class path resource [spring/spring-mq.xml]
一月 16, 2017 3:58:24 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory registerBeanDefinition
資訊: Overriding bean definition for bean 'consumerSessionAwareMessageListener' with a different definition: replacing [Generic bean: class [wusc.edu.demo.mqtest.listener.ConsumerSessionAwareMessageListener]; scope=singleton; abstract=false; lazyInit=false; autowireMode=1;
dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [D:\worksapce2MVN\MyJava\target\classes\wusc\edu\demo\mqtest\listener\ConsumerSessionAwareMessageListener.class]]
with [Generic bean: class [wusc.edu.demo.mqtest.listener.ConsumerSessionAwareMessageListener]; scope=; abstract=false; lazyInit=false; autowireMode=1; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null;
destroyMethodName=null; defined in class path resource [spring/spring-mq.xml]]
一月 16, 2017 3:58:24 下午 org.springframework.context.support.PropertySourcesPlaceholderConfigurer loadProperties
資訊: Loading properties file from class path resource [mq.properties]
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
一月 16, 2017 3:58:25 下午 org.springframework.context.support.DefaultLifecycleProcessor start
資訊: Starting beans in phase 2147483647
一月 16, 2017 3:58:25 下午 org.springframework.jms.connection.SingleConnectionFactory initConnection
資訊: Established shared JMS Connection: PooledConnection { ConnectionPool[ActiveMQConnection {id=ID:zhouxj-PC-58711-1484553505143-1:1,clientId=null,started=false}] }
一月 16, 2017 3:58:25 下午 org.springframework.context.support.DefaultLifecycleProcessor start
資訊: Starting beans in phase 2147483647
==>receive message:{"content":"通過ActiveMQ非同步傳送郵件!0.05456176353420983","subject":"ActiveMQ測試34234","to":"[email protected]"}
一月 16, 2017 3:58:25 下午 wusc.edu.demo.mqtest.listener.ConsumerSessionAwareMessageListener onMessage
資訊: ==>receive message:{"content":"通過ActiveMQ非同步傳送郵件!0.05456176353420983","subject":"ActiveMQ測試34234","to":"[email protected]"}
Reciver2:通過ActiveMQ非同步傳送郵件!0.05456176353420983
一月 16, 2017 3:58:25 下午 wusc.edu.demo.mqtest.listener.ConsumerSessionAwareMessageListener onMessage
資訊: ==>receive message:{"content":"通過ActiveMQ非同步傳送郵件!0.25300105506652026","subject":"ActiveMQ測試34234","to":"[email protected]"}
一月 16, 2017 3:58:25 下午 wusc.edu.demo.mqtest.listener.ConsumerSessionAwareMessageListener onMessage
資訊: ==>receive message:{"content":"通過ActiveMQ非同步傳送郵件!0.33069073442419183","subject":"ActiveMQ測試34234","to":"[email protected]"}
一月 16, 2017 3:58:25 下午 wusc.edu.demo.mqtest.listener.ConsumerSessionAwareMessageListener onMessage
資訊: ==>receive message:{"content":"通過ActiveMQ非同步傳送郵件!0.9560044771945856","subject":"ActiveMQ測試34234","to":"[email protected]"}
一月 16, 2017 3:58:25 下午 wusc.edu.demo.mqtest.listener.ConsumerSessionAwareMessageListener onMessage
資訊: ==>receive message:{"content":"通過ActiveMQ非同步傳送郵件!0.1364193001852111","subject":"ActiveMQ測試34234","to":"[email protected]"}
一月 16, 2017 3:58:25 下午 wusc.edu.demo.mqtest.listener.ConsumerSessionAwareMessageListener onMessage
資訊: ==>receive message:{"content":"通過ActiveMQ非同步傳送郵件!0.7340194987950655","subject":"ActiveMQ測試34234","to":"[email protected]"}
send:通過ActiveMQ非同步傳送郵件!0.7340194987950655
==>receive message:{"content":"通過ActiveMQ非同步傳送郵件!0.25300105506652026","subject":"ActiveMQ測試34234","to":"[email protected]"}
Reciver2:通過ActiveMQ非同步傳送郵件!0.25300105506652026
==>receive message:{"content":"通過ActiveMQ非同步傳送郵件!0.33069073442419183","subject":"ActiveMQ測試34234","to":"[email protected]"}
Reciver2:通過ActiveMQ非同步傳送郵件!0.33069073442419183
==>receive message:{"content":"通過ActiveMQ非同步傳送郵件!0.9560044771945856","subject":"ActiveMQ測試34234","to":"[email protected]"}
Reciver2:通過ActiveMQ非同步傳送郵件!0.9560044771945856
==>receive message:{"content":"通過ActiveMQ非同步傳送郵件!0.1364193001852111","subject":"ActiveMQ測試34234","to":"[email protected]"}
Reciver2:通過ActiveMQ非同步傳送郵件!0.1364193001852111
==>receive message:{"content":"通過ActiveMQ非同步傳送郵件!0.7340194987950655","subject":"ActiveMQ測試34234","to":"[email protected]"}
Reciver2:通過ActiveMQ非同步傳送郵件!0.7340194987950655
一月 16, 2017 3:58:25 下午 org.springframework.context.support.DefaultLifecycleProcessor stop
資訊: Stopping beans in phase 2147483647
一月 16, 2017 3:58:26 下午 wusc.edu.demo.mqtest.MQProducerTest main
資訊: ===>System.exit
附件Maven依賴包截圖:
相關推薦
activeMQ開發筆記,activeMQy與Spring框架整合
MQ開發其實很簡單: 本文以最新版本的ActiveMQ為例子,介紹了安裝和開發第一個MQ程式。 準備環境,JDK8,activeMQ 5.14.3,WIN7測試環境,Spring 4.3.4 首先是安裝 : 安裝MQ非常簡單,下載連結:https://activemq
javaEE Freemarker模板引擎,Freemarker與Spring的整合,生成靜態頁面
applicationContext.xml(Spring配置檔案): <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/sche
activeMQ訊息中介軟體的與spring的整合
activemq是基於jetty服務容器的,可在原始碼中發現。 1.maven依賴jar <!-- ActiveMQ --> <dependency> <groupId>org.apache.activemq</group
JavaEE MyBatis與Spring的整合——基於mapper介面方式開發(教材學習筆記)
在MyBatis與Spring的整合開發中雖然可以通過傳統的DAO開發方式,但是採用DAO方式會產生大量的重複程式碼,因此學習另外一種程式設計方式就很重要了,即Mapper介面程式設計(本章程式碼是基於上一篇部落格的點這裡) 一、基於MapperFactoryBean的整合 Mapper
javaEE Mybatis,Mybatis與Spring整合之傳統Dao開發(不推薦)。SqlSessionDaoSupport(Mybatis提供的Dao層基類)
src/applicationContext.xml(Spring核心配置檔案): <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.or
使用AspectJ需要匯入Spring AOP和Aspectj相關jar包,新版本Spring框架,建議使用AspectJ方式開發AOP
Spring JDBC是Spring提供的持久層技術簡化JDBC API開發,使用上和Apache公司的DBUtils框架非常類似匯入必要jar包到工程目錄匯入Spring核心開發包到建立工程spring-beans-3.2.0.RELEASE.jarspring-conte
Android源碼開發筆記 軟鍵盤與內置物理鍵盤共存以及外接藍牙鍵盤不共存邏輯
icon eva boolean 功能實現 小鍵盤 nokey top apps 需求 需求1: android設備自帶九鍵的小鍵盤,此時小鍵盤被識別為HW Keyboard,默認與軟鍵盤不能共存,需要使軟鍵盤與物理鍵盤共存。 實現: 在網上找的別人總結的Android5.
架構師入門:Spring Cloud系列,Hystrix與Eureka的整合
和Ribbon等元件一樣,在專案中,Hystrix一般不會單獨出現,而是會和Eureka等元件配套出現。在Hystrix和Eureka整合後的框架裡,一般會用到Hystrix的斷路器以及合併請求等特性,而在Web框架裡,大多會有專門的快取元件,所以不怎麼會用到Hystri
一種古老的技術:axis1.4操作WebService,實現與Spring整合
這是pom檔案中需要的axis需要的依賴 <dependency> <groupId>org.springframework</groupId> <artifactId>spr
架構師系列文:通過Spring Cloud元件Hystrix合併請求 架構師入門:Spring Cloud系列,Hystrix與Eureka的整合
在前文裡,我們講述了通過Hystrix進行容錯處理的方式,這裡我們將講述通過Hystrix合併請求的方式 哪怕一個URL請求呼叫的功能再簡單,Web應用服務都至少會開啟一個執行緒來提供服務,換句話說,有效降低URL請求數能很大程度上降低系統的負載。通過
複習電商筆記-35-常見問題、RedisCluster和Spring框架整合
常見問題 another app is currently holding the yum…. 直接 ps –ef|grep yum 殺掉就行了 ERR Slot 5798 is already busy Ca
activemq 學習系列(五) activemq 與 spring boot 整合
-a pool autowire mapping pri control ESS fin tid activemq 與 spring boot 整合 1、添加依賴 <dependency> <groupId>
Spring與Struts框架整合
out user list oid work vat ack default plugin Spring,負責對象對象創建 Struts, 用Action處理請求 Spring與Struts框架整合, 關鍵點:讓struts框架action對象
javaEE Mybatis,Mybatis與Spring整合之動態代理方式(推薦),自動建立Dao層實現類
src/applicationContext.xml(Spring核心配置檔案): <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.or
訊息中介軟體系列六,rabbit與spring整合實戰
本專案是rabbit和spring整合的實戰學習專案,模擬電商下單和庫存管理的過程,看過前面幾篇部落格的同學,相信這篇部落格對你不會再難了。一些和本章學習不太相關的內容不會做過多說明,需要的朋友可以下載原始碼自己檢視執行:rabbit與spring整合實戰原始
3 Spring框架整合WEB 1(與struts2整合)
使用spring與struts2整合 web.xml的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-in
Spring CredHub 2.0.0 釋出,提升與 Spring 兼用型
Spring CredHub 2.0.0釋出,主要更新了以下功能: 支援 CredHub 1.x 和 2.x 的伺服器版本,以及 CreHub v1 和 v2 API。 提升 CredHub 與 Spring Framework 5.1 S和 Spring Boot
JavaBean,POJO的簡單理解 ,JavaBean與Spring中bean的區別
本文是我查閱多篇部落格總結下來的,不過有些概念可能理解還不夠準確,歡迎大家糾錯改正。 Java的一個特性,資料與行為相分離。資料就是成員變數,行為就是setter和getter方法 JavaBean是Java中開發的可以跨平臺的重要元件,在JSP中常用來 封裝業務邏輯
Spring Cloud微服務系列文,Hystrix與Eureka的整合
和Ribbon等元件一樣,在專案中,Hystrix一般不會單獨出現,而是會和Eureka等元件配套出現。在Hystrix和Eureka整合後的框架裡,一般會用到Hystrix的斷路器以及合併請求等特性,而在Web框架裡,大多會有專門的快取元件,所以不怎麼會用到Hystrix的快取特性。 1 準備
四:redis主從讀寫分離,哨兵模式與spring的整合
本篇主要介紹redis實現主從讀寫分離,採用哨兵模式後如何與spring整合在專案中進行開發 主要依賴的jar包,其他專案中實際依賴的jar包很多這裡就不一一列舉了: jar包依賴 <dependency> <grou