java消息隊列ActiveMQ的簡單使用

activeMQ

是學習java消息隊列的實現(xiàn)項目召烂,使用jfinal +jfinal-ext + activeMQ + quartz快速構建。

1.消息隊列

消息隊列娃承,其實是一種基于數(shù)據(jù)結構實現(xiàn)的服務奏夫。而java語言中的實現(xiàn),有apache的activeMQ历筝,比較主流酗昼。

2.環(huán)境搭建

首先去apache的官網(wǎng)下載apache-activeMQ-...-.zip的包,解壓后梳猪,運行bin中的activeMQ服務仔雷。在瀏覽器中輸入http://localhost:8186/admin,出現(xiàn)登陸界面輸入admin/admin登陸即可。

然后創(chuàng)建一個FirstQueue隊列(給后面的實例提供服務)舔示。

3.activeMQ原始操作

記住activeMQ服務一定要一直開啟碟婆,發(fā)送者和接收者都會通過tcp協(xié)議去鏈接服務器,以取得消息隊列中的消息體惕稻。如下圖是我的服務器cmd截圖:

3.1.首先建立發(fā)送者Sender.java

packagecom.mg.demo;importjavax.jms.Connection;importjavax.jms.ConnectionFactory;importjavax.jms.DeliveryMode;importjavax.jms.Destination;importjavax.jms.MessageProducer;importjavax.jms.Session;importjavax.jms.TextMessage;importorg.apache.activemq.ActiveMQConnection;importorg.apache.activemq.ActiveMQConnectionFactory;publicclassSender {privatestaticfinalintSEND_NUMBER =5;publicstaticvoidmain(String[] args) {// ConnectionFactory :連接工廠竖共,JMS 用它創(chuàng)建連接ConnectionFactory connectionFactory;// Connection :JMS 客戶端到JMS// Provider 的連接Connection connection =null;// Session: 一個發(fā)送或接收消息的線程Session session;// Destination :消息的目的地;消息發(fā)送給誰.Destination destination;// MessageProducer:消息發(fā)送者MessageProducer producer;// TextMessage message;// 構造ConnectionFactory實例對象,此處采用ActiveMq的實現(xiàn)jarconnectionFactory =newActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:61616");try{// 構造從工廠得到連接對象connection = connectionFactory.createConnection();// 啟動connection.start();// 獲取操作連接session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);// 獲取session注意參數(shù)值xingbo.xu-queue是一個服務器的queue俺祠,須在在ActiveMq的console配置destination = session.createQueue("FirstQueue");// 得到消息生成者【發(fā)送者】producer = session.createProducer(destination);// 設置不持久化公给,此處學習借帘,實際根據(jù)項目決定producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);// 構造消息,此處寫死淌铐,項目就是參數(shù)肺然,或者方法獲取sendMessage(session, producer); session.commit(); }catch(Exception e) { e.printStackTrace(); }finally{try{if(null!= connection) connection.close(); }catch(Throwable ignore) { } } }publicstaticvoidsendMessage(Session session, MessageProducer producer)throwsException {for(inti =1; i <= SEND_NUMBER; i++) { TextMessage message = session.createTextMessage("ActiveMq 發(fā)送的消息"+ i);// 發(fā)送消息到目的地方System.out.println("發(fā)送消息:"+"ActiveMq 發(fā)送的消息"+ i); producer.send(message); } }

3.2.再創(chuàng)建接收者Receiver.java

packagecom.mg.demo;importjavax.jms.Connection;importjavax.jms.ConnectionFactory;importjavax.jms.Destination;importjavax.jms.MessageConsumer;importjavax.jms.Session;importjavax.jms.TextMessage;importorg.apache.activemq.ActiveMQConnection;importorg.apache.activemq.ActiveMQConnectionFactory;publicclassReceiver{publicstaticvoidmain(String[] args) {// ConnectionFactory :連接工廠,JMS 用它創(chuàng)建連接ConnectionFactory connectionFactory;// Connection :JMS 客戶端到JMS Provider 的連接Connection connection =null;// Session: 一個發(fā)送或接收消息的線程Session session;// Destination :消息的目的地;消息發(fā)送給誰.Destination destination;// 消費者腿准,消息接收者MessageConsumer consumer; connectionFactory =newActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:61616");try{// 構造從工廠得到連接對象connection = connectionFactory.createConnection();// 啟動connection.start();// 獲取操作連接session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);// 獲取session注意參數(shù)值xingbo.xu-queue是一個服務器的queue际起,須在在ActiveMq的console配置destination = session.createQueue("FirstQueue"); consumer = session.createConsumer(destination);while(true) {// 設置接收者接收消息的時間,為了便于測試吐葱,這里誰定為100sTextMessage message = (TextMessage) consumer.receive(100000);if(null!= message) { System.out.println("收到消息"+ message.getText()); }else{break; } } }catch(Exception e) { e.printStackTrace(); }finally{try{if(null!= connection) connection.close(); }catch(Throwable ignore) { } } }}

3.3.測試結果

先運行接收者Receiver.java街望,在運行Sender.java。得到結果如下圖:(2個控制臺都會輸出如下圖數(shù)據(jù))

4.使用jfinal-ext中的jms插件操作activeMQ

整合quartz任務調(diào)度框架弟跑,實現(xiàn)每10秒發(fā)送一次消息到隊列灾前。

4.1.核心代碼

public static void main(String[] args) throwsInstantiationException, IllegalAccessException, ClassNotFoundException {JmsPlugin jp = newJmsPlugin("jms.properties");jp.start();PropertyConfig pc = PropertyConfig.me();pc.loadPropertyFile("job.properties");QuartzPlugin qp = new QuartzPlugin();if (pc.getPropertyToBoolean("a.enable")) { qp.add(pc.getProperty("a.cron"), (Job) Class.forName(pc.getProperty("a.job")).newInstance());} qp.start();}

4.2.配置文件jms.properties

################################# server info ################################## jms服務器地址serverUrl=tcp://localhost:61616username=adminpassword=admin################################# queue info ################################## 發(fā)送的隊列名字,用“孟辑,”號分隔sendQueues=firstMQ# 接受的隊列的名字哎甲,用“,”號分隔receiveQueues=firstMQ# 隊列firstMQ上消息名字為a的消息號queue.firstMQ.a=10000#接受到隊列q1上消息名字為a的消息的時候調(diào)用的處理器queue.firstMQ.a.resolver=com.mg.jfinal.ext.demo.resolver.MGResolver

4.3.配置文件job.properties

#JobAa.job=com.mg.jfinal.task.JobAa.cron=*/10 * * * * ?a.enable=true

4.4.運行結果

如圖:

Java高架構師饲嗽、分布式架構烧给、高可擴展、高性能喝噪、高并發(fā)、性能優(yōu)化指么、Spring boot酝惧、Redis、ActiveMQ伯诬、Nginx晚唇、Mycat、Netty盗似、Jvm大型分布式項目實戰(zhàn)學習架構師視頻免費學習加群:835638062 點擊鏈接加入群聊【Java高級架構】:https://jq.qq.com/?_wv=1027&k=5S3kL3v

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哩陕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赫舒,更是在濱河造成了極大的恐慌悍及,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件接癌,死亡現(xiàn)場離奇詭異心赶,居然都是意外死亡,警方通過查閱死者的電腦和手機缺猛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門缨叫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來椭符,“玉大人,你說我怎么就攤上這事耻姥∠郏” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵琐簇,是天一觀的道長蒸健。 經(jīng)常有香客問我,道長鸽嫂,這世上最難降的妖魔是什么纵装? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮据某,結果婚禮上橡娄,老公的妹妹穿的比我還像新娘。我一直安慰自己癣籽,他們只是感情好挽唉,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著筷狼,像睡著了一般瓶籽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上埂材,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天塑顺,我揣著相機與錄音,去河邊找鬼俏险。 笑死严拒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的竖独。 我是一名探鬼主播裤唠,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼莹痢!你這毒婦竟也來了种蘸?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤竞膳,失蹤者是張志新(化名)和其女友劉穎航瞭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坦辟,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡沧奴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了长窄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滔吠。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡纲菌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疮绷,到底是詐尸還是另有隱情翰舌,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布冬骚,位于F島的核電站椅贱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏只冻。R本人自食惡果不足惜庇麦,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喜德。 院中可真熱鬧山橄,春花似錦、人聲如沸舍悯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萌衬。三九已至饮醇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秕豫,已是汗流浹背朴艰。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留混移,地道東北人祠墅。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像沫屡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子撮珠,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容